【问题标题】:Update database value onclick with PHP使用 PHP 更新数据库值 onclick
【发布时间】:2021-03-01 21:07:03
【问题描述】:

我试图让它工作,以便当我单击 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");

}
?>

【问题讨论】:

  • 您有多个表单,因此您不需要为按钮或字段使用不同的名称。在表单中为城市名称添加一个隐藏字段。
  • 使用像这样的submit 按钮将在每次单击按钮时刷新整个页面。这很麻烦而且很慢。考虑使用点击处理程序在点击时发送 AJAX 请求。
  • 另外,当你完成它的工作后,完全放弃它并改用 PHP PDO。

标签: php html mysqli


【解决方案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
    }
});

您可能还想考虑使用带有复选框的表单,然后更新所有提交的城市(使用名称 city[],以便将它们作为数组发送)。

PS。以上均未测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2017-04-28
    • 2011-09-27
    相关资源
    最近更新 更多