ERLEDIGT
NEIN
NEIN
ANTWORTEN
17
17
ZUGRIFFE
630
630
EMPFEHLEN
-
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 :1 2 3 4 5 6 7
if (isset($_COOKIE["VoteID".$vote_id])) { $echo=1;} else { [b]setcookie("VoteID".$vote_id,xxx,time()+3600,"/neusinnlos/text/witz/");[/b] $echo=0; }
Und hier wird geprüft ob er vorhanden ist!
Code :1 2 3 4 5 6 7 8
if (isset($_COOKIE["VoteID".$vote_id])) { $eintragen=0; } else { $eintragen=1; }
Und hier wird der vote dann in die Datenbank geschrieben:
Code :1
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?
Und tausche diese Zeile gegen folgendes aus:PHP-Code:if (isset($_COOKIE["VoteID".$vote_id])) {
$vote = 1;
} else {
setcookie("VoteID".$vote_id,xxx,time()+3600,"/neusinnlos/text/witz/");
$vote = 0;
}
€dit: Und Mamphil hat Recht, eine Variable sollte man niemals nach einer Funktion benennen ...PHP-Code:if($vote == 1 && $eintragen == 1 && $_GET["action"] == "voting") ...
Geändert von diggity (02.08.05 um 12:33 Uhr)
-
Hi!
Eine Variable "$echo" zu nennen, ist höchst ungeschickt, da es eine Funktion gibt, die genauso heißt.
MamphilLösungsvorschlag: Wenn es mit dem mysql_query(...); Probleme gibt, pack ein die(mysql_error()); dahinter und guck dir den MySQL-Fehler an!
Artikel & Tutorial: Wie realisiere ich eine Umkreissuche nach Postleitzahlen mit der kostenlosen OpenGeoDB in PHP?
-
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.PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
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.PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
Also hier mal der ganze Quelltext!
1.Datenbankdatei
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
<?PHP $anzahl=10; //Anzahl der Einträ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ä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ächste Seite</a>"; } ?> </td> </tr> </table>
2.Vote Datei:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
<?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ür Ihre Bewertung!";} else {echo "Sie kö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
-
Was ist denn nun?
Wäre nett wenn jemand weiß an was dass liegt?
mfg
-
1.
2. Was ist denn genau Dein Problem?
Zitat von Bibel
Wir beraten Dich ueber Moeglichkeiten, dann postest Du Quelltext und jetzt meckerst Du, dass keiner was schreibt.
PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
Den Quelltext sollte ich posten! wollt ich ja eigentlich nicht!
Na hab ja immer noch dass problem dass er trotz dass er den cookie hat trotzdem die werte verändert!
mfg
sorry!
-
Warum wolltest Du den Source nicht posten?
Nutze naechstes Mal bitte die [ php ]-Tags, dann ist der Code leichter zu lesen.
Uebrigens solltest Du ein Ablauf-Datum angeben, sonst wird der Cookie geloescht wenn der Browser geschlossen wird.
Siehe setcookie().PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
Ja mach ich!
Ich gebe doch die zeit an! Er soll in einer stunde verfallen!
aber es der rest geht nicht! Die Cookies werden zwar geschrieben, aber bei der Bedingung, dass der Cookie nicht gesetzt sein darf wenn geschrieben werden soll wird immer geschrieben.
mfg
-
Huch, irgendwie hab ich vorhin gedacht Du setzt keine Zeit.
Sorry, mein Fehler.
Setz den Cookie mal so:
PHP-Code:setcookie("VoteID".$vote_id,"xxx",time()+3600);
PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
Bringt auch nichts! Dass Problem ist wahrscheinlich nicht beim setzen sondern bei der if abfrage:
Code :1 2 3 4 5
if($vote > "0" && !isset($_COOKIE["VoteID".$vote_id]) && $_GET["action"] =="voting") { $query2="update ".$table." SET vote_gesamt = vote_gesamt + '".$vote."', vote_anzahl = vote_anzahl + 1, durchschnitt = vote_gesamt/vote_anzahl WHERE id=".$id.""; $abfrage=mysql_query($query2); }
Hier will ich halt dass er nur in die Datenbank schreibt, wenn der Cookie nicht gesetzt ist!
mfg
Ähnliche Themen
-
Applescript: Vorhandensein einer Datei prüfen
Von einfach nur crack im Forum Coders TalkAntworten: 1Letzter Beitrag: 14.09.09, 15:46 -
Prüfen, ob Cookies aktiviert sind
Von Sasser im Forum PHPAntworten: 5Letzter Beitrag: 16.12.08, 15:52 -
Oracle: Objekt auf vorhandensein in einen varray prüfen
Von sceppi im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 01.07.08, 12:55 -
Klassen-Attribute auf vorhandensein Prüfen
Von mojitoweb im Forum PHPAntworten: 2Letzter Beitrag: 29.11.05, 14:12 -
Verfügbarkeit von cookies prüfen!
Von MBK Kold Baccula im Forum PHPAntworten: 3Letzter Beitrag: 08.08.04, 21:01





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren