Prüfen auf vorhandensein eines Cookies

piti66

Erfahrenes Mitglied
Hallo,

ich hab mal wieder ne frage! Und zwar hab ich ein votescript geschrieben! Dort kann soll man aber nur einmal werten können.
Da hab ich mir gedacht ich setze einfach einen cookie und mache die Prüfung dann mit zur Bedingung!
Aber irgendwie schreibt er immer in die Datenbank obwohl der cookie gesetzt ist!
Hier mal der Quelltext:
Also hier wird er gesetzt:
Code:
  if (isset($_COOKIE["VoteID".$vote_id]))
  {
  $echo=1;}
  else 	{
  setcookie("VoteID".$vote_id,xxx,time()+3600,"/neusinnlos/text/witz/");
  $echo=0;
  		 }

Und hier wird geprüft ob er vorhanden ist!
Code:
  	  if (isset($_COOKIE["VoteID".$vote_id]))
  		 {
  		 $eintragen=0;
  			  }
  	  else
  			  {
  		 $eintragen=1;
  		 }

Und hier wird der vote dann in die Datenbank geschrieben:
Code:
  if($vote > "0" && $eintragen==1 && $_GET["action"] =="voting") ...

Weiß jemand woran dass liegt?

mfg
 
Nur mal so eine Frage, wieso willst du das mit Cookies lösen wenn du eh mit einer Datenbank arbeitest?

Mach dir eine Tabelle vote_ips mit den Feldern IP und Zeit, und bevor du den Code fürs Eintragen ausführst, prüfst du eben ob diese IP schon in der Db steht. Mit der Zeit könntest du dann eine Zeit-Sperre machen.

Aber zu deinem Problem:

Wieso ürüfst du beim Eintragen die Variable $vote, wenn du oben den Wert in $echo speicherst?

PHP:
  if (isset($_COOKIE["VoteID".$vote_id]))  {
  $vote = 1;
}  else 	{
  setcookie("VoteID".$vote_id,xxx,time()+3600,"/neusinnlos/text/witz/");
  $vote = 0;
}

Und tausche diese Zeile gegen folgendes aus:

PHP:
if($vote == 1 && $eintragen == 1 && $_GET["action"] == "voting") ...

€dit: Und Mamphil hat Recht, eine Variable sollte man niemals nach einer Funktion benennen ...
 
Zuletzt bearbeitet:
Hi!

Eine Variable "$echo" zu nennen, ist höchst ungeschickt, da es eine Funktion gibt, die genauso heißt.

Mamphil
 
Das mit der IP ist zwar moeglich, aber im Grunde genommen Unsinn.
Immerhin aendert sich die IP von wahrscheinlich mehr als 90% Deiner Besucher bei jeder Einwahl.

Wenn es darum geht, dass eingeloggte User voten sollen, dann kannst Du die UserID oder den Usernamen speichern.
Der Cookie ist auf jeden Fall keine so schicke Loesung da es ja auch User gibt die keine Cookies akzeptieren.
Die koennen dann voten bis der Arzt kommt.
 
Also danke erstmal!
Die Variable $echo steht in einem andern script! Wo nur ein kleines fenster aufgeht ob gevotet werden darf oder nicht! Aber werde sie für euch trotzdem umbenennen!
Die $vote bekomme ich aus einen Formular, darum steht sie bei den Bedingungen! Hätte den Quellcode wohl ausführlicher machen sollen!
Also was wäre denn nun die beste variante wenn man nicht will dass jeder tausend mal voten darf! Es sind keine eingeloggten User sondern einfach nur Besucher auf der Seite!
Oder was wäre den bei meinen weg falsch!

mfg
 
Dann machst Du halt beides, Cookies & Datenbank mit IP und Zeit. Wenn der User keine Cookies akzeptiert, weichst Du auf die Variante mit der Datenbank aus.
Und wenn wir dir quelltexttechnisch helfen sollen, poste bitte den ganzen rein!
 
Bei nicht eingeloggten Usern ist es grundsaetzlich problematisch so etwas festzuhalten.
Beide Wege, Cookies und IP in der DB, sind nicht optimal, wie ich ja bereits erlaeutert habe.
Du hast ja nichts woran Du jemanden wirklich eindeutig identifizieren kannst.
Bei der IP-Methode gibt's dann z.B. folgendes:
Wenn jemand heute votet und morgen hab ich die IP die er heute hatte kann ich nicht voten.

Bei der Cookie-Methode hingegen:
Wenn meine Cookies deaktiviert sind kann ich so oft voten wie ich lustig bin.
Ausser Du baust vorher eine Ueberpruefung ein ob Cookies akzeptiert werden und laesst dann niemanden voten der keine Cookies annimmt. Aber auch nicht grad fein.
Ausserdem ist es ja auch nicht gerade schwierig ein Cookie wieder zu loeschen.
 
Also hier mal der ganze Quelltext!
1.Datenbankdatei
Code:
  <?PHP
  $anzahl=10; //Anzahl der Eintr&auml;ge pro Seite
  include("connect.php");
  $show = $_GET["show"];
  $table = "witzfr";
  if(!$show) {
  	$show=1;
  	  }
  	  $limit=$show*10;
  	  $limitanfang=($show-1)*10;
  	  $abfrage1=Mysql_query("select * from ".$table."");
  	  $number=mysql_num_rows($abfrage1);
  			  function starrating($durchschnitt)
  		   {
  	  $half_round = number_format(round(($durchschnitt*2), 0)/2,1,'.','');
 	 $durchschnitt = '<img src="../../images/stern/'.str_replace('.','',$half_round).'5.gif" width="75" height="13" border="0" />';
  	  return $durchschnitt;
  	  }
  	  ?>
  	  <table width="100%" cellspacing="0" cellpadding="0" align="center">
  		<tr>
  		  <td width="33%" valign="top" bgcolor="#ededed" align="left">
  		  <?PHP
  		  if($limitanfang > 0) { echo "<a href=\"javascript:history.back()\">Vorherige Seite</a>";  }
  		  ?>
  		  </td>
  		  <td width="34%" valign="top" bgcolor="#ededed" align="center">
  		  <?
  		  echo "Seite ".$show. " von ".ceil($number/10) ;
  		  ?>
  		  </td>
  		  <td width="33%" valign="top" bgcolor="#ededed" align="right">
  		  <?PHP
  		  $seiten=$show+1;
 		 if($number - $limit > 0) { echo "<a href=\"".$table.".php?show=$seiten\">N&auml;chste Seite</a>"; }
  		  ?>
  		  </td>
  		</tr>
  	  </table>
  	  <?
  	  $query1="select * from ".$table." order by datum desc limit ".$limitanfang.",".$anzahl;
  	  $abfrage1=Mysql_query($query1);
  	  while($row=mysql_fetch_object($abfrage1)) {
  	  $datu = getdate($row->datum);
  	  $datum = $datu[mday].".".$datu[mon].".".$datu[year];
  	  $vote_id=$row->id;
  	  if (isset($_COOKIE["VoteID".$vote_id]))
  		 {
  		 $eintragen=0;
  			  }
  	  else
  			  {
  		 $eintragen=1;
  		 }
  			  echo $_COOKIE["VoteID".$vote_id];
  	   echo $row->text;
  		   echo "<p></p>";
  		   $voteid=$row->id;
  	  ?>
  	  <form action="<? echo $PHP_SELF; ?>" method="get">
  		   <? echo (starrating($row->durchschnitt)); ?>
  		   <font>Bewerten:</font>
 	 <select name="vote" onChange="this.form.submit();window.open('vote.php?voteid=<? echo $row->id;?>&table=<? echo $table; ?>','_blank','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=no,width=125,height=100,top=0,left=0');location.reload();" style="width:77px; font-family:verdana; color:#000000; font-size:7pt">
  	   <option value="0">----------</option>
  	   <option value="1">sehr gut</option>
  	   <option value="2">gut</option>
  	   <option value="3">befriedigend</option>
  	   <option value="4">ausreichend</option>
  	   <option value="5">mangelhaft</option>
  	   </select>
  	  <input type="hidden" name="id" value="<?php echo $row->id; ?>">
  	  <input type="hidden" name="show" value="<?php echo $show; ?>">
  	   <input type="hidden" name="action" value="voting">
 	 <a href="print.php?id=<? echo $row->id; ?>&table=<? echo $table ?>" onclick="window.open(this.href,'_blank','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=300,height=200,top=0,left=0'); return false" target="_blank"><img src="../../images/drucker.gif" border="0" height="18px" title="Witz drucken"></a>
 	 <a href="send.php?id=<? echo $row->id; ?>&table=<? echo $table ?>" onclick="window.open(this.href,'_blank','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=400,height=600,top=0,left=0'); return false" target="_blank"><img src="../../images/email.gif" border="0" height="12px" title="Witz an Freund senden"></a>
  		   </form>
  	   <?
 		 if($vote > "0" && $eintragen==1 && $_GET["action"] =="voting"){
 		 $query="update ".$table." SET vote_gesamt = vote_gesamt + '".$vote."', vote_anzahl = vote_anzahl + 1, durchschnitt = vote_gesamt/vote_anzahl WHERE id=".$id."";
  		   $abfrage=mysql_query($query);
 			 			 			}
  	   }
  	   ?>
  	   <p></p>
  	  <table width="100%" cellspacing="0" cellpadding="0" align="center">
  		<tr>
  		  <td width="33%" valign="top" bgcolor="#ededed" align="left">
  		  <?PHP
  		  if($limitanfang > 0) { echo "<a href=\"javascript:history.back()\">Vorherige Seite</a>";  }
  		  ?>
  		  </td>
  		  <td width="34%" valign="top" bgcolor="#ededed" align="center">
  		  <?
  		  echo "Seite ".$show. " von ".ceil($number/10) ;
  		  ?>
  		  </td>
  		  <td width="33%" valign="top" bgcolor="#ededed" align="right">
  		  <?PHP
  		  $seiten=$show+1;
 		 if($number - $limit > 0) { echo "<a href=\"".$table.".php?show=$seiten\">N&auml;chste Seite</a>"; }
  		  ?>
  		  </td>
  		</tr>
  	  </table>

2.Vote Datei:
Code:
  <?php
  $vote_id=$_GET['voteid'];
  if (isset($_COOKIE["VoteID".$vote_id]))
  	{
  		 $echo=1;}
  else 	{
  	setcookie("VoteID".$vote_id,xxx,time()+3600,"/neusinnlos/text/witz/");
  	$echo=0;
  		 }
  
  ?>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <html>
  <head>
  <title>Megasinnlos.de - die Reise in den Wahnsinn</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <meta name="description" content="">
  <meta name="language" content="de">
  <meta http-equiv=" content-language" content="de">
  <meta lang="de" name="keywords" content="">
  <meta name="copyrights" content="Sebastian Schmiedel">
  <meta name="Robots" content="index,follow">
  <meta name="revisit-after" content="3 days">
  <meta name="Audience" content=" Alle ">
  <link rel="shortcut icon" href="http://www.megasinnlos.de/favicon.ico">
  <link rel="stylesheet" type="text/css" href="../../style/format.css" media="all">
  <link rel="stylesheet" type="text/css" href="../../style/schrift.css" media="all">
  </head>
  <body onLoad="setTimeout('window.close()', 3000)">
  <div align="center">
  <font>
  <?php
  if ($echo ==0)
  	{echo "Vielen Dank f&uuml;r Ihre Bewertung!";}
  else	{echo "Sie k&ouml;nnen nur einmal bewerten!";}
  ?>
  </font>
 <input type="button" value="Schließen" onClick="window.close()" style="font-family:verdana; color:#000000; font-size:7pt"></input>
  <br>
  <font class="klein">Das Fenster schließt sich in 3 Sekunden automatisch.</font>
  </div>
  </body>
  </html>

mfg
 
Zurück