A 'kullanmıştır' sorunu

3 Cevap php

Tamam ... Yani, şu sorunun geldi: ben düzgün çalışan bir tablo var - bu kullanıcıların kimlikleri, ileti 'kimlikleri, ileti' içeriği, post yapıldığı zaman tutar.

Ben şu dışarı basılmış olması için kullanabilirsiniz: yazının yazarı ve ne zaman sonrası yapılmış olan yazı, içeriğini. Şimdiye kadar her şey gayet güzel çalışıyor.

Şimdi ... Ben kullanıcıların belirli bir yazı için oy sağlayan bir düğme var - her şey de burada gayet güzel çalışıyor. Ancak, şimdi ben her altındaki onlar düğmeye bastı ettik zaman yazı sevdim ve insanların bir liste olacak yayınlamak, böylece who and when has voted. Bilirsin gösterecek bir yeni özellik daha yapmak istiyorum.

My idea was to have two tables - the one holding the post's info post_table, and one more table voted_table that will have the user IDs, the time the button was pressed and the post_id that the vote has been made for... But I have no idea how to actually make it. So pretty much my question is:

Nasıl bir düğmenin tıklama + diğer bazı bilgiler başka bir tablodan bir tablo bilgileri içine ekleyebilirsiniz?

3 Cevap

CREATE TABLE `user` (
  `id` INTEGER UNSIGNED NOT NULL auto_increment,
  `username` varchar(32) default NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

CREATE TABLE `post` (
  `id` INTEGER UNSIGNED NOT NULL auto_increment,
  `owner_id` INTEGER UNSIGNED default NULL,
  `content` TEXT default NULL,
 PRIMARY KEY (`id`),
 KEY `post_I_owner` (`owner_id`),
 CONSTRAINT `post_FK_user`
   FOREIGN KEY (`owner_id`)
   REFERENCES `user` (`id`)
   ON DELETE SET NULL
) ENGINE=InnoDB;

CREATE TABLE `vote` (
  `id` INTEGER UNSIGNED NOT NULL auto_increment,
  `user_id` INTEGER UNSIGNED default NULL,
  `post_id` INTEGER UNSIGNED,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY (`id`),
   UNIQUE KEY `vote_IU_user_post` (`user_id`,`post_id`),
   CONSTRAINT `vote_FK_user`
     FOREIGN KEY (`user_id`)
     REFERENCES  `user` (`id`)
     ON DELETE SET NULL,
   CONSTRAINT `vote_FK_post`
     FOREIGN KEY (`post_id`)
     REFERENCES  `post` (`id`)
     ON DELETE CASCADE
) ENGINE=InnoDB;

Yani yukarıdaki şema ile aşağıdaki yapabilirim ...

viewPost sayfası için html / php size olabilir

<form name="vote_form" action="postVote.php" method="POST">
  <input type="hidden" name="post_id" value="1" />
  <input type="submit" value="Vote for this Post" />
</form>

Öyleyse yılında votePost.php gibi bir şey yapabilirsiniz:

if(isset($_SESSION['user']['user_id']))
{
   $userid = $_SESSION['user']['user_id'];
}
else
{
  // redirect to a login or something
}

$sql = "INSERT INTO vote (user_id, post_id) VALUES (%s,%s)"
$sql = sprintf($sql, $userid, $_POST['post_id']);
mysql_query($sql);

Bu şekilde mysql sizin için zaman damgası ilgilenir. Eğer db ve tüm bu eğlence güvenlik şeyler takmadan önce (ben gerçekten burada yapmadım ki) doğrulamak / giriş verileri doğrulamak gerektiğini unutmayın. Id de (ki kendi işlevini kaçan / sizin değer quouting en ilgilenir) mysqli veya PDO Mysql yerine eski mysql libararies kullanarak ve hazırlanmış bir stament kullanmanızı öneririz

Eğer veritabanı işlemleri destekler eğer. Anahtar kelimeler için mysql görünüm yürütme ve DURDURMAK BEGIN. Bunu yaparsanız Ancak, iki yerlerde veri saklamak olacak.

Alternatif olarak, voted_table içinde oy toplamları saklayabilir ve oy taksitli voted_table katılmak için ilk sorguyu değiştirebilirsiniz.

select P.post_id, sum(V.votes) # add other post_table fields
from post_table as P, voted_table as V
where P.post_id=V.post_id
group by P.post_id #add other post_table fields you need here also

Kullanıcı, bir çift hareketli parçayı gereken bir düğmeye tıkladığında ekleme sorgusu çalıştırmak için. Öncelikle, düğmesi ile bir form eklemeniz gerekir. (Eğer başka bir yerden elde edebilirsiniz sürece Post_id ve user_id) "Gizli" alanlarını kullanarak forma için yeterli bilgi eklemek gerekir. Sen başka bir PHP sayfası olarak form üzerinde eylem ayarlamak gerekir. İkinci PHP sayfasında, size belirtilen form değişkenleri almak ve ekleme sorgusu oluşturmak için kullanabilirsiniz. Eğer form method = "POST" kullandıysanız (Orada düşünmelisiniz güvenlik sorunları user_id değerini güvenen ve kullanıcı girişini kontrol gibi,, ama ben girmeyeceğim.), Daha sonra $ _POST ile değerleri almak [$ FormFieldName].