INSERT TO funktioniert nicht
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
absetzen
auto
bekommen
code
datenbank
datensatz
datum
email
ersten minute
fehler
mensch
rand
richtige richtung
setzen
speziellen sinn
statement
string
tabelle
url
-
Hallo :)
Ich habe folgendes Problem:
Ich habe Daten aus einem HTML-Form ($email und $Name und eine zufällige ID) und möchte diese in MySQL eintragen:
Die Variablen passen, alles andere auch.<?php ini_set('display_errors', 1); error_reporting(E_ALL); // Um die Fehler zu sehen $name = $_POST["name"]; $email = $_POST["email"]; $id = Rand(); $db = mysqli_connect("***", "***", "***", "***"); if(!$db) { exit("Verbindungsfehler: ".mysqli_connect_error()); } else { $result = "INSERT INTO `tabelle`(`id`, `name`, `mail`) VALUES ('.$id','.$name','.$email');"; } ?>
Es kommt auch kein Fehler, aber die Daten werden nicht eingetragen. Was ist der Fehler?
MfG Thomas -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Die Variablen passen, alles andere auch.
Naja, du mischt in der Query erst mal munter die Quotes, da solltest du dir unbedingt die Grundlagen zur Stringverkettung nochmal anschauen.
Wenn das dann durch ist: Man übernimmt nicht ungeprüft irgendwelche Daten vom Nutzer. Stichwort: SQL-Injection. Dafür gibt's aber in mysqli auch eine schöne Lösung: Prepared Statements.
Und schlussendlich musst du die Abfrage natürlich auch absetzen. Der SQL-Server kann erst was damit anfangen, wenn er die auch bekommen hat. ;)
Hat die zufällige ID irgendeinen speziellen Sinn? Oder soll nur jeder Datensatz eine eindeutige ID bekommen? -> Auto Increment -
Hat die zufällige ID irgendeinen speziellen Sinn? Oder soll nur jeder Datensatz eine eindeutige ID bekommen? -> Auto Increment
Richtig, kann in PHPMyAdmin eingestellt werden, sonst hast du das Dilemma wenn sich die ID dopppelt.
-
<?php ini_set('display_errors', 1); error_reporting(E_ALL); // Um die Fehler zu sehen $name = $_POST["name"]; $email = $_POST["email"]; $id = Rand(); $db = mysqli_connect("***", "***", "***", "***"); if(!$db) { exit("Verbindungsfehler: ".mysqli_connect_error()); } else { $result = "INSERT INTO `tabelle`(`id`, `name`, `mail`) VALUES ('.$id','.$name','.$email');"; } ?>
Öhö da gehört kein ; in die " " rein. Absenden geht mit$snd = $mysqli->query($result)
$result = "INSERT INTO `tabelle`(`id`, `name`, `mail`) VALUES ('.$id','.$name','.$email');";
Ich hoffe aber das du an die Sicherheit deiner Datenbanken denkst ;) Da gibt es sicher einige Nutzer die nicht ihre Finger still halten können.
Mal kucken ob ich's grad noch zusammen bekomm:
$mysqli = new mysqli("host", "user", "pass", "db"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } if (!($stmt = $mysqli->prepare("INSERT INTO `tabelle`(`name`, `mail`) VALUES (?,?)") { echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; } if (!$stmt->bind_param("ss",$name ,$email)) { // string string -> name email | id weg gelassen die kannst per mysql setzen wie schon beschrieben. Die Variablen in der Reihenfolge der ? setzen. echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error; } if (!$stmt->execute()) { echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; }
Beitrag zuletzt geändert: 30.1.2018 20:48:50 von horstexplorer -
Das "Und schlussendlich musst du die Abfrage natürlich auch absetzen." vom muellerlukas hätte gereicht.
Würde die Leute auch erstmal verrückt machen. -.-' -
Naja das ist Basic. Zudem auch nicht schön das ohne prepared Statements zu lösen. Vor allem weil jeder über $_Post nun seine eigenen Befehle in der Datenbank ausführen kann. Zudem er auch noch deutlich mehr kaputt machen kann.
Deswegen macht man es lieber gleich richtig.
Beitrag zuletzt geändert: 1.2.2018 19:07:46 von horstexplorer -
Ja genau und du hast natürlich von der ersten Minute alles gewusst. Lasse doch einfach die Menschen ihre Erfahrungen machen. Manchmal hilft man eher, wenn man eben nicht alles vorkaut sondern nur nen Stubs in die richtige Richtung gibt.
-
lykaner-forum schrieb:
Ja genau und du hast natürlich von der ersten Minute alles gewusst. Lasse doch einfach die Menschen ihre Erfahrungen machen. Manchmal hilft man eher, wenn man eben nicht alles vorkaut sondern nur nen Stubs in die richtige Richtung gibt.
Ich frage mich wie du da drauf kommst....
Das sind alles nur Tipps weil es nur so funktioniert. Ohne das Absenden einer Abfrage, wird es nicht funktionieren. Ohne SQL-Injection Schutz wird das zwar funktionieren, dann kann man aber eigentlich auch gleich die Datenbank und FTP Logins öffentlich auf der Website angeben.
Beitrag zuletzt geändert: 2.2.2018 20:34:39 von horstexplorer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage