Het php-tariefsysteem beoordeelt alles in plaats van één bericht

Hier is een stukje van mijn code:

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());  
}

nu is mijn probleem dat wanneer ik iets upvote/downvote, het 1 beoordeling toevoegt/verwijdert op alle berichten in plaats van alleen degene die je wilde beoordelen. Hoe maak je de stemmen uniek of zoiets

0
Eerst selecteer je alle berichten, loop je ze allemaal door en op/om omlaag om de beurt. Waarom, als u er slechts één wilt beoordelen? Waar heb je de id van de post die je echt wilt beoordelen?
toegevoegd de auteur JJJ, de bron
Houd alstublieft één vraag per post aan. Kies degene die je het liefst hebt beantwoord en verwijder de andere.
toegevoegd de auteur Mark Byers, de bron
1. Maak een variabele die de stemmen bevat en voeg vervolgens 1 toe, bijvoorbeeld $ Rankig ++; bel dan mysql_query (); 2. Om de kiezer te laten stemmen zodra je zijn ip in een bestand of een tabel moet opslaan en controleer dan of dat ip in het bestand staat of niet
toegevoegd de auteur boyd, de bron

2 antwoord

Deze lijn

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

haalt een paar grappen uit de tafel. Vervolgens verandert het script alle doorgangen

while ( $result = mysql_fetch_assoc($query) )

Dat betekent dat als je 'voteup' of 'stemown' in je _POST hebt, de lus alle gehackte grappen zal wijzigen.

Om dit op te lossen, moet je weten wat de grap is. U kunt een enkele verzoekvariabele gebruiken om dit aan te geven.

0
toegevoegd

Neem de _POST-controles niet op in de while() -instructie voor uw query.

Bijvoorbeeld:

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());

}

}

Maar u zou slechts één ranglijst tegelijk moeten bijwerken. Je script pakt 0-12-grappen en update ze op basis van één _POST-variabele (stemming of stemown).

0
toegevoegd