mysql insert ??

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/mysql-insert_242128/page_1 - zur Vollversion wechseln!


Bunny schrieb am 17.02.2015 um 15:33

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>

Hier das PHP skript:
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);
	}

}
?>
Jemand eine idee??

danke.


Longbow schrieb am 17.02.2015 um 15:37

braucht das ding evtl. vorher "use mydatabase" ?


Bunny schrieb am 17.02.2015 um 15:38

wie meinst du das ?


AdRy schrieb am 17.02.2015 um 15:39

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


Obermotz schrieb am 17.02.2015 um 15:40

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


Bunny schrieb am 17.02.2015 um 15:43

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);
	}

}
?>


es hat sich keine bemerkbare Veränderung gezeigt...


Longbow schrieb am 17.02.2015 um 15:52

Zitat von Bunny
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 ' :D


Nico schrieb am 17.02.2015 um 16:01

stand 15:55

wo is das post-array oder sein inhalt im sql statement?


Bunny schrieb am 17.02.2015 um 16:06

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'])";


-=Willi=- schrieb am 17.02.2015 um 16:13

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 :p. Sieh dir lieber nochmal an wie du dein Statement preparen kannst.


Bunny schrieb am 17.02.2015 um 16:15

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 schrieb am 17.02.2015 um 16:29

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'])."')";

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 schrieb am 17.02.2015 um 16:32

danke für den Hinweis, ich habs soeben geändert.. keine Veränderung sichtbar


mat schrieb am 17.02.2015 um 16:34

Check das php bzw. apache error log.


berndy2001 schrieb am 17.02.2015 um 16:36

Zitat von Bunny
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




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025