私は自分のサイトに投票システムを作ろうとしています。1人のユーザーが特定の投稿を好きまたは嫌いにすることができるようにデータベーステーブルを設定する方法が正確にはわかりません(そして、彼は他の投稿を好き/嫌いにすることができます(ただし、一度だけ-投稿を好き/嫌いにすることはできません)一回以上))。
「ユーザー名」が主キーであるユーザーテーブルがあります。
次に、post_text、timestamp、post_id (これは主キー)、user_name (FK は users テーブルからのユーザー名)、category、posvotes、negvotes
の最後のテーブルは、votes テーブルです: username (FK はユーザーからのユーザー名です)。テーブル)、post_id (FK は posts テーブルの post_id)、votedpos、votedneg。
これが機能するようにテーブルが正しく設定されているかどうかは本当にわかりません。
ここに私のphpコードがあります:(これは古いコードです。クエリはmysqliステートメントに変更されるため、非推奨のmysqlステートメントは気にしないでください)
$post_idと$user_nameは正しく機能しており、現在のユーザー名とpost_idを持っています.
$post_id = $_SESSION['post_id'];
$user_name = $_SESSION['user_name'];
if(mysql_query("SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."' AND(SELECT * FROM votes WHERE post_id='".$post_id."' AND votedpos=0)"))
{
$vote = "UPDATE posts SET posvotes=posvotes+1 WHERE post_id='".$post_id."'";
$runvote = mysql_query($vote) or die("error");
$safe = "UPDATE votes SET votedpos=1 WHERE post_id='".$post_id."'";
$runsafe = mysql_query($safe);
if(mysql_query("SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."' AND(SELECT * FROM votes WHERE votedpos>0 AND username='".$user_name."')")) //if u +voted, then fail
{
echo "cant vote twice";
}
else
{
if(mysql_query("SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."' AND (SELECT * FROM votes WHERE negvotes>0 AND username='".$user_name."')")) //if u negvoted previously, change your vote to plusvote
{
$vote = "UPDATE posts SET posvotes=posvotes+1 WHERE post_id='".$post_id."'";
$runvote = mysql_query($vote);
mysql_query("UPDATE posts SET negvotes=negvotes-1 WHERE post_id='".$post_id."'");
mysql_query("UPDATE votes SET votedneg=0 WHERE post_id='".$post_id."'");
$safe = "UPDATE votes SET votedpos=1 WHERE post_id='".$post_id."'";
$runsafe = mysql_query($safe);
}
}
}
投稿を嫌うために、私は同じスクリプトを持っています (肯定的な投票が否定的な投票になる場合を除いて)。しかし、これを機能させることができず、テーブルの設定が間違っているのか、PHPコーディングが間違っているのかわかりません。