Обновить значение базы данных onclick с помощью PHP

#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. Ничего из вышеперечисленного не было проверено.