【发布时间】:2018-10-26 04:48:55
【问题描述】:
我正在尝试根据复选框输入更新列值。单击触发了代码(我使用 alert() 进行了测试),但数据库中没有发生更新,控制台中也没有显示错误。请注意,我正在使用图像来替换复选框。
CSS
input[type=checkbox] {
display: none;
}
label:before {
content: url("../images/house.png");
z-index: 100;
}
:checked + label:before {
content: url("../images/home.png");
}
PHP/HTML
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo
'
<div class="mx-auto" style="max-width:500px;">
<div class="form-group">
<div class="form-inline">
<div class="form-group col-1">
<input type="checkbox" name="home['. $row["id"].']" id="'. $row["id"].'" ' . ($row["home"]==1 ? ' checked="checked"' : '') . '>
<label for="'. $row["id"].'"></label>
</div>
<div class="col-10" style="font-weight:bold;">
'.$row["address"].' '. $row["suburb"].'
</div>
<div class="col-1">
<a style="float:right; margin-bottom:5px;" href="'.$row["gmap"].'" class="btn btn-success">Go</a>
</div>
</div>
AJAX
<script>
$(document).ready(function(){
$('input[type="checkbox"]').on("click", function(){
$.post("work/updateaddress.php",{home:this.checked,id:this.id});
});
});
PHP
$id = $mysqli->real_escape_string($_POST['id']);
$home = $mysqli->escape_string($_POST['home']);
if(isset ($_POST["home"])) {
$sql = "UPDATE addresses SET home='$home' WHERE id='$id'";
if($mysqli->query($sql) === TRUE){
} else {
echo "error" . $sql . "<br>".$mysqli->error;
}
}
【问题讨论】:
-
您是否通过在 php 代码中打印 $_POST 的值来检查?是空的吗?
-
您在 HTML 中对 'home' 的引用不是 'home' 它的 'home[#]' 用任何 row['id'] 替换 #。因此,您的服务器端 PHP 需要更改以引用正确的 home 元素。你的 PHP 有点奇怪,你用了之后为什么还要检查 isset($_POST['home'])?
-
添加 print_r($_POST);在您的 PHP 中,它将在控制台中转储 $_POST 的内容,以便您查看。
-
您的脚本对SQL Injection Attack 甚至if you are escaping inputs, its not safe! 都是开放的,在
MYSQLI_或PDOAPI 中使用prepared parameterized statements