>有谁知道为什么这个PHP代码不更新列pictures
它会更新其余的列,但不会更新图片列,而是更新用户信息 所以电子邮件地址,密码和图片 我对PHP很陌生,所以我真的不知道在寻找错误时要寻找什么
<?php
require("common.php");
if(empty($_SESSION['user']))
{
header("Location: login.php");
die("Redirecting to login.php");
}
if(!empty($_POST))
{
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
die("Invalid E-Mail Address");
}
if($_POST['email'] != $_SESSION['user']['email']['picture'])
{
$query = "
SELECT
1
FROM users
WHERE
email = :email
picture = :picture
";
$query_params = array(
':email' => $_POST['email']
);
try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
$row = $stmt->fetch();
if($row)
{
die("This E-Mail address is already in use");
}
}
if(!empty($_POST['password']))
{
$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));
$password = hash('sha256', $_POST['password'] . $salt);
for($round = 0; $round < 65536; $round++)
{
$password = hash('sha256', $password . $salt);
}
}
else
{
$password = null;
$salt = null;
}
$query_params = array(
':email' => $_POST['email'],
':user_id' => $_SESSION['user']['id'],
':picture' => $_POST['picture'],
);
if($password !== null)
{
$query_params[':password'] = $password;
$query_params[':salt'] = $salt;
}
$query = "
UPDATE users
SET
email = :email
picture = :picture
";
if($password !== null)
{
$query .= "
, password = :password
, salt = :salt
";
}
$query .= "
WHERE
id = :user_id
";
try
{
// Execute the query
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
$_SESSION['user']['email']['picture'] = $_POST['email'];
header("Location: private.php");
die("Redirecting to private.php");
}
?>
您缺少,
.
$query = "
UPDATE users
SET
email = :email
picture = :picture
";
您需要将其更改为
$query = "
UPDATE users
SET
email = :email,
picture = :picture
";
您在 UPDATE 语句中缺少 :email 之后的逗号。
$query = "
UPDATE users
SET
email = :email
picture = :picture
";
应该是
$query = "
UPDATE users
SET
email = :email,
picture = :picture
";
编辑:除此之外,您在第一个查询中还缺少一个参数:
$query = "
SELECT
1
FROM users
WHERE
email = :email
picture = :picture
";
$query_params = array(
':email' => $_POST['email']
);
请注意,您只在查询参数中应用 :email,但您的查询同时需要 :email 和 :p icture。
您需要从$query
中删除picture = :picture
或将':picture' => $_POST['picture']
添加到$query_params