Я занят кодированием веб-сайта для местного бизнеса, который делает Milkshakes. Естественно, они хотели показать свои вкусы на сайте и иметь страницу управления, где они могли бы их редактировать. Я получил ароматы на главной странице, но у меня проблема с страницей управления.PHP Несколько форм на одной странице с несколькими кнопками
У меня есть база данных, которая содержит список ароматов. 3 основные вещи, которые я пытаюсь разрешить им делать, - это редактировать, удалять и добавлять новые записи. В настоящее время я вызываю каждую строку (или каждый вкус и ее идентификатор) в виде отдельных форм с помощью двух кнопок отправки: один для сохранения изменений и один для удаления. код ниже:
для страницы управления:
<?php
$con = new PDO('mysql:host=host;dbname=dbname', "user", "password");
$con -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = "SELECT * FROM FlavourShakes";
$data = $con->query($query);
$rows = $data->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
$id = $row['id'];
$flavour = $row['Flavour'];
print "<form action=\"saveFlavorShakes.php\" method=\"post\"> \n
<fieldset> \n
<input name=\"id\" value=\"$id\" readonly/> \n
<input name=\"Flavour\" value=\"$flavour\" /> \n
<input type=\"submit\" name=\"edit\" value=\"Save\"> \n
<input type=\"submit\" name=\"edit\" value=\"Remove\"> \n
</fieldset> \n
</form> \n";
}
?>
<form action="saveFlavorShakes.php" method="post">
<fieldset>
<input name="Flavour" />
<input type="submit" name="edit" value="Add">
</fieldset>
</form>
и на моей странице обработки:
<?php
$flavour = $_POST['Flavour'];
$id = $_POST['id'];
$btnType = $_POST['edit'];
$con = new PDO('mysql:host=hostname;dbname=dbname', "user", "password");
$con -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = "";
try
{
switch($_POST['edit']){
case'Save':
$query = "UPDATE FlavorShakes
SET Flavour= :name,
WHERE id = :id;";
$notice = "saveOK";
$_POST['notice'] = $notice;
break;
case'Add':
$query = "INSERT INTO FlavourShakes(Flavour) VALUES (:name);";
$notice = "addOK";
$_POST['notice'] = $notice;
break;
}
//I know I haven't added a case for the remove button yet.
$statement = $con->prepare($query);
$statement->bindValue(":id", $id);
$statement->bindValue(":name", $flavour);
$count = $statement->execute();
header('Location: EditFlavorShakes.php');
}
catch(PDOException $e) {
if ($btnType = "save"){
$notice = "saveBad";
$error = $e->getMessage();
$_POST['notice'] = $notice;
$_POST['error'] = $error;
} elseif($btnType = "delete"){
$notice = "delBad";
$error = $e->getMessage();
$_POST['notice'] = $notice;
$_POST['error'] = $error;
}elseif($btnType = "add"){
$notice = "addBad";
$error = $e->getMessage();
$_POST['notice'] = $notice;
$_POST['error'] = $error;
}else{
$notice = "otherBad";
$error = $e->getMessage();
$_POST['notice'] = $notice;
$_POST['error'] = $error;
}
echo $notice;
echo $e->getMessage();
//header('Location: EditFlavorShakes.php');
}
?>
В настоящее время у меня нет каких-либо записей в базе данных. Однако, когда я пытаюсь добавить шоколад и нажмите кнопку Добавить, я получаю эту ошибку:
saveBadSQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
То, что я не понимаю, почему это $_POST['edit']
набор, чтобы сохранить вместо добавить? Мне кажется, что я пропускаю какую-то туповатую ошибку в моем коде. Если кто-то может мне помочь, я был бы признателен.
Заранее спасибо.
как я сказал. Глубоко простая ошибка, я полностью оглянулся. Благодаря! – Termonator145