#php #html #mysqli
#php #HTML #mysqli
Вопрос:
Я пытаюсь заставить это работать так, чтобы при нажатии на знак плюс в HTML-таблице (входной тег) моя база данных обновлялась в соответствии с tr, в котором находится кнопка. Мой код в настоящее время не работает таким образом; как я могу заставить кнопку ввода обновлять базу данных при нажатии?
Мой второй вопрос: как я могу заставить это работать более чем для одного города? Есть ли способ включить каждый город в один фрагмент PHP-кода для обновления базы данных, и если да, то как? Заранее спасибо!
HTML:
<form action="all_records.php" method="post">
<td name="albuquerque" class="albuquerque">
<b>Albuquerque</b>
</td>
<td>
<input type="submit" name="button1" value=" " id="1">
</td>
</form>
<form action="all_records.php" method="post">
<td name="atlanta" class="atlanta">
<b>Atlanta</b>
</td>
<td>
<input type="submit" name="button2" value=" " id="2">
</td>
</form>
all_records.php:
<?php
session_start();
if (!isset($_SESSION['loggedin'])) {
header('Location: index.php');
exit;
$DATABASE_HOST = 'localhost';
$DATABASE_USER = 'root';
$DATABASE_PASS = '';
$DATABASE_NAME = 'user_database';
$con = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);
if (mysqli_connect_errno()) {
exit('Failed to connect to MySQL: ' . mysqli_connect_error());
}
if(isset($_POST['button1'])) {
$city = $_POST['albuquerque'];
$edit_city = mysqli_query($user_database,"update test_cities set action=' ' where city='$city'");
header("location:cities.php");
}
?>
Комментарии:
1. У вас есть несколько форм, поэтому вам не нужно иметь разные имена для кнопок или полей. Добавьте скрытое поле в вашу форму для названия города.
2. Использование
submit
таких кнопок будет обновлять всю страницу при каждом нажатии кнопки. Это громоздко и медленно. Подумайте об использовании обработчика кликов для отправки AJAX-запроса при клике.3. Кроме того, когда вы закончите с этим, полностью откажитесь от него и используйте вместо него PHP PDO.
Ответ №1:
Не совсем уверен, что вы делаете с update test_cities set action=' ' where...
, но рассмотрите возможность использования первичного ключа вашей таблицы test_cities для идентификации каждой записи. Может быть, что-то вроде следующего:
<?php
$pdo = new PDO('mysql:dbname=user_database;host=localhost', 'root', 'xxx');
if($_SERVER['REQUEST_METHOD']==='GET') {
$cites = $pdo->query('SELECT id, name, bla FROM test_cities')->fetchAll();
$rows=[];
foreach($cities as $city) {
$rows[] = "<tr><td><b>$city[name]</b></td><td class='add-row' data-id='$city[id]'> </td>";
}
echo(getYourHtmlPage($rows);
}
else {
$pdo->prepare('UPDATE test_cities SET some_property=? WHERE id=?')->execute($_POST['some_property'], $_POST['id']);
}
Тогда вы не будете отправлять страницу, а просто отправите ajax-запрос.
document.getElementById("add-row").addEventListener("click", function() {
const req = new XMLHttpRequest();
req.open("POST", 'all_records.php');
req.send("id=" this.dataset.id);
req.onreadystatechange = (e) => {
// update as needed
}
});
Вы также можете рассмотреть возможность использования формы с флажками, а затем обновить все отправленные города (используйте name city[]
, чтобы они были отправлены в виде массива).
PS. Ничего из вышеперечисленного не было проверено.