Bunny
Addicted
|
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: <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>
Hier das PHP skript: <?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
($_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);
}
}
?>
Jemand eine idee?? danke.
Bearbeitet von Bunny am 17.02.2015, 15:38
|
Longbow
Here to stay
|
braucht das ding evtl. vorher "use mydatabase" ?
|
Bunny
Addicted
|
wie meinst du das ?
|
AdRy
Auferstanden
|
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: $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())";
|
Obermotz
Fünfzylindernazi
|
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
Bearbeitet von Obermotz am 17.02.2015, 15:44
|
Bunny
Addicted
|
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. <?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);
}
}
?>
es hat sich keine bemerkbare Veränderung gezeigt...
Bearbeitet von Bunny am 17.02.2015, 15:55
|
Longbow
Here to stay
|
wie meinst du das ? 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 '
|
Nico
former person of interest
|
stand 15:55
wo is das post-array oder sein inhalt im sql statement?
|
Bunny
Addicted
|
man kann die Array statements durch ? Fragezeichen angeblich ersetzn... ich kanns aber auch wieder ändern... ich ändere es wieder.. EDIT:: wurde wieder geändert: $sql = "INSERT INTO
calculation(RechnungsNr, Betrag, Nachname)
VALUES
($_POST['RechnungsNr'],$_POST['Betrag'],$_POST['Nachname'])";
Bearbeitet von Bunny am 17.02.2015, 16:08
|
-=Willi=-
The Emperor protects
|
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.
|
Bunny
Addicted
|
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...
|
mat
AdministratorLegends never die
|
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: $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'])."')";
Abgesehen davon würde ich gleich einen Wrapper für die DB-Engine schreiben und Substitution für die Parameter verwenden, so wie es mit sprintf() zB möglich ist. Diese Parameter kannst du dann auch automatisiert per mysqli_real_escape_string() korrekt aufbereiten.
|
Bunny
Addicted
|
danke für den Hinweis, ich habs soeben geändert.. keine Veränderung sichtbar
|
mat
AdministratorLegends never die
|
Check das php bzw. apache error log.
|
berndy2001
|
bekomme ich keine Fehlermeldung das irgendetwas schief gegangen ist... Blick in phpmyadmin zeigt das kein Eintrag vorhanden ist.. php fehlermeldungen abgedreht? gibt ja log_errors und display_errors
Bearbeitet von berndy2001 am 17.02.2015, 16:39
|