Problem mit relativ einfacher ip_sperre

Eistee

Erfahrenes Mitglied
Hi,
ich hab ein gallery-script geschrieben, in dem man alle bilder auch bewerten kann.
Für jedes Bild wird ein Spalte in der DB mit folgen Feldern angelegt:
"name" "datum" "kommentar" "rating" "clicks" "ip" "id"
Das Feld "ip" hat erstmal den Wert NULL
Wen jetzt ein user das Bild bewertet soll mit folgendem Code festgestellt werden, ob er berreits einmal gevotet hat:
PHP:
$res = mysql_connect("localhost", "root", "");
    if (!$res)
    {
        echo "Kann z.Z. keine Verbindung zum Datenbankserver aufbauen.\n";
        exit;
    }
    mysql_select_db("meineDB");

    $sqlab = "SELECT * FROM gallery WHERE id = ".$id." AND date = ".$date;
    $res = mysql_query($sqlab);
    $row = mysql_fetch_array($res);

    $new_rating = $row[rating] + $rating;
    $new_clicks = $row[clicks] + 1;
    $user_ip = $_SERVER['REMOTE_ADDR'];

    if ($user_ip != $row[ip])
    {    
        $sqlab = "UPDATE gallery SET rating = ".$new_rating.", clicks = ".$new_clicks.", ip = ".$user_ip." WHERE id = ".$id;
        mysql_query($sqlab);
    }
    mysql_close();
Wenn ich die Abfrage nach der ip weg lasse, funktioniert alles super, aber der user kann beliebig oft für ein Bild voten.
Mit der Abfrage, passiert garnix, sprich es werden keine Werte in der DB upgedatet :(
Wo liegt der Fehler? Is doch eigentlich alles richtig, oder?!

Hoffe, ihr könnt mir auf die Sprünge helfen.

P.S.: das Feld ip ist übrigens "char(50)" ;)
 
Hab jetzt grad nochmal ne ganze Weile rumprobiert, aber den fehler trotzdem nicht gefunden.
Wenn man den teil raus lässt, in dem die aktuelle IP in die datenbank geschrieben wird
... ip = ".$user_ip." WHERE id = ".$id;
funktioniert alles wieder wunderbar - aber eben ohne die Sperre
Mit diesem Abschnitt wird garnix mehr in die DB eingetragen
Was mach ich falsch?! :(
 
Zuletzt bearbeitet:
Ich würde die DB abfrage ein bischen anders machen.
Nämlich gucken ob inerhalb 24 stunden das datum vorhanden ist.
Also du rechnest erstma das datum weniger 24 std aus.
Danach guckst du in der db ob eine datums ip kombination vorhanden ist, welche über bzw unter der ausgerechnetet zeit ist.
Das machste einfach mit Mysql_num_rows(). Dann hauste das durech ne if schleife. Wenn 1 rauskommt darf er nicht nochma voten bei 0 darf er.
Damit ersparste dir nen paar befhele und hast vieles einfach in den query reingehaun.
Wenns nicht so übermäßig klar ist erläuter ich das nochma ;-)
 
Hi, danke für deine Antwort.
In der Variable $date ist bei meinem script ein Wert, wie z.B. 0205 (steht für 2.5.) gespeichert, also kein "echtes" Datum.
Dieser Wert gibt lediglich an, wann das entsprechende Bild entstanden ist.
Mit der Ip Sperre möchte ich lediglich vermeiden, dass ein User zweimal für dasselbe Bild voten kann. Daher auch relativ simple code.
Die Spalte "ip" in der DB hat standardmässig den WERT "NULL", votet ein user nun für ein Bild, so soll neben $new_rating und $new_clicks auch seine aktuele ip in die DB geschrieben werden.
Passiert über diesen Code:
Code:
$sqlab = "UPDATE gallery SET rating = ".$new_rating.", clicks = ".$new_clicks.", ip = ".$user_ip." WHERE id = ".$id;
Lässt man den Teil mit der ip aus diesem code weg, funktioniert auch alles wunderbar.
Warum nicht damit? Wo liegt der Fehler?
Es wird dann garnix in der DB geändert :(

Hoffentlich kann mir jetzt jemand weiterhelfen.
 
Hab ich grad mal gemacht und das hier rausbekommen
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '.0.1 WHERE id = 22' at line 1
Der Fehler muss also hier drin stecken:
Code:
$sqlab = "UPDATE gallery SET rating = '$new_rating', clicks = '$new_clicks', ip = '$user_ip' WHERE id = '$id'";
Was mach ich denn hier falsch? :(
 
Zuletzt bearbeitet:
Zurück