我有一张表格中所有用户的列表。在他们的右边,我有一个更新按钮。当我按下更新按钮时,我被发送到更新页面。我有用户ID,因此链接会像这样:/update.php?id=22
在更新页面上,我有更新表单:
<table>
<tr>
<th>First Name:</th>
<td><input type="text" value="<?php $user->get_first_name($id);?>" name="first_name"></td>
</tr>
<tr>
<th>Last Name:</th>
<td><input type="text" value="<?php $user->get_last_name($id);?>" name="last_name"></td>
</tr>
<tr>
<th>Email:</th>
<td><input type="text" value="<?php $user->get_email($id);?>" name="email"></td>
</tr>
<tr>
<th>Password:</th>
<td><input type="text" value="<?php $user->get_password($id);?>" name="password"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="submit" value="Update" ></td>
</tr>
<tr>
<td> </td>
<td><a href="login.php">Already registered! Click Here!</a></td>
</tr>
</table>
我获取信息的方式是这样的:
public function get_first_name($id){
$sql3="SELECT first_name FROM users WHERE id = $id";
$result = mysqli_query($this->db->mysqli,$sql3);
$user_data = mysqli_fetch_array($result);
echo $user_data['first_name'];
}
等等,每个领域。
然后我按照这样的方式调用我的函数:
if (isset($_POST['submit'])){
if (empty ( $_POST ['first_name'] ) || empty ( $_POST ['last_name'] )|| empty ( $_POST ['email'] ) || empty ( $_POST ['password'] )) {
$errors [] = 'All fields are required.';
}
if (empty ( $errors ) === true) {
extract($_POST);
$register = $user->update_user($id, $first_name, $last_name,$password, $email);
}
}
我的功能看起来像这样:
public function update_user($id, $first_name,$last_name,$password,$email){
$sql = "UPDATE users SET first_name = $first_name, last_name = $last_name, email = $email, password = $password WHERE id = ?";
$result = $this->db->mysqli->query($sql);
if (!$result) {
echo "Update record failed: (" . $this->db->mysqli->errno . ") " . $this->db->mysqli->error;
} else {
// Print the table
header("Location: ../admin.php");
}
}
但是当我尝试更新用户时,我收到了一个错误:
Update record failed: (1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com, password = ASDASDASD WHERE id = ?' at line 1
我的sql一定有问题。 我希望你们中的一个人能发现我的错误
答案 0 :(得分:1)
在查询中使用字符串引号,转义字符串值并散列密码:
$sql = "UPDATE users
SET
first_name = '".mysqli_real_escape_string($this->db->mysqli, $first_name)."',
last_name = '".mysqli_real_escape_string($this->db->mysqli, $last_name)."',
email = '".mysqli_real_escape_string($this->db->mysqli, $email)."',
password = '".mysqli_real_escape_string($this->db->mysqli, crypt($password, $salt))."'
WHERE id = " . $id;
为crypt function使用适当的盐。
两个建议:
答案 1 :(得分:1)
实际问题/错误是由于您没有引用字符串值而引起的。
但是,如果你这样做,你需要使用一个转义函数来确保你可以安全地插入你的值(避免sql注入)。
最好使用如下的预备语句:
UPDATE users SET first_name = ?, last_name = ?, email = ?, password = ? WHERE id = ?
(那里你不需要引号)
并绑定值并在此之后执行语句。
你已经拥有了这样的id设置(虽然你也没有绑定它,导致以后出现另一个错误),所以你已经知道要走哪条路了。
除此之外:
答案 2 :(得分:1)
您应该将更新查询email = $ password更改为email = $ email