Dabei seit: 22.11.2006 Ort: - Alter: 28 Geschlecht:
Verfasst Do 09.02.2012 14:10 Titel
IP Sperre für Voting
Moin,
ich möchte bei einem Voting das jede IP Adresse innerhalb von 24 Stunden nur einmal abstimmen darf.
Mein Lösungsansatz scheint aber nur teilweise zu funktionieren. Bei mir klappts, aber leider, wie ich in der Datenbank sehen kann, leider nicht bei allen IP Adressen:
Code:
mysql_query("DELETE FROM `ip_adresse` WHERE `Datum` <= ADDDATE( NOW() , INTERVAL -1 DAY )");
$ip = getenv ("REMOTE_ADDR");
$select ="SELECT * FROM `ip_adresse` WHERE `IP` = '$ip' LIMIT 0, 1";
$result = mysql_query($select,$link);
if($result){
if(mysql_num_rows($result) == "0"){
echo "Abstimmen";
}
while($row = mysql_fetch_array($result))
{
echo "<div id=\"sperre\">";
echo "Sie haben bereits innerhalb der letzten 24 Stunden abgestimmt!";
echo "</div>";
}
}
Beim Abstimmvorgang wird die IP Adresse in der Datenbank gespeichert. Und dort finde ich leider Dubletten...
Hat jemand ne Idee, was an meinem Lösungsansatz falsch ist?
wenn die Anzahl der Ergebniszeilen Null ist, dann abstimmen
while($row = mysql_fetch_array($result))
{
echo "<div id=\"sperre\">";
echo "Sie haben bereits innerhalb der letzten 24 Stunden abgestimmt!";
echo "</div>";
für jeden gefundenen Datensatz gibts einmal die Meldung, dass er nicht darf ... seltsam
}
}
Der Code hier ist ja nur die Lesen-Seite. Die Doubletten entstehen beim Schreiben. Sieht so aus, als ob der Code nicht von dir ist und du ihn nur teilweise verstanden hast ... ausserdem sieht er irgendwie ungeschickt aus. Sorry.
Ich würde erstmal dashier etwas "gefälliger" machen, z.B. mit
$myqr=mysql_query('select count(*) as anz from ip_adresse where '.$ip.'=ip');
$row=mysql_fetch_array($myqr);
if ($row['anz']==0)
echo 'Abstimmen!';
else
echo 'och nö ...';
wenn die Anzahl der Ergebniszeilen Null ist, dann abstimmen
while($row = mysql_fetch_array($result))
{
echo "<div id=\"sperre\">";
echo "Sie haben bereits innerhalb der letzten 24 Stunden abgestimmt!";
echo "</div>";
für jeden gefundenen Datensatz gibts einmal die Meldung, dass er nicht darf ... seltsam
}
}
Der Code hier ist ja nur die Lesen-Seite. Die Doubletten entstehen beim Schreiben. Sieht so aus, als ob der Code nicht von dir ist und du ihn nur teilweise verstanden hast ... ausserdem sieht er irgendwie ungeschickt aus. Sorry.
Ich würde erstmal dashier etwas "gefälliger" machen, z.B. mit
$myqr=mysql_query('select count(*) as anz from ip_adresse where '.$ip.'=ip');
$row=mysql_fetch_array($myqr);
if ($row['anz']==0)
echo 'Abstimmen!';
else
echo 'och nö ...';
...
Mit PHP und Datenbanken hatte ich vorher noch nicht allzu viel am Hut. Was da steht verstehe ich schon, der Code ist auch von mir. Aber so richtig tief drin bin ich noch nicht in der Materie
Dabei seit: 22.11.2006 Ort: - Alter: 28 Geschlecht:
Verfasst Do 09.02.2012 16:19 Titel
qualidat hat geschrieben:
$myqr=mysql_query('select count(*) as anz from ip_adresse where '.$ip.'=ip');
$row=mysql_fetch_array($myqr);
if ($row['anz']==0)
echo 'Abstimmen!';
else
echo 'och nö ...';
...
Würdest du mir deinen "gefälligen" Code auch ein wenig erläutern ?
Dabei seit: 14.09.2006 Ort: Berlin Alter: 51 Geschlecht:
Verfasst Do 09.02.2012 16:35 Titel
Zitat:
Würdest du mir deinen "gefälligen" Code auch ein wenig erläutern *zwinker* ?
Ja, warum nicht. Ich hoffe, es sind keine Tippfehler drin, habe ihn jetzt nicht explizid getestet ... sollte aber grundsätzlich funktionieren.
Zitat:
$myqr=mysql_query('select count(*) as anz from ip_adresse where '.$ip.'=ip');
Das Select-Statement. Die Count-Funktion sollte bekannt sein. Damit der Name für den Zugriff aufs Ergebnis besser zu handhaben ist die "as anz"-Erweiterung.
$row=mysql_fetch_array($myqr);
Diese Anweisung packt man normalerweise in eine While-Schleife, wenn man mehrere Datensätze in der Ergebnismenge erwartet. Bei jedem Aufruf rückt dann der Cursor einen Datensatz weiter, bis dahin ist $row immer true. Brauche wir aber nicht, da wir nur einmal die Anzahl abgefragt haben und definitiv immer nur eine Antwort kommt.
if ($row['anz']==0)
$row ist auch eine Liste, die die abgefragten Felder des Datensatzes in Name und Wert enthält. Uns interessiert nur das eine Feld "anz". Wenn das den Wert Null hat, gibts keinen Datensatz mit der gesuchten IP ...
echo 'Abstimmen!';
else
echo 'och nö ...';
geschweifte Klammern hinter if und Else braucht man nur, wenn man mehrere Befehle (Programmblocks) hinschreiben muss, bei nur einem, sind die entbehrlich.
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.