我是PHP的初学者,我正在个人资料页面上工作。当前的问题是更改名称(这是我要更改名称的试用页)。由于某种原因,我收到错误消息:
您的SQL语法有错误;请查看与您的MariaDB服务器版本相对应的手册,以获取在第1行的'lastName ='Lname'WHERE email ='qwerty@example.com'附近使用的正确语法。
<?php
include('server.php');
$db = mysqli_connect('localhost','root','','userdata');
$query = "SELECT * FROM data WHERE email = '".$_SESSION['username']."'";
$result = mysqli_query($db,$query);
$data = mysqli_fetch_assoc($result);
?>
<html>
<head>
<title>Profile</title>
</head>
<body>
<form method="POST" action="">
<p>First name: <input type="text" name="fname" value="<?php echo htmlspecialchars($data['firstName']); ?>" > </p>
<p>Last name: <input type="text" name="lname" value="<?php echo htmlspecialchars($data['lastName']); ?>"> </p>
<p><input type="Submit" name="confirm" value="Confirm"></p>
</form>
<?php
if(isset($_POST['confirm']))
{
$db = mysqli_connect('localhost','root','','userdata');
$query = "UPDATE data SET firstName ='".$_POST['fname']."' lastName ='".$_POST['lname']."' WHERE email ='".$_SESSION['username']."'";
mysqli_query($db,$query);
echo mysqli_error($db); //For checking error.Remove afterwords.
}
?>
<p><a href="homepage.php">HOMEPAGE</a></p>
</body>
</html>
server.php是我管理整个操作后端的页面,因此它不参与此操作。第一个PHP块从表中获取数据。 HTML块创建一个表单,用户可以在其中编辑数据。 PHP块应将数据更新到表中。
我将不胜感激任何进一步改善我的页面的技巧,因为我对此还不熟悉。预先感谢
更新:-向查询添加,仍然不会改变情况。
答案 0 :(得分:1)
您的sql语句中有错误(如错误消息所提示)。在mysql中,错误消息通常会指出发生错误的确切位置,并且通常会引用导致问题的第一个字符/单词。
在您的情况下为lastname
。到目前为止,您的更新查询是:
UPDATE data SET firstName ='fname' lastName ='Lname' WHERE email ='qwerty@example.com'
-- ^ error occured here
当您查找UPDATE查询的样子(mysql文档)时,必须用逗号分隔不同的更新字段:
UPDATE data SET firstName ='fname', lastName ='Lname' WHERE email ='qwerty@example.com'
-- ^ add this here
此外,您容易受到sql注入的攻击(请仔细阅读它们以及如何防止它们-这是通过准备好的语句完成的)
答案 1 :(得分:0)
请尝试这样做(您的SQL查询中缺少逗号)。
$query = "UPDATE data SET firstName ='".$_POST['fname']."', lastName ='".$_POST['lname']."' WHERE email ='".$_SESSION['username']."'";
答案 2 :(得分:0)
使用对sql注入开放的代码的另一个问题是,您可以轻松地从输入端更改sql语句的语法。例如,如果您输入的姓氏为“ O'connor”,则更改语法。尝试使用echo $query
,然后分析输出或更佳的结果,将其复制并直接运行而不使用php
答案 3 :(得分:-1)
如评论中所述。更新多个字段时,您需要用逗号分隔它们:
UPDATE data
set
field1="meh", /* <-- comma */
field2="foo"
where otherField="something"