2
我已经编写了一些PHP PDO代码来让我的网站用户更新其详细信息。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();
}
?>
我现在觉得傻了!感谢这些答案,这两个工作。哪一个最适合使用Juan? – CyrilWalrus
两者都是一样的,三元操作用于避免3行 - if else- –
非常好,我想我会使用三元法,那么如果它更短并且一样好。再次感谢您的帮助! – CyrilWalrus