jens4ever
Goto Top

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.

$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();

Content-ID: 346055

Url: https://administrator.de/contentid/346055

Ausgedruckt am: 24.11.2024 um 22:11 Uhr

SlainteMhath
Lösung SlainteMhath 11.08.2017 um 12:46:00 Uhr
Goto Top
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
$sql = "UPDATE Mail SET verified='1' WHERE token = '" . $token ."'";   

Generell solltest du aber besser auf PDO/Prepared Statements umsteigen...

lg,
Slainte
Jens4ever
Jens4ever 11.08.2017 aktualisiert um 13:02:12 Uhr
Goto Top
Hi,

guter Tipp!
Fehler gefunden!
Es lag tatsächlich an der Variable.

$token = $_GET["token"];
und schon geht es!

Danke!

vg
Jensen
SlainteMhath
SlainteMhath 11.08.2017 aktualisiert um 13:04:10 Uhr
Goto Top
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
'; DELETE FROM MAIL;  
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
em-pie
em-pie 11.08.2017 aktualisiert um 13:09:22 Uhr
Goto Top
Moin,

was passiert denn, wenn du in Zeile 16 deines obigen Codes mal ein
echo "Token: " . $token . " ###<br><br>";  
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...