我正在尝试使用复选框和PHP更新MySQL数据库。我在网上阅读了很多代码示例,并在这里阅读了很多问题,但我似乎陷入了最后的障碍。
我的代码首先查询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代码片段:
$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。
我对导致问题的原因感到非常难过。我试过在网上找到但却找不到它。
非常感谢任何帮助。
谢谢
答案 0 :(得分:3)
您在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 Tables偶然发生了什么 if you are escaping inputs, its not safe! 使用prepared statement and parameterized statements