【发布时间】:2014-04-21 09:59:46
【问题描述】:
我正在尝试使用 X-editable (Bootstrap) 更新 MySQL 表。问题是 - 数据库没有得到更新。我在stackoverflow和其他地方经历了几个类似的问题。但找不到解决办法。
我的 mysql 数据库有一个名为“paving_variety”的表,其中包含以下三列:
- 身份证
- 类型
- 发布
我的前端页面有如下表格:
<?php
$i = 1;
foreach ($obj->showAllFromTable('paving_variety') as $variety) {
extract($variety);
?>
<tr>
<td><?php echo $i++; ?></td>
<td class="id"><?php echo $id; ?></td>
<td><a href="#" class="xedit_variety" data-name="type" data-type="text" data-pk="<?php echo $id; ?>" data-url="post_variety_ajax.php"><?php echo $type; ?></a></td>
<td ><button class="status_change btn btn-default"><?php echo $publish; ?></button></td>
</tr>
<?php
}
?>
javascript文件有如下代码:
$(document).ready(function() {
$('.xedit_variety').editable();
});
“post_variety_ajax.php”看起来像这样:
<?php
$pk = $_POST['pk'];
$name = $_POST['name'];
$value = $_POST['value'];
include 'adminclass.php';
if(!empty($value)) {
$gar->updateVarietyName($name,$value,$pk);
} else {
echo "This field is required!";
}
?>
“adminclass.php”有如下代码更新数据库:
public function updateVarietyName($name,$value,$pk) {
$query = mysqli_query($this->conn,"UPDATE paving_variety SET $name='$value' WHERE id='$pk'");
}
其他一切似乎都正常,但数据库没有更新。有人有什么建议吗?
谢谢。平静。
【问题讨论】:
-
可爱的SQL injection attack 漏洞。享受您的服务器 pwn3d。另外,你只是假设一切都很顺利。您是否在更新函数中检查了
$query的布尔值 false? -
感谢您对 SQL 注入攻击的建议。我还没有在这个项目中插入安全增强代码,但我会的。是的,我检查了 $query,它返回 true。
-
然后检查affected_rows。如果为零,则查询成功,但 where 子句不匹配任何内容,因此不会更新任何记录。
-
@user2407971 事后才考虑安全是个坏主意。你会忘记一些事情。只需从一开始就使用参数化查询,您不必担心以后重构整个程序。
-
完成。但问题依然存在。
标签: php jquery mysql twitter-bootstrap x-editable