mysql — 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');
}
?>

В настоящее время у меня нет записей в базе данных. Однако, когда я пытаюсь добавить Chocolate и нажимаю кнопку Add, я получаю эту ошибку:

saveBadSQLSTATE [HY093]: недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов

Чего я не понимаю, так это почему $_POST['edit'] установить сохранить вместо добавления? Я чувствую, что пропускаю какую-то глупо простую ошибку в своем коде. Если кто-нибудь может мне помочь, я был бы признателен.

Заранее спасибо.

-2

Решение

Вы должны двигаться вправо $statement звонки в каждом случае —

switch($_POST['edit']){
case'Save':
$query = "UPDATE FlavorShakes
SET Flavour= :name,
WHERE id = :id;";
$notice = "saveOK";
$_POST['notice'] = $notice;
$statement = $con->prepare($query);
// this query needs multiple values bound
$statement->bindValue(":id", $id);
$statement->bindValue(":name", $flavour);
break;
case'Add':
$query = "INSERT INTO FlavourShakes(Flavour) VALUES (:name);";
$notice = "addOK";
$_POST['notice'] = $notice;
$statement = $con->prepare($query);
// this one needs one value bound
$statement->bindValue(":name", $flavour);
break;
}
//I know I haven't added a case for the remove button yet.$count = $statement->execute();

Вам также не хватает нескольких тестов (которые вы назначаете) в своем операторе if. замещать = с ==

if ($btnType == "save"){
...
} elseif($btnType == "delete"){
...
}elseif($btnType == "add"){
...
}else{
...
}
2

Другие решения

Это сообщение об ошибке:

saveBadSQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

потому что вы пытаетесь эту строку, когда нет: id

$statement->bindValue(":id", $id);

И вы всегда получаете saveBad, потому что вы назначать под вашим контролем:

if ($btnType = "save"){

Исправить в:

if ($btnType === "save"){
0

По вопросам рекламы [email protected]