我有PHP生成HTML表单,我正在尝试编写一个脚本来更新数据库中的信息。出于某种原因,它适用于某些领域而不是其他领域。
不起作用的代码:
PHP-Form,用户可以在
中更改详细信息echo"<form name='details'>";
echo"<p>Surname: <input type='text'id='surname' value='".$row['Surname']."'/></p>;
<p>Telephone: <input type='text'id='phone' value='".$row['Telephone']."'/></p>;
<p>Postcode: <input type='text' id='postcode' value='".$row['Postcode']."'/></p>;
<p>House/Flat Number: <input type='text' id='number' value='".$row['Number']."'/></p>";
AJAX - 通过查询字符串
向服务器发送更改 var sname = document.getElementById('surname').value;
var tel = document.getElementById('phone').value;
var num = document.getElementById('number').value;
var pcode = document.getElementById('postcode').value;
var queryString = "?username=" + username +"&email="+email....";
ajaxRequest.open("GET", "url" + queryString, true);
ajaxRequest.send(null);
PHP - 执行更新命令
//connect to server
...
//get variables
$sname = $_GET['sname'];
$pcode = $_GET['pcode'];
$tel = $_GET['tel'];
$num=$_GET['num'];
//process update
$update ="UPDATE User SET Surname='$sname',Telephone='$tel',Number='$num',
Postcode='$pcode' WHERE Username='$username'";
//if query, display success
if(mysqli_query($update))
{
echo"success";
}
else
{
echo"error";
}
//else display error
查询执行正常,但值未显示在数据库中。我的其他变量(用户名,密码等)都更新正常。所有数据库字段都是VARCHAR(80)类型。
编辑:我确实正在执行查询。这仍然导致姓氏,邮政编码,号码和电话字段未更新。
答案 0 :(得分:1)
暂时忽略此代码和方法的所有其他问题(SQL注入问题,GET与POST问题等),以及处理更新而不是按预期更改内容,有几件事需要检查
尝试在日志中输出更新查询,并确保它实际上看起来像您期望的那样。可能是你想要通过网络推送的值不会进入查询或那个。
验证在独立的SQL客户端(mysql,squirrel等)中手动运行查询。实际更新记录。完全有可能有效的更新查询可能与任何记录都不匹配。 (假设您要查找的用户名值与数据库中的用户名不匹配。
不知道您的基础架构,我建议进行一些健全性检查:您是否真的指向正确的数据库?您的更新是否包含在正在回滚的事务中?等...
其他一些提示:
我建议查看PDO,特别是Prepared Statements如何工作。您在上面构建的查询类型是有人用您的所有数据运行或更糟。虽然不是灵丹妙药,准备好的陈述是坚实的第一步。
查看Jquery's Ajax个功能。特别是post方法。它为进行ajax调用提供了一个简单的接口,而无需构造特殊的url字符串。此外,切换到POST将避免您的数据显示在Web服务器日志文件中。