Fehler 500 bei Newsletteranmeldung
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
-
Hallo zusammen,
leider hab ich mit Prorgammierung so gar nichts am Hut. Deswegen benötige ich Eure Hilfe.
Auf meiner Website https://turmfalken-nikolai-spandau.de/turmfalkennews kann man sich für einen Newsletter anmelden. Den Code für das Newslettersystem hatte mir vor einigen Jahren "test42test" hier aus dem Forum geschrieben.
Seit ein paar Tagen bekommen User die sich da anmelden wollen aber immer einen 500 Fehler angezeigt.
Die Log Datei gibt folgende Fehlermeldung aus:
[20-Apr-2025 22:19:44 Europe/Berlin] PHP Fatal error: Uncaught mysqli_sql_exception: Incorrect integer value: '' for column 'id' at row 1 in /home/webpages/lima-city/turmfalken-nikolai/wordpress_de-2017-01-13-72da53/Newsletter/Abo.php:37
Stack trace:
#0 /home/webpages/lima-city/turmfalken-nikolai/wordpress_de-2017-01-13-72da53/Newsletter/Abo.php(37): mysqli_query(Object(mysqli), 'INSERT INTO New...')
#1 {main}
thrown in /home/webpages/lima-city/turmfalken-nikolai/wordpress_de-2017-01-13-72da53/Newsletter/Abo.php on line 37
Kann mir irgendwer erklären was das bedeutet?
Der Code für die abo.php sieht folgendermaßen aus:
<?php include "Var.php";//Holt sich die Einstellungen $Adresse=$_POST['Adresse'];//Liest die E-Mail Adresse aus, welche mit dem Formular gesendet wurde //Schutz vor SQL-Injection $Adresse=htmlspecialchars($Adresse); $Adresse=mysqli_real_escape_string($db,$Adresse); if (isset($Adresse)&&($Adresse!="")&&strlen($Adresse)>4){ //Es wurde eine E-Mail Adresse angegeben //Speicher die Adresse in der Datenbank $sql="SELECT count(id) FROM Newsletter WHERE Adresse='$Adresse'"; $result=mysqli_query($db,$sql); $result=mysqli_fetch_row($result)[0]; if ($result=="0"){ //Die E-Mail-Adresse steht noch nicht in der Datenbank $Passwort=sha1(sha1($Adresse)+rand(1000,10000));//Generiert das Passwort zum Abbestellen $sql="INSERT INTO Newsletter (id, Adresse, Passwort) VALUES ('','$Adresse','$Passwort')"; $result=mysqli_query($db,$sql);//Speichert die Adresse in der Datenbank echo($MeldungAdresseGespeichert); }else{ //Die E-Mail-Adresse steht bereits in der Datenbank //echo("Adresse schon $result mal vergeben"); echo($MeldungBereitsVorhanden); } }else{ //Es wurde keine E-MAil Adresse angegeben //Zeige das Formular an ?> <!DOCTYPE HTML> <html> <!-- # # #### --> <!-- # # # --> <!-- #### #### --> <!-- # # --> <!-- # #### --> <body bgcolor="#F3F4F5"> <?php echo($TextVorEingabe);?> <br> <form method="post" action="Abo.php"> <input type="email" name="Adresse" value="EMail-Adresse" onKeyUp="if (this.value=='42')alert('Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest!');" onFocus="select()"><br> <input type="submit" value="<?php echo($TextAbonnieren);?>"> </form> </body> </html> <?php } ?>
Wo steckt der Fehler?
Herzliche Grüße aus Spandau mit Vorort Berlin
Beitrag zuletzt geändert: 21.4.2025 8:56:35 von turmfalken-nikolai -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Was ich sehe ist, dass das Script versucht einen Wert in die Datenbank zu schreiben der dem Datentyp Integer entsprechen sollte. Und zwar in der Tabelle "Newsletter" in der Spalte "id".
Verursacht wird dies vermutlich von dieser Zeile in der Abo.php:
$sql="INSERT INTO Newsletter (id, Adresse, Passwort) VALUES ('','$Adresse','$Passwort')";
Wenn das Script vorher funktioniert hat, würde ich in der Datenbank mal schauen, was da Sache ist in der Tabelle. Ich vermute die Spalte ID steht auf Autoincrement und vielleicht ist die Tabelle inzwischen vollgelaufen? -
ich verstehe nur Bahnhof
Wo kann ich das einstellen?
https://turmfalken-nikolai-spandau.de/wp-content/uploads/2025/04/Screenshot-2025-04-21-090903.png
Beitrag zuletzt geändert: 21.4.2025 9:19:39 von turmfalken-nikolai -
Steht bereits auf autoimkrement, so wie es sein sollte. Wie viele Einträge hat die Tabelle denn derzeit, also wieviele Zeilen?
-
27 Einträge, aber mein Patensohn hat mit grad noch n Tip gegeben in der Abo.php Er meinte ich soll mal bei der Passwortgenerierung das "$Passwort = sha1(sha1($Adresse) . rand(1000,10000));" ersetzen durch "$Passwort = bin2hex(random_bytes(16));" . Damit scheint es in der Tat auch zu funktionieren. Mehrere Versuche der Anmeldung funktionierten jetzt
-
Perfekt
-
Dankeschön und frohe Restostern
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage