MySQL Update eines Datensatz mit Variable
Hallo zusammen,
ich habe jetzt 2 h gesucht und versucht und komme gerade nicht weiter...
Ich habe eine Mail-Verifizierung gebaut. (Man trägt sich für Newsletter ein, token wird in Datenbank geschrieben, Mail mit Token wird an hinterlegte Mailadresse gesendet, Datensatz wird über Link mit Token identifiziert und soll im Feld verified auf 1 upgedatet werden.
Funktioniert auch alles, AUSSER, wenn ich die Variable $token verwende. Schreibe ich zum Testen die Token ID fix rein, gehts. Nur mit der Variable nicht.
Woran kann das liegen? Danke vorab und schönes WE.
Gruß
Jensen
PS:
hier der komplette code:
ich habe jetzt 2 h gesucht und versucht und komme gerade nicht weiter...
Ich habe eine Mail-Verifizierung gebaut. (Man trägt sich für Newsletter ein, token wird in Datenbank geschrieben, Mail mit Token wird an hinterlegte Mailadresse gesendet, Datensatz wird über Link mit Token identifiziert und soll im Feld verified auf 1 upgedatet werden.
Funktioniert auch alles, AUSSER, wenn ich die Variable $token verwende. Schreibe ich zum Testen die Token ID fix rein, gehts. Nur mit der Variable nicht.
$sql = "UPDATE Mail SET verified='1' WHERE token = '$token'";
Woran kann das liegen? Danke vorab und schönes WE.
Gruß
Jensen
PS:
hier der komplette code:
$token = htmlspecialchars($_POST['token']);
$servername = "localhost";
$username = "xxxxxxxxxxxxxxxxxxxx";
$password = "xxxxxxxxxxxxxxxxxxxx";
$dbname = "xxxxxxxxxxxxxxxxxxxxx";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE Mail SET verified='1' WHERE token = '$token'";
if ($conn->query($sql) === TRUE) {
echo "Deine Adresse wurde verifiziert. Enjoy.";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 346055
Url: https://administrator.de/contentid/346055
Ausgedruckt am: 24.11.2024 um 22:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
$token hat auch einen Inhalt, ja? Solltest du noch abprüfen, bevor du Query startest
Und dann bin ich mir nicht sicher ob PHP die Variable "inline" ersetzt. Versuch mal
Generell solltest du aber besser auf PDO/Prepared Statements umsteigen...
lg,
Slainte
$token hat auch einen Inhalt, ja? Solltest du noch abprüfen, bevor du Query startest
Und dann bin ich mir nicht sicher ob PHP die Variable "inline" ersetzt. Versuch mal
$sql = "UPDATE Mail SET verified='1' WHERE token = '" . $token ."'";
Generell solltest du aber besser auf PDO/Prepared Statements umsteigen...
lg,
Slainte
Nochmal: bekommt den $token einen/den richtigen Wert? Du hast da keinerlei Überprüfung im code - das ist sicherheitstechnisch eigentlich ein absolutes No-Go!
Bespiel: Wie sieht dein $sql aus, wenn $token den Wert
hat?
Stichwort zum googlen oder für die Forum-Suche: SQL-Injection
/EDIT: Und Posts komplett umschreiben ohne hinweis auf den Edit, ist auch nicht gerade nett
Bespiel: Wie sieht dein $sql aus, wenn $token den Wert
'; DELETE FROM MAIL;
Stichwort zum googlen oder für die Forum-Suche: SQL-Injection
/EDIT: Und Posts komplett umschreiben ohne hinweis auf den Edit, ist auch nicht gerade nett
Moin,
was passiert denn, wenn du in Zeile 16 deines obigen Codes mal ein
einsetzt?
Bemerkung: das "###<br><br>" dient nur zu identifizierung, dassdas Script über das $token hinauskam
dann weisst du zumindest, ob die Variable gefüllt ist.
Grundsätzlich klappt das nämlich, Variablen in ein SQL-Statement mit einfließen zu lassen...
Gruß
em-pie
€dit: Verdammt, zu lange getippt/ den Post offen gehabt...
Naja, hilft dir ja aber trotzdem grundsätzlich, wenn es um das debuggen geht...
was passiert denn, wenn du in Zeile 16 deines obigen Codes mal ein
echo "Token: " . $token . " ###<br><br>";
Bemerkung: das "###<br><br>" dient nur zu identifizierung, dassdas Script über das $token hinauskam
dann weisst du zumindest, ob die Variable gefüllt ist.
Grundsätzlich klappt das nämlich, Variablen in ein SQL-Statement mit einfließen zu lassen...
Gruß
em-pie
€dit: Verdammt, zu lange getippt/ den Post offen gehabt...
Naja, hilft dir ja aber trotzdem grundsätzlich, wenn es um das debuggen geht...