-5

我有 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) 类型。

编辑:我确实有正在执行的查询。这仍然会导致未更新姓氏、邮政编码、号码和电话字段。

4

1 回答 1

1

暂时忽略此代码和方法的所有其他问题(SQL 注入问题、GET 与 POST 问题等),并处理更新没有按预期改变事物,有几件事需要检查。

  • 尝试在您的日志中输出更新查询,并确保它实际上看起来像您所期望的那样。可能是您打算通过网络推送的值没有进入查询或那个。

  • 验证在独立 SQL 客户端(mysql、squirrel 等)中手动运行查询是否确实更新了记录。一个有效的更新查询完全有可能不匹配任何记录。(假设您要查找的用户名值与数据库中的值不匹配。

  • 在不了解您的基础架构的情况下,我建议您进行一些健全性检查:您实际上指向的是正确的数据库吗?您的更新是否包含在回滚的事务中?ETC ...

其他一些提示:

  • 我建议查看PDO,特别是Prepared Statements的工作方式。您在上面构建的那种查询是有人用您的所有数据或更糟的方式跑掉。虽然不是灵丹妙药,但准备好的陈述是坚实的第一步。

  • 看看Jquery 的 Ajax函数。特别是post方法。它提供了一个简单的接口来进行 ajax 调用,而无需构造特殊的 url 字符串。另外,切换到 POST 将避免您的数据出现在网络服务器日志文件中。

于 2013-05-03T15:26:19.213 回答