Как определить какая кнопка submit была нажата (используя только средства PHP)?
<html>
<body>
<fieldset>
<legend>Введите имя человека</legend>
<form method="POST">
<div class="inner">
<input type="submit" name="all" value="Получить данные о всех людях в БД">
<div class="input-area">
<label for="name">Имя:</label>
<input type="text" name="name" id="name">
</div>
</div>
<input type="hidden" name="check" value="1">
<input type="submit" name="specific" value="Получить данные о люядх с данным именем">
</form>
</fieldset>
<a href="in.php" style="text-align: center">Записать данные в БД</a>
<?php
require_once "../reg file/login.php";
$con = new mysqli($hn, $un, $pw, $db);
if ($con->connect_error) die("Сбой подключения к БД.");
mysqli_query($con, "SET NAMES 'utf8'");
mysqli_query($con, "SET CHARACTER SET 'utf8'");
mysqli_query($con, "SET SESSION collation_connection = 'utf8_general_ci'");
if (isset($_POST["check"])) {
if (empty($_POST["name"])) {
die("Вы не ввели имя");
}
if (!empty($_POST["all"])) {
$stmt = $con->prepare("SELECT * FROM people");
if (!$stmt->excecute()) die("Fatal Error");
$result = $stmt->get_result();
echo "<h1>Данные о всех людях в БД:</h1>";
}
if (!empty($_POST["specific"])) {
$name = htmlentities($_POST["name"]);
$stmt = $con->prepare("SELECT * FROM people WHERE name=?");
$stmt->bind_param("s", $name);
$stmt->execute();
$result = $stmt->get_result();
if ($stmt->affected_rows == 0) die("Людей с именем " . $name . " нет в базе");
echo "<h1>Данные о людях с именем $name:</h1>";
}
foreach ($result as $row) {
echo "Возраст: " . $row["age"] . "<br>";
echo "Пол: " . ($row["gender"] == "male" ? "Мужской" : "Женский");
}
$stmt->close();
}
$con->close();
?>
</body>
</html>
Я хочу понять какая именно кнопка была нажата.
Проверяю с помощью условий:
if (!empty($_POST["all"])) {
$stmt = $con->prepare("SELECT * FROM people");
if (!$stmt->excecute()) die("Fatal Error");
$result = $stmt->get_result();
echo "<h1>Данные о всех людях в БД:</h1>";
}
if (!empty($_POST["specific"])) {
$name = htmlentities($_POST["name"]);
$stmt = $con->prepare("SELECT * FROM people WHERE name=?");
$stmt->bind_param("s", $name);
$stmt->execute();
$result = $stmt->get_result();
if ($stmt->affected_rows == 0) die("Людей с именем " . $name . " нет в базе");
echo "<h1>Данные о людях с именем $name:</h1>";
}
Но это не работает: какую бы кнопку я не нажимал срабатывает только вторая
Как понять какая именно кнопка была нажата только средствами PHP/MySQL?
P.S. Я видел похожие вопросы на SO, но ответа на свой вопрос я так и не нашел
Ответы (3 шт):
<input type="submit" name="type[all]" value="Получить данные о всех людях в БД">
// form data
<input type="submit" name="type[specific]" value="Получить данные о люядх с данным именем">
// some of your code
switch (array_keys($_POST['type'])[0]) :
case 'all':
// first scenario
break;
case 'specific':
// second scenario
break;
endswitch;
Еще один способ как можно проверить это:
<form action="" method="POST">
<input type="submit" name="type[all]" value="Получить данные о всех людях в БД">
<input type="submit" name="type[specific]" value="Получить данные о люядх с данным именем">
<input type="hidden" name="check" value="1">
</form>
<?php
if (isset($_POST["type"]["all"])) {
//Одни действия
}
else if (isset($_POST["type"]["specific"])) {
//Другие действия
}
На самом деле всё оказалось куда проще!
Я просто-напросто ошибся в первом блоке if с написанием функции execute - случайно написал excecute. А "вы не ввели имя" выводилось потому, что я проверял было ли введено имя до того как входил в ветвь if (!empty($_POST["specific"])). Так что создавать массив type и в нем элементы all и specific вообще не имеет смысла. Можно делать так, как я делал изначально