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-Key: 346055

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

Printed on: April 19, 2024 at 06:04 o'clock

Member: SlainteMhath
Solution SlainteMhath Aug 11, 2017 at 10:46:00 (UTC)
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
Member: Jens4ever
Jens4ever Aug 11, 2017 updated at 11:02:12 (UTC)
Goto Top
Hi,

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

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

Danke!

vg
Jensen
Member: SlainteMhath
SlainteMhath Aug 11, 2017 updated at 11:04:10 (UTC)
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
Member: em-pie
em-pie Aug 11, 2017 updated at 11:09:22 (UTC)
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...