mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Mi 17.10.2018 08:22 Benutzername: Passwort: Auto-Login

Thema: IP Sperre für Voting vom 09.02.2012


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> IP Sperre für Voting
Autor Nachricht
gotoAndPlay
Threadersteller

Dabei seit: 22.11.2006
Ort: -
Alter: 34
Geschlecht: Männlich
Verfasst Do 09.02.2012 14:10
Titel

IP Sperre für Voting

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden
qualidat

Dabei seit: 14.09.2006
Ort: Berlin
Alter: 57
Geschlecht: Männlich
Verfasst Do 09.02.2012 15:05
Titel

Antworten mit Zitat Zum Seitenanfang

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ö ...';

...
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
gotoAndPlay
Threadersteller

Dabei seit: 22.11.2006
Ort: -
Alter: 34
Geschlecht: Männlich
Verfasst Do 09.02.2012 15:19
Titel

Antworten mit Zitat Zum Seitenanfang

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 *zwinker*
  View user's profile Private Nachricht senden
gotoAndPlay
Threadersteller

Dabei seit: 22.11.2006
Ort: -
Alter: 34
Geschlecht: Männlich
Verfasst Do 09.02.2012 16:19
Titel

Antworten mit Zitat Zum Seitenanfang

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 *zwinker* ?
  View user's profile Private Nachricht senden
qualidat

Dabei seit: 14.09.2006
Ort: Berlin
Alter: 57
Geschlecht: Männlich
Verfasst Do 09.02.2012 16:35
Titel

Antworten mit Zitat Zum Seitenanfang

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.

  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
gotoAndPlay
Threadersteller

Dabei seit: 22.11.2006
Ort: -
Alter: 34
Geschlecht: Männlich
Verfasst Do 09.02.2012 17:05
Titel

Antworten mit Zitat Zum Seitenanfang

Danke! Dann werde ich das gleich einmal ausprobieren...
  View user's profile Private Nachricht senden
 
Ähnliche Themen Multi-Login - Sperre
php voting sicherheitsmöglichkeiten
Voting selbst gemacht
Software für einen Fotowettbewerb / Fotogalerie mit Voting
PHP Script für Bilder-Upload&Voting!
suche Voting Software (für wöchentliche Musik Chart-Liste)
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


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.