使用复选框和 PHP 更新 MySQL 数据库

Posted

技术标签:

【中文标题】使用复选框和 PHP 更新 MySQL 数据库【英文标题】:Updating MySQL Database with checkboxes and PHP 【发布时间】:2016-12-14 00:54:35 【问题描述】:

我正在尝试。我已经在网上阅读了很多代码示例并在这里阅读了很多问题,但我似乎陷入了最后一个障碍。

我的代码首先查询 mysql 以返回一个用户列表,然后每个用户旁边都有一个复选框(在 MySQL 中为 0 或 1),指示用户是否已完成。

我想要做的是当复选框被选中时,更新 MySQL 数据库并将列更新为 1,或者如果未选中,将列更改为 2。

到目前为止,这是我的代码:

html 片段(复选框):

        while($row = mysqli_fetch_array($result))
    
        echo "<tr>";
            echo "<td>" . $row['Firstname'] . "</td>";
            echo "<td>" . $row['Surname'] . "</td>";
            echo "<td>" . $row['Department'] . "</td>";
            echo "<td>" . $row['RequestedBy'] . "</td>";
            echo "<td>" . $row['StartDate'] . "</td>";
            echo "<td class='tbl-chk'> <input type='checkbox' name='WSCompleted' value='"; echo $row['ID'] . "'" ; if ($row['WSCompleted']=='1')  echo "checked='checked'"; echo "/></td>";

这是我的 jQuery,它成功检索了值和 ID,然后发布它们:

        $(document).ready(function()
        $('input[name=WSCompleted]').click(function()
            var wsCompleted = $(this).is(':checked') ? 1 : 0;
            var wsCompletedID = $(this).attr('value');

            $.ajax(
            type: "POST",
            url: "/usr-handler.php",
            data: id: wsCompletedID, wsCompleted: wsCompleted,
            success: function()
                $('div.success').fadeIn();
            
        );
        return true;

        ); 
    );

最后是我的 PHP 的 sn-p:

$wsCompleted = $_POST['wsCompleted'];   
$id = $_POST['wsCompletedID'];

$query = "UPDATE newusers SET WSCompleted = '$wsCompleted' WHERE id = '$id'";

mysqli_query($con, $query) or die(mysqli_error());


mysqli_close($con);

我将复选框的值设置为 MySQL 中的实际行 ID,然后我可以使用复选框值在 MySQL 中选择正确的行,并更新它。

我遇到的问题是,目前,代码如何,我从 FireBug 得到以下响应:

未识别的索引:WSCompletedID

网上看了后建议改一下:

$id = $_POST['wsCompletedID'];

收件人:

$id = (ISSET($_POST['wsCompletedID']));

但这样做会清除错误消息,但实际上并不会更新 MySQL 上的值。

如果我手动将 $id 设置为某个值,更新会起作用,但显然这是不对的,因为它只会更新我选择的 ID。

我完全不知道是什么导致了这个问题。我已经尝试在网上查找,但无法使用它。

非常感谢任何帮助。

谢谢

【问题讨论】:

【参考方案1】:

您在 javascript AJAX 代码中加载数据

data: id: wsCompletedID, wsCompleted: wsCompleted,

这将创建以下$_POST 数组

id => whatever was in wsCompletedID
wsCompleted => whatever was in wsCompleted

所以您的 PHP 代码应该寻找 $_POST['id']$_POST['wsCompleted'],因为这些是您在 data:... 中给出的名称

$wsCompleted = $_POST['wsCompleted'];   
$id = $_POST['id'];

$query = "UPDATE newusers SET WSCompleted = '$wsCompleted' WHERE id = '$id'";

mysqli_query($con, $query) or die(mysqli_error());
mysqli_close($con);

但是:您的脚本存在SQL Injection Attack 的风险 看看Little Bobby TablesEven 发生了什么 if you are escaping inputs, its not safe! 使用prepared statement and parameterized statements

【讨论】:

感谢您的回复!我就知道这是一件愚蠢的事情!有趣的是,我最初确实有这个,但是在尝试调试我的代码并重写它之后,我将它恢复为 $_POST['WSCompletedID']。再次感谢你!抱歉格式化,我不知道如何格式化评论。

以上是关于使用复选框和 PHP 更新 MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

复选框状态更改时如何更新mysql字段?使用 jquery (ajax)、php 和 mysql

PHP - 使用 MySQL 数据库中的记录作为值创建复选框

使用 jquery ajax mysql 和 php 按复选框过滤数据

使用 PHP 处理多对多数据库关系并选择/插入多个复选框值 MYSQL

如何使用 PHP 使用复选框从 mysql 数据库中删除多行?

如何使用 PHP 将复选框的值传递给 mySQL 数据库?