Hallo, ich versuche gerade einen Skript zu schreiben, mit dem ich aus einem Formular Werte in meine DB speichern kann. Allerdings bekomme ich immer folgende Fehlermeldung:
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /Users/jb110/public_html/albumneu.php on line 72
Das ist mein Code:
Ich komme irgendwie nicht mehr weiter ( Kann mir irgendjemand helfen?
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /Users/jb110/public_html/albumneu.php on line 72
Das ist mein Code:
PHP:
<?php
$dbhost = "localhost";
$dbname = "u-jb110";
$dbuser = "jb110";
$dbpass = "";
$dsn = "mysql:dbhost=$dbhost;dbname=$dbname";
$db = new PDO($dsn,$dbuser,$dbpass);
$album_sql = "SELECT titel, jahr, cover FROM album";
$album_select = $db->prepare($album_sql);
$album_select->execute();
$album = $album_select->fetchAll();
// Pizzadaten zur Speicherung wurden übermittelt
// Wenn das Formular abgeschickt wurde, wird der Wert
// des Submit-Buttons übermittelt s.u.
if( $_REQUEST['submit'] ) { // Formular wurde abgeschickt
// Eingabe-Validierung, sind alle benötigen Daten vorhanden
// Das Array Fehler verwenden wir um alle auftreten Fehler zu sammeln
$fehler = array();
// Falls ein Name vorhanden ist in das Array $pizza kopieren
// andernfalls einen Fehler registrieren
// Die Funktion trim() dient dazu überflüssige Leerzeichen am Anfang
// und am Ende einer Zeichenkette zu entfernen
if( trim($_REQUEST['titel']) ){
$album['titel'] = trim($_REQUEST['titel']);
} else {
// Der Fehler wird nun unter dem passenden Schlüssel gespeichert
// so kann die Formulardarstellung entsprechend angepasst werden
$fehler['titel'] = "Es muss ein Titel für das Album angegeben werden";
}
// Das gleiche fuer die Beschreibung, wenn diese fehlt wird
// allerdings kein Fehler registriert sondern nur ein leerer
// Wert in $pizza gespeichert
// Die Beschreibung ist optional
if( trim($_REQUEST['jahr']) ){
$album['jahr'] = trim($_REQUEST['jahr']);
} else {
$fehler['jahr'] = "Es muss das Erscheinungsjahr des Albums angegeben werden";
}
// Das Bild ist ebenfalls optional, siehe Beschreibung
if( trim($_REQUEST['bild']) ){
$album['bild'] = trim($_REQUEST['bild']);
} else {
$album['bild'] = '';
}
// Fehlerbehandlung
// Falls ein Fehler aufgetreten ist, also das Array $fehler nicht leer ist,
// diese Fehler anzeigen und nicht mit der Aktualisierung der Datenbank fortfahren
if($fehler){
echo '<ul class="fehler">';
foreach($fehler as $meldung){
echo "<li>$meldung</li>\n";
}
echo "</ul>";
} else { // Falls kein Fehler aufgetreten ist $fehler ist leer
// dann Daten speichern
// Daten speichern
$insert_sql = "INSERT INTO album (titel,jahr,
cover)
VALUES(:titel,:jahr,
:cover)";
$album_insert = $db->prepare($insert_sql);
if($album_insert->execute($album)){
echo '<p class="erfolg">Das Album wurde gespeichert</p>';
// Wenn die Pizza gespeichert ist, die Formulardaten löschen
// damit nicht versehentlich die gleiche Pizza mehrmals in
// die Datenbank gespeichert wird, oder das Formular mit
// dem Bearbeitungsformular verwechselt wird.
// unset() entfernt eine Variable
unset($album);
} else {
echo '<p class="fehler">FEHLER: Das Album konnte <b>nicht
gespeichert</b> werden!</p>';
}
}
}
// jetzt werden zunächst die Grunddaten der Pizza angezeigt:
// Name, Beschreibung und Bild
?>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<form class="form2" method="post"
action="<?php echo $_SERVER['PHP_SELF']; ?>">
<?php if($fehler['titel']){ $missing = ' class="missing" '; } else { $missing = ''; } ?>
<p<?php echo $missing; ?>><label for="name">Name des Albums:</label><br />
<input type="text" name="titel" id="titel"
value="<?php echo $album['titel']; ?>" /></p>
<p><label for="jahr">Erscheinungsjahr:</label><br />
<textarea cols="25" rows="3" name="jahr" id="jahr"><?php echo $pizza['jahr']; ?></textarea></p>
<p><img src="bilder/<?php echo $album['cover']; ?>" width="150" height="150" alt="Bild: <?php echo $album['titel']; ?>" />
<p><label for="bild">Cover des Albums:</label><br />
<input type="text" name="bild" id="bild" size="15"
value="<?php echo $album['cover']; ?>" /></p>
<?php // Der Submit-Button wird explizit mit einem Namen versehen (name="submit")
// damit wir später einfach überprüfen können ob das Formular abgeschickt wurde ?>
<p><input type="submit" value="speichern" name="submit" /></p>
<br style="clear:both">
</div>
</form>
Ich komme irgendwie nicht mehr weiter ( Kann mir irgendjemand helfen?