Problem mit Daten in Datenbank schreiben (mysqli)

psifactory

Erfahrenes Mitglied
Hi,

hoff es ist ok wenn ich schon wieder einen Thread öffnen muss. :) Aber ich steh erneut vor einem Problem wo ich jetzt schon ne Stunde dran häng. Folgendes will irgendwie nicht richtig funktionieren:

PHP:
<?php
if (isset( $_POST['submitbutton'] ))
{
    // Maskierende Slashes aus POST Array entfernen
    if (get_magic_quotes_gpc()) { $_POST = array_map( 'stripslashes', $_POST ); }
    $datum    			= $_POST['datum'];
    $va_name 			= $_POST['va_name'];
	$veranstalter 		= $_POST['veranstalter'];
	$anzahl_gaeste 		= $_POST['anzahl_gaeste'];
	$anzahl_gaesteliste	= $_POST['anzahl_gaesteliste'];
	$eintrittspreis 	= $_POST['eintrittspreis'];
	$mitarbeiter1 		= $_POST['mitarbeiter1'];
	$umsatz1 			= $_POST['umsatz1'];
	$bereich1 			= $_POST['bereich1'];
	$mitarbeiter1 		= $_POST['mitarbeiter2'];
	$umsatz1 			= $_POST['umsatz2'];
	$bereich1 			= $_POST['bereich2'];
	$mitarbeiter1 		= $_POST['mitarbeiter3'];
	$umsatz1 			= $_POST['umsatz3'];
	$bereich1 			= $_POST['bereich3'];
	$mitarbeiter1 		= $_POST['mitarbeiter4'];
	$umsatz1 			= $_POST['umsatz4'];
	$bereich1 			= $_POST['bereich4'];	
	$mitarbeiter1 		= $_POST['mitarbeiter5'];
	$umsatz1 			= $_POST['umsatz5'];
	$bereich1 			= $_POST['bereich5'];
	$mitarbeiter1 		= $_POST['mitarbeiter6'];
	$umsatz1 			= $_POST['umsatz6'];
	$bereich1 			= $_POST['bereich6'];	
	$mitarbeiter1 		= $_POST['mitarbeiter7'];
	$umsatz1 			= $_POST['umsatz7'];
	$bereich1 			= $_POST['bereich7'];
		
	// Neues Datenbank-Objekt erzeugen
    $db = @new mysqli( 'localhost', 'root', '', 'vaulterp' );

    // Pruefen ob die Datenbankverbindung hergestellt werden konnte
    if (mysqli_connect_errno() == 0)
    {
        $db_veranstaltungen = 'INSERT INTO `veranstaltungen` ( `name`, `datum` , `va_id` , `anzahl_gaeste` , `anzahl_gaesteliste` , `eintrittspreis`) VALUES ( ?, ?, ?, ?, ?, ?)';
        $eintrag_veranstaltungen = $db->prepare( $db_veranstaltungen );
        $eintrag_veranstaltungen->bind_param( 'ssiiid', $name, $datum, $va_id, $anzahl_gaeste, $anzahl_gaesteliste, $eintrittspreis );
        $eintrag_veranstaltungen->execute();
        // Pruefen ob der Eintrag efolgreich war
        if ($eintrag_veranstaltungen->affected_rows == 1)
        {
            echo 'Der neue Eintrage wurde hinzugef&uuml;gt.';
        }
        else
        {
            echo 'Der Eintrag konnte nicht hinzugef&uuml;gt werden';
        }
    }
    else
    {
        // Es konnte keine Datenbankverbindung aufgebaut werden
        echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
    }
    // Datenbankverbindung schliessen
    $db->close();
}
 
?>

Die Daten werden durch das POST richtig übertragen. Das hab ich soweit schon gecheckt. Allerdings krieg ich die Fehlermeldung "Der Eintrag konnte nicht hinzugefügt werden" und es werden keine Daten in die DB geschrieben.

Hab auch mal zur besseren Übersicht die Datenbankstruktur als Bild angefügt.
 

Anhänge

  • Bildschirmfoto 2012-05-17 um 06.22.50.png
    Bildschirmfoto 2012-05-17 um 06.22.50.png
    48,5 KB · Aufrufe: 32
Hi psifactory,

wenn das wirklich eine 1zu1 Kopie deines Quelltextes ist, dann hast du in der SQL-Abfrage die falschen Anführungszeichen drin.

Dein Text:
Code:
$db_veranstaltungen = 'INSERT INTO `veranstaltungen` ( `name`, `datum` , `va_id` , `anzahl_gaeste` , `anzahl_gaesteliste` , `eintrittspreis`) VALUES ( ?, ?, ?, ?, ?, ?)';

also nicht: `veranstaltungen` sondern 'veranstaltungen'

Gruß Oliver
 
Ok. Danke schonmal. Allerdings hab ich jetzt das nächste prob :) Krieg die Fehlermeldung: "Fatal error: Call to a member function bind_param() on a non-object in C:\x... on line 42"

Hier nochmal der aktualisierte PHP Code:
PHP:
<?php
if (isset( $_POST['submitbutton'] ))
{
    // Maskierende Slashes aus POST Array entfernen
    if (get_magic_quotes_gpc()) { $_POST = array_map( 'stripslashes', $_POST ); }
    $datum    			= $_POST['datum'];
    $va_name 			= $_POST['va_name'];
	$va_id		 		= $_POST['veranstalter'];
	$anzahl_gaeste 		= $_POST['anzahl_gaeste'];
	$anzahl_gaesteliste	= $_POST['anzahl_gaesteliste'];
	$eintrittspreis 	= $_POST['eintrittspreis'];
	$mitarbeiter1 		= $_POST['mitarbeiter1'];
	$umsatz1 			= $_POST['umsatz1'];
	$bereich1 			= $_POST['bereich1'];
	$mitarbeiter1 		= $_POST['mitarbeiter2'];
	$umsatz1 			= $_POST['umsatz2'];
	$bereich1 			= $_POST['bereich2'];
	$mitarbeiter1 		= $_POST['mitarbeiter3'];
	$umsatz1 			= $_POST['umsatz3'];
	$bereich1 			= $_POST['bereich3'];
	$mitarbeiter1 		= $_POST['mitarbeiter4'];
	$umsatz1 			= $_POST['umsatz4'];
	$bereich1 			= $_POST['bereich4'];	
	$mitarbeiter1 		= $_POST['mitarbeiter5'];
	$umsatz1 			= $_POST['umsatz5'];
	$bereich1 			= $_POST['bereich5'];
	$mitarbeiter1 		= $_POST['mitarbeiter6'];
	$umsatz1 			= $_POST['umsatz6'];
	$bereich1 			= $_POST['bereich6'];	
	$mitarbeiter1 		= $_POST['mitarbeiter7'];
	$umsatz1 			= $_POST['umsatz7'];
	$bereich1 			= $_POST['bereich7'];
		
	// Neues Datenbank-Objekt erzeugen
    $db = @new mysqli( 'localhost', 'root', '', 'vaulterp' );

    // Pruefen ob die Datenbankverbindung hergestellt werden konnte
    if (mysqli_connect_errno() == 0)
    {
        $db_veranstaltungen = "INSERT INTO 'veranstaltungen' ( 'name', 'datum' , 'va_id' , 'anzahl_gaeste' , 'anzahl_gaesteliste' , 'eintrittspreis') VALUES ( ?, ?, ?, ?, ?, ?)";
        $eintrag_veranstaltungen = $db->prepare( $db_veranstaltungen );
        $eintrag_veranstaltungen->bind_param('ssiiid', $va_name, $datum, $va_id, $anzahl_gaeste, $anzahl_gaesteliste, $eintrittspreis );
        $eintrag_veranstaltungen->execute();
        // Pruefen ob der Eintrag efolgreich war
        if ($eintrag_veranstaltungen->affected_rows == 1)
        {
            echo 'Der neue Eintrage wurde hinzugef&uuml;gt.';
        }
        else
        {
            echo 'Der Eintrag konnte nicht hinzugef&uuml;gt werden';
        }
    }
    else
    {
        // Es konnte keine Datenbankverbindung aufgebaut werden
        echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
    }
    // Datenbankverbindung schliessen
    $db->close();
}
 
?>

Edit: Zeile 42 ist $eintrag_veranstaltungen->bind_param('ssiiid', $va_name, $datum, $va_id, $anzahl_gaeste, $anzahl_gaesteliste, $eintrittspreis );
 
Hallo,

das bedeutet, dass der prepare() schief gelaufen ist. Versuch mal das:

PHP:
$eintrag_veranstaltungen = $db->prepare( $db_veranstaltungen );
if( $db->errno )
{
  die($db->error);
}
$eintrag_veranstaltungen->bind_param('ssiiid', $va_name, $datum, $va_id, $anzahl_gaeste, $anzahl_gaesteliste, $eintrittspreis );
 
Ok. Jetzt krieg ich folgende Fehlermeldung ausgegeben.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''veranstaltungen' ( 'name', 'datum' , 'va_id' , 'anzahl_gaeste' , 'anzahl_gaeste' at line 1
 
Du verwendest Single-Quotes (') statt Back-Ticks um den Tabellen- und die Spaltennamen zu maskieren. Versuch mal das:

PHP:
$db_veranstaltungen = "INSERT INTO `veranstaltungen` ( `name`, `datum` , `va_id` , `anzahl_gaeste` , `anzahl_gaesteliste` , `eintrittspreis`) VALUES ( ?, ?, ?, ?, ?, ?)";

Ich dachte, du kommst durch die Fehlermeldung selbst drauf ;-)

Natürlich könntest du die Maskierung auch komplett weglassen:

PHP:
$db_veranstaltungen = "INSERT INTO veranstaltungen (name, datum, va_id, anzahl_gaeste, anzahl_gaesteliste, eintrittspreis) VALUES ( ?, ?, ?, ?, ?, ?)";

Die Back-Ticks-Maskierung verwendet man nur, damit es keine Missverständnisse gibt. Häufig verwendet der Datenbank-Designer Spalten- oder Tabellennamen, die reservierte Wörter in der SQL-Sprache sind. SQL ist allerdings Englisch, du verwendest aber deutsche Begriffe und solltest damit auf der sicheren Seite sein, was reservierte Wörter angeht. Reservierte Wörter sind z.B. LIMIT oder GROUP. Ich hoffe, jetzt ist klar, warum man maskiert, und wann man darauf verzichten kann. :-)

EDIT: Ich hab gerade gesehen, das du es in deinem ersten Posting sogar richtig hattest. OliverP hat dir einen falschen Tipp gegeben. Dein eigentliches Problem ist noch nicht gelöst. Du solltest $db->error verwenden, um herauszufinden, warum dein

PHP:
        $eintrag_veranstaltungen->execute();
        // Pruefen ob der Eintrag efolgreich war
        if ($eintrag_veranstaltungen->affected_rows == 1)

nicht funktioniert.
 
Zuletzt bearbeitet:
Ok. Vielen Dank schonmal für die Erklärung! Wenn ich die Back-ticks weglasse funktioniert jetzt auch alles soweit! :)
 
Zurück