URL: https://www.overclockers.at/coding-stuff/mysql-insert_242128/page_1 - zur Vollversion wechseln!
Hallo,
ich habe wahrscheinlich einen klassischen Fehler den ich nicht finde...
Mein problem..
Ich habe ein Formular, dass die Eingaben per $POST Methode an ein php Skript übergibt, dieses skript baut dann eine Verbindung zur Mysql Datenbank auf.
Soweit sogut, wenn ich im Formular den Button klicke sind die Werte auch im $Post Array .. (ich habe das getestet.. ) .. die Mysql Verbindung wird auch hergestellt.. das Problem liegt anscheinend bei der erstellung des Query zum übermitteln an Mysql...
Das witzige ist aber, sobald ich beim Formular den Button klicke bekomme ich keine Fehlermeldung das irgendetwas schief gegangen ist...
Blick in phpmyadmin zeigt das kein Eintrag vorhanden ist..
Hier das Formular:
Code: HTML<html> <head><title>Formular</title></head> <body> <form action="formscript.php" method="post"> <fieldset> <legend>Rechnung anlegen</legend> <label>RechnungsNr.: <input type="text" name="RechnungsNr" /></label><br /> <label>Betrag: <input type="text" name="Betrag" /></label><br /> <label>Nachname: <input type="text" name="Nachname" /></label><br /> </fieldset> <fieldset> <legend>Optional</legend> <label>Vorname: <input type="text" name="Vorname" /></label><br /> <label>Adresse: <input type="text" name="Adresse" /></label><br /> <label>Notiz: <input type="text" name="Notiz" /></label><br /> <label>Datum: <input type="text" name="Datum" /></label><br /> <input type="submit" value="Erstellen" /> </fieldset> </form> </body> </html>
Jemand eine idee??Code: PHP<?php error_reporting(E_ALL); ini_set('display_errors',1); $db = new mysqli('localhost', 'root', password', 'database'); if (mysqli_connect_errno()) { die('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')'); } if('POST' == $_SERVER['REQUEST_METHOD']){ if (!isset($_POST['RechnungsNr'], $_POST['Betrag'], $_POST['Nachname'])) { die ('Benutzen sie nur Formulare von der Homepage.'); } if (('' == $rechnungsnr = trim($_POST['RechnungsNr'])) or ('' == $betrag = trim($_POST['Betrag'])) or ('' == $nachname = trim($_POST['Nachname']))) { die ('Bitte Pflichtfelder ausfuellen.'); } $vorname == $_POST['Vorname']; $adresse == $_POST['Adresse']; $notiz == $_POST['Notiz']; $datum == $_POST['Datum']; $sql = 'INSERT INTO calculation(RechnungsNr, Betrag, Vorname, Nachname, Adresse, Notiz, Datum) VALUES // (?,?,?,?,?,?,NOW())'; ($_POST['RechnungsNr'],$_POST['Betrag'],$_POST['Vorname'],$_POST['Nachname'],$_POST['Adresse'],$_POST['Notiz'],NOW())'; $stmt = $db->prepare($sql); if(!$stmt){ die ('Es konnte kein SQL-Query vorbereitet werden: '.db->error); } $stmt->bind_param('idssss', $rechnungsnr, $betrag, $vorname, $nachname, $adresse, $notiz, $datum); if(!$stmt->execute()){ die ('Query konnte nicht ausgefuehrt werden: '.$stmt->error); } } ?>
braucht das ding evtl. vorher "use mydatabase" ?
wie meinst du das ?
Weil du einfache Anführungssrtriche inerhalb von einfachen hast bei $sql würd ich mal sagen. Du musst die Äußren auf doppelte: " ändern. Also:
Code: PHP$sql = "INSERT INTO calculation(RechnungsNr, Betrag, Vorname, Nachname, Adresse, Notiz, Datum) VALUES ($_POST['RechnungsNr'],$_POST['Betrag'],$_POST['Vorname'],$_POST['Nachname'],$_POST['Adresse'],$_POST['Notiz'],NOW())";
Ich bin zwar schon ein weilchen weg von PHP, trotzdem ein paar Fragen:
Wozu hast du die Vergleiche
$vorname == $_POST['Vorname'];
$adresse == $_POST['Adresse'];
$notiz == $_POST['Notiz'];
$datum == $_POST['Datum'];
Du solltest dein statement escapen bzw. am besten doublequotes benuetzen und die Variablen einfach in den String schreiben ala
"Der aktuelle UNIX-Timestamp ist $zeit.";
Jetzt seh ich erst, dass du unten noch versuchst, parameter an das Statement zu binden - schau dir mal ein entsprechendes Tutorial zu prepared statements an - du hast da einen Misch-Masch beinander 
http://www.w3schools.com/pHp/php_my..._statements.asp
okay, danke für die tipps.. ich probier gleich mal herum..
EDIT:
Also, ich hab das skript jetzt noch etwas vereinfacht/verkürzt.
so siehts derzeit aus.
Code: PHP<?php error_reporting(E_ALL); ini_set('display_errors',1); $db = new mysqli('localhost', 'root', 'password', 'database'); if (mysqli_connect_errno()) { die('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')'); } if('POST' == $_SERVER['REQUEST_METHOD']){ if (!isset($_POST['RechnungsNr'], $_POST['Betrag'], $_POST['Nachname'])) { die ('Benutzen sie nur Formulare von der Homepage.'); } if (('' == $rechnungsnr = trim($_POST['RechnungsNr'])) or ('' == $betrag = trim($_POST['Betrag'])) or ('' == $nachname = trim($_POST['Nachname']))) { die ('Bitte Pflichtfelder ausfuellen.'); } $sql = "INSERT INTO calculation(RechnungsNr, Betrag, Nachname) VALUES (?,?,?)"; $stmt = $db->prepare($sql); if(!$stmt){ die ('Es konnte kein SQL-Query vorbereitet werden: '.db->error); } $stmt->bind_param('idssss', $rechnungsnr, $betrag, $vorname, $nachname, $adresse, $notiz, $datum); if(!$stmt->execute()){ die ('Query konnte nicht ausgefuehrt werden: '.$stmt->error); } } ?>
mein erster gedanke war, dass du erst die DB angeben musst welche er für die inserts nehmen soll, aber ich hab überlesen, dass du im connect ja schon "database" hast - da fehlt dir aber am ende das 'Zitat von Bunnywie meinst du das ?

stand 15:55
wo is das post-array oder sein inhalt im sql statement?
man kann die Array statements durch ? Fragezeichen angeblich ersetzn... ich kanns aber auch wieder ändern...
ich ändere es wieder..
EDIT::
wurde wieder geändert:
Code: PHP$sql = "INSERT INTO calculation(RechnungsNr, Betrag, Nachname) VALUES ($_POST['RechnungsNr'],$_POST['Betrag'],$_POST['Nachname'])";
Kleiner PHP-Tipp am Rande...vergiss, dass '==' existiert und benutz einfach immer '==='. Da spart man sich viel ärger. Außerdem steht dein Skript so offen für SQL-Injections wie man sie schon in der Volksschule lernt
. Sieh dir lieber nochmal an wie du dein Statement preparen kannst.
jaja.. SQL-Injection... is mir schon klar... es handelt sich hier nicht um ein produktivsystem...
es geht jetzt mal darum herauszufinden warum das eintragen in die Datenbank grundsätzlich nicht funktioniert...
Bei einem String brauchst du in SQL einfache Anführungszeichen. Dein Code gibt dir scheinbar den SQL-Fehler nicht aus, was natürlich dann zum Rätselraten führt.
So wäre es richtig:
Code: PHP$sql = "INSERT INTO calculation(RechnungsNr, Betrag, Nachname) VALUES ('".$db->real_escape_string($_POST['RechnungsNr'])."','".$db->real_escape_string($_POST['Betrag'])."','".$db->real_escape_string($_POST['Nachname'])."')";
danke für den Hinweis, ich habs soeben geändert.. keine Veränderung sichtbar
Check das php bzw. apache error log.
php fehlermeldungen abgedreht? gibt ja log_errors und display_errorsZitat von Bunnybekomme ich keine Fehlermeldung das irgendetwas schief gegangen ist...
Blick in phpmyadmin zeigt das kein Eintrag vorhanden ist..
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025