0

これが私のコードの一部です:

if(isset($_GET['nyaste'])) {
$query = mysql_query("SELECT * FROM jokes ORDER BY id DESC LIMIT 0, 12") or die(mysql_error());
while ( $result = mysql_fetch_assoc($query) ) { 
$id = $result["id"];  
if(isset($_POST['voteup'])) {
mysql_query("UPDATE jokes SET ranking = ranking + 1 WHERE id = $id ") or die(mysql_error());  
}  
if(isset($_POST['votedown'])) {
mysql_query("UPDATE jokes SET ranking = ranking - 1 WHERE id = $id ") or die(mysql_error());  
}

今、私の問題は、何かに賛成票を投じたり反対票を投じたりすると、評価するつもりだった投稿だけでなく、すべての投稿に1つの評価を追加/削除することです。どうやって投票をユニークにするのですか?

4

2 に答える 2

0

クエリのwhile()ステートメント内に_POSTチェックを含めないでください。

例えば:

if(isset($_GET['nyaste'])) {

$add_to_vote = 0;

if(isset($_POST['voteup'])) {

$add_to_vote++;

}

else if(isset($_POST['votedown'])) {

$add_to_vote--;

}

$query = mysql_query("SELECT * FROM jokes ORDER BY id DESC LIMIT 0, 12") or die(mysql_error());
while ( $result = mysql_fetch_assoc($query) ) { 

$id = $result["id"];  

if($add_to_vote != 0){

// update the current ID
$query = mysql_query("UPDATE jokes SET ranking = ranking + $add_to_vote WHERE id = '$id'") or die(mysql_error());

}

}

ただし、一度に1つのランキングのみを更新する必要があります。スクリプトは0〜12のジョークを取得し、1つの_POST変数(voteupまたはvotedown)に基づいてそれらを更新しています。

于 2012-06-23T21:08:36.320 に答える
0

この行

$query = mysql_query("SELECT * FROM jokes ORDER BY id DESC LIMIT 0, 12")  ...

テーブルからいくつかのジョークを取得します。次に、スクリプトは通過するすべてのものを変更します

while ( $result = mysql_fetch_assoc($query) )

つまり、_POST に「voteup」または「votedown」のいずれかがある場合、ループはフェッチされたすべてのジョークを変更します。

これを修正するには、投票したジョークの ID を知る必要があります。リクエスト変数を使用してそれを示すことができます。

于 2012-06-23T20:27:28.857 に答える