Bewertungssystem mit Votesperre - Problem

shorty

Erfahrenes Mitglied
Guten Abend Community,

ich bin gerade dabei ein Bewertungssystem zu programmieren, bei welchem die User bestimmte Bilder bewerten können. Um dies nun so genau wie möglich zu machen, versuche ich eine Art Votesperre einzubauen, so dass jeder User innerhalb einer bestimmten Zeitspanne auch nur einmal voten darf. Bei diesem Skript kann jeder User, der die Seite besucht, seine Bewertung abgeben.
Ich habe diesbezüglich ein Cookie erstellen lassen, welches IP des Users und ID des Bildes speichert. Nun muss ich natürlich vergleichen, ob der User mit der abgespeicherten IP schonmal zu dem Bild eine Bewertung abgegeben hat.

Mein Problem ist nun folgendes:
Ich habe eine Tabelle "rating" in welcher ich jede Bewertung abspeichere (ratingid, picidfk, ratingip, rate und ratingdate).
Ich komme mit der Überprüfung nur nicht zurecht. D.h., ich nutze ein while-Schleife, um an die gesamten Einträge aus der Tabelle heran zu kommen. Wenn ich nun den Vergleich mache, läuft die Schleife logischerweise so oft durch, bis er alle Einträge auf diesen Vergleich geprüft hat. Da sich aber auch das Formular bzw. die Fehlermeldung innerhalb dieser Schleife befindet, wird sie auch dementsprechend oft angezeigt.

Wie kann ich das nun umgehen. Ich möchte weiterhin prüfen, ob jemand schon eine Bewertung getätigt hat, jedoch nur einmal ausgeben, dass er schon gevotet hat bzw. das Formular anzeigen.

Hat da jemand vielleicht eine Idee?

Mein Skript sieht wie folgt aus:

PHP:
<?php
if(isset($_COOKIE["rating"])) {
	$tmp = explode("|", $_COOKIE["rating"]);
	$ip = $tmp[0];
	$id = $tmp[1];
}

$isset = $db->query("SELECT picidfk, rateip FROM rating WHERE picidfk = '".$_GET["picid"]."'");
while($check = $db->fetch($isset)) {
	if($ip == $check["rateip"] AND $id == $check["picidfk"]) {
?>
Du hast dieses Bild schon bewertet.
<?php
	} else {
?>
<form action="index.php?inc=galerie&action=details&picid=<?php echo $_GET["picid"]; ?>" method="post" name="rating">
 <select name="rate" size="1">
  <option value="1" selected>Sehr gut</option>
  <option value="2">Gut</option>
  <option value="3">Befriedigend</option>
  <option value="4">Ausreichend</option>
  <option value="5">Mangelhaft</option>
  <option value="6">Ungenügend</option>
 </select>
 <input type="hidden" name="picidfk" value="<?php echo $_GET["picid"];?>">
 <input type="submit" name="rating" value="bewerten">
</form>
<?php
	}
}
?>

Danke schonmal im Vorraus.
 
PHP:
<?php
if(isset($_COOKIE["rating"])) { 
    $tmp = explode("|", $_COOKIE["rating"]); 
    $ip = $tmp[0]; 
    $id = $tmp[1]; 
} 

$isset = $db->query("SELECT picidfk, rateip FROM rating WHERE picidfk = '".$_GET["picid"]."'"); 
$num = 0; // je nach dem ob du es hier oder in der whileschleife haben willst...
while($check = $db->fetch($isset)) { 

    if($ip == $check["rateip"] AND $id == $check["picidfk"] AND $num === 0) { 

      echo "Du hast dieses Bild schon bewertet. ";
      $num++;
    } else { 
?> 
<form action="index.php?inc=galerie&action=details&picid=<?php echo $_GET["picid"]; ?>" method="post" name="rating"> 
 <select name="rate" size="1"> 
  <option value="1" selected>Sehr gut</option> 
  <option value="2">Gut</option> 
  <option value="3">Befriedigend</option> 
  <option value="4">Ausreichend</option> 
  <option value="5">Mangelhaft</option> 
  <option value="6">Ungenügend</option> 
 </select> 
 <input type="hidden" name="picidfk" value="<?php echo $_GET["picid"];?>"> 
 <input type="submit" name="rating" value="bewerten"> 
</form> 
<?php 
    } 
}
?>

hoffe die geholfen zu haben
 
Zurück