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