Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
gotoAndPlay
Threadersteller
Dabei seit: 22.11.2006
Ort: -
Alter: 40
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?
|
|
|
|
|
qualidat
Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht:
|
Verfasst Do 09.02.2012 15:05
Titel
|
|
|
Zitat: | mysql_query("DELETE FROM `ip_adresse` WHERE `Datum` <= ADDDATE( NOW() , INTERVAL -1 DAY )");
du löschst einfach Alles, was älter als ein Tag ist, ok
$ip = getenv ("REMOTE_ADDR");
du holst dir die IP des aktuellen Users, ok
$select ="SELECT * FROM `ip_adresse` WHERE `IP` = '$ip' LIMIT 0, 1";
du liest alle Datensätze mit der IP des Users, begerenzt aber die Ausgabe auf 1 Datensatz, hmmm
$result = mysql_query($select,$link);
$result ist true, wenn das Statement ohne Fehler lief und die Anzahl der Datensätz mind. 1 ist ...
if($result){
if(mysql_num_rows($result) == "0"){echo "Abstimmen";}
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ö ...';
...
|
|
|
|
|
Anzeige
|
|
|
gotoAndPlay
Threadersteller
Dabei seit: 22.11.2006
Ort: -
Alter: 40
Geschlecht:
|
Verfasst Do 09.02.2012 15:19
Titel
|
|
|
qualidat hat geschrieben: | Zitat: | mysql_query("DELETE FROM `ip_adresse` WHERE `Datum` <= ADDDATE( NOW() , INTERVAL -1 DAY )");
du löschst einfach Alles, was älter als ein Tag ist, ok
$ip = getenv ("REMOTE_ADDR");
du holst dir die IP des aktuellen Users, ok
$select ="SELECT * FROM `ip_adresse` WHERE `IP` = '$ip' LIMIT 0, 1";
du liest alle Datensätze mit der IP des Users, begerenzt aber die Ausgabe auf 1 Datensatz, hmmm
$result = mysql_query($select,$link);
$result ist true, wenn das Statement ohne Fehler lief und die Anzahl der Datensätz mind. 1 ist ...
if($result){
if(mysql_num_rows($result) == "0"){echo "Abstimmen";}
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
|
|
|
|
|
gotoAndPlay
Threadersteller
Dabei seit: 22.11.2006
Ort: -
Alter: 40
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 ?
|
|
|
|
|
qualidat
Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
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.
|
|
|
|
|
|
gotoAndPlay
Threadersteller
Dabei seit: 22.11.2006
Ort: -
Alter: 40
Geschlecht:
|
Verfasst Do 09.02.2012 17:05
Titel
|
|
|
Danke! Dann werde ich das gleich einmal ausprobieren...
|
|
|
|
|
|
|
|
Ähnliche Themen |
Multi-Login - Sperre
php voting sicherheitsmöglichkeiten
Voting selbst gemacht
PHP Script für Bilder-Upload&Voting!
Software für einen Fotowettbewerb / Fotogalerie mit Voting
suche Voting Software (für wöchentliche Musik Chart-Liste)
|
|
|
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.
|
|