Reloadsperre Methode

piti66

Erfahrenes Mitglied
Da es ja mit den Cookies nicht so klappt wie ich will, wollte ich mal fragen was es noch für andere Methoden gibt damit ich verhindern kann dass jeder so oft votet wie er möchte!
Mit Ip wäre ja eine Möglichkeit nur brauch ich ja dann noch weitere variablen damit man halt mehrer Text trotzdem voten kann! Ansonsten ist bei einem vote ja schluß, weil die ip schon vorhanden ist! Man müßte also eine id oder so noch mitspeichern damit man mehrere verschiedene Texte bevoten kann aber nicht den gleichen!
Jemand einen idee?

mfg
 
Hallo,

du hast dir die Antwort doch schon selbst mit deiner Frage gegeben.
Speichere einfach die IP-Adresse des Besuchers nach dem Vote inkl. ID der Abstimmung und einem Timestamp in eine DB.
Bei erneutem Abstimmen prüfst du ob die IP mit der ID schon vorhanden ist - wenn ja dann testest du wie alt der Timestamp ist und nach einer gewissen Zeit 1-300 Minuten oder so löscht du den Eintrag einfach wieder und gibst den Vote wieder frei (wegen dynamischer IP-Adressen). Wenn deine gewünschte Zeit noch nicht abgelaufen ist dann speicherst du den Vote einfach nicht.

Das ist es!
Noch Fragen oder sind alle Klarheiten beseitigt?
 
Gruen, oder blau. Aber ganz sicher nicht gelb.

PHP:
$ips=mysql_query("select * from ips where ip='$ip' and vote='$vote'");
$ip=mysql_fetch_assoc($ips);
if ((empty($ip)) || ($ip['time']+21600<time()))
 {
   //vote
 }
else
 {
   //no-vote
 }

Nur mal ganz grob. Natuerlich muss bei Zeitueberschreitung auch die IP wieder aus der DB geloescht werden. Oder die Zeit wird bei erneuten Schreiben einfach aktualisiert.
 
Muss ich dann mal ausprobieren!
Wie funktioniert der rest den?
Vielleicht find ich ja was bei google!
Dass wird wieder dauern!

mfg
 
Zu nahezu jeder PHP-Funktion bekommst Du auf php.net Beispiele.
Wenn nicht ist zumindest die Syntax erklaert.

Anhand dessen sollte PHP eigentlich zum Kinderspiel werden wenn man sich etwas damit beschaeftigt.

Mein Beispiel wirst Du uebrigens wahrscheinlich nicht per Copy&Paste uebernehmen koennen. Hab's ja recht allgemein verfasst.
 
Also mit den cookies dass geht eigentlich, aber es muss noch ein Fehler im Script sein!
Irgendwie mit der while schleife! Weil wenn ich den tag mit den cookie rausnehme geht der alles mit der ersten und letzen id, aber bei den anderen passiert nichts!
Hier mal das script:

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;
  	  $abfrage2=Mysql_query("select * from ".$table."");
  	  $number=mysql_num_rows($abfrage2);
  			  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;
  	   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="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 (isset($_COOKIE["VoteID".$vote_id.$table]))
  		   {
  		   }
  		   else
  		   {
  	  if (($vote > "0") && ($_GET["action"] =="voting"))
  			   {
 		 $update="update ".$table." SET vote_gesamt = vote_gesamt + '".$vote."', vote_anzahl = vote_anzahl + 1, durchschnitt = vote_gesamt/vote_anzahl where=".$id."";
  		   $ausup=mysql_query($update);
  			   }
  		   }
  	   ?>
  	   <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>

Und das Vote script:
Code:
  <?php
  $vote_id=$_GET['voteid'];
  if (isset($_COOKIE["VoteID".$vote_id.$table]))
  	{
  		 $eintragen=1;}
  else 	{
  	setcookie("VoteID".$vote_id.$table,1,time()+3600,"/");
  	$eintragen=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 ($eintragen ==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>

Sieht jemand wo der Fehler ist?

bitte mfg

piti
 
Siehst Du den Unterschied zwischen Deinem Code und meinem Code?

Richtig, meiner ist bunt.
Das nennt man Syntax-Highlighting und macht das lesen des Codes etwas einfacher.
Dementsprechend nutze doch bitte die entsprechenden Tags, und nicht einfach nur [ code ].
Diese Tags waeren:
[ html ] [ /html ] fuer HTML-Code
[ php ] [ /php ] fuer PHP-Code
Die Leerzeichen musst Du natuerlich entfernen.

Danke fuer's Gespraech.
 
Zurück