【发布时间】:2015-12-16 21:19:48
【问题描述】:
我编写了一些 PHP PDO 代码来让我的网站用户更新他们的详细信息。
该代码旨在跳过任何空白输入字段,仅更新用户已输入详细信息的字段。
除了密码字段外,它工作正常。当我将所有表单留空并按“保存”时,除了密码仍会更改之外,一切都保持不变。
请在下面查看我的代码。
如果用户输入了新密码,我希望代码更新密码,否则我希望它保留已经在 mysql 表中的密码(密码是散列的)。
有人能告诉我正确的代码是什么吗?
PHP
<?php
require('../../../private_html/db_connection/connection.php');
session_start();
$ID = $_SESSION['ID'];
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE user_accounts SET first_name = COALESCE(NULLIF(:fname, ''),first_name), surname = COALESCE(NULLIF(:sname, ''),surname), display_name = COALESCE(NULLIF(:dname, ''),display_name), email = COALESCE(NULLIF(:email, ''),email), password = COALESCE(NULLIF(:password, ''),password) WHERE account_number='$ID'";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':fname', $_POST['fname']);
$stmt->bindParam(':sname', $_POST['sname']);
$stmt->bindParam(':dname', $_POST['dname']);
$stmt->bindParam(':email', $_POST['email']);
$stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_DEFAULT));
$stmt->execute();
$query = $conn->prepare("SELECT * FROM user_accounts WHERE account_number='$ID'");
$query->execute();
if(($row = $query->fetch())){
$_SESSION['ID'] = $row['account_number'];
$_SESSION['first_name'] = $row['first_name'];
$_SESSION['surname'] = $row['surname'];
$_SESSION['display_name'] = $row['display_name'];
$_SESSION['email'] = $row['email'];
header("Location: ../../myaccount/mydetails/mydetails.php");
}
}
catch(PDOException $e)
{
echo 'Connection failed: ' . $e->getMessage();
exit();
}
?>
【问题讨论】:
-
我认为这样的事情会帮助你stackoverflow.com/a/20866691/1804068
标签: php mysql pdo null sql-update