Я пытаюсь получить поле обновления, чтобы администратор мог обновлять информацию о пользователе. Я застрял в пароле. Если я обновлю сейчас и оставлю пароль пустым, то он хеширует пустое значение и вставит его в БД. Я хочу сохранить предыдущее значение, если оно не изменено в форме.
Я посмотрел на это, так как оно было ближе всего к тому, что я ищу PHP MYSQL -> UPDATE столбец с переменной, если эта переменная не пуста или не пуста Это не ответь на мой вопрос. если у меня есть несколько запросов, я думаю, с помощью операторов. На самом деле я только хочу обновить отредактированные поля.
if(isset($_POST['register'])){
error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR);
$username = !empty($_REQUEST['username']) ? trim($_REQUEST['username']) : null;
$pass = !empty($_REQUEST['password']) ? trim($_REQUEST['password']) : null;
$fname = !empty($_REQUEST['fName']) ? trim($_REQUEST['fName']) : null;
$lname = !empty($_REQUEST['lName']) ? trim($_REQUEST['lName']) : null;
$role = !empty($_REQUEST['role']) ? trim($_REQUEST['role']) : null;
$region = !empty($_REQUEST['region']) ? trim($_REQUEST['region']) : null;
$district = !empty($_REQUEST['district']) ? trim($_REQUEST['district']) : null;
$id = !empty($_REQUEST['ID']) ? trim($_REQUEST['ID']) : null;
$location = !empty($_REQUEST['store']) ? trim($_REQUEST['store']) : null;
$outlet = !empty($_REQUEST['outletid']) ? trim($_REQUEST['outletid']) : null;
$passwordHash = password_hash($pass, PASSWORD_BCRYPT, array("cost" => 12));
$sql=$pdo->prepare("UPDATE users
SET username = :username,
password = :password,
fName = :fName,
lName = :lName,
role = :role,
region = :region,
district = :district,
outlet_id = :outlet_id,
store_name = :store_name
WHERE id = :id
");
$sql->bindParam(':username',$username);
$sql->bindParam(':password',$passwordHash);
$sql->bindParam(':fName',$fname);
$sql->bindParam(':lName',$lname);
$sql->bindParam(':role',$role);
$sql->bindParam(':region',$region);
$sql->bindParam(':district',$district);
$sql->bindParam(':id',$id);
$sql->bindParam(':outlet_id',$outlet);
$sql->bindParam(':store_name',$location);
if($sql->execute()){
$_SESSION['success'] = "Successfully Updated Record";
}// End of if profile is ok
else{
print_r($sql->errorInfo()); // if any error is there it will be posted
$msg=" Database problem, please contact site admin ";
}
}
Я пытался использовать CASE внутри оператора, но это выдает ошибку. Как я могу обновить данные пользователя, не удаляя данные в столбце?
IE: Если имя пользователя изменилось, просто отредактируйте это поле в БД. Если имя пользователя и пароль изменены, обновите оба.
Спасибо, ребята
РЕДАКТИРОВАТЬ:
Я пробовал это
if(!empty(trim($_REQUEST['password']))){
$passwordHash = password_hash($pass, PASSWORD_BCRYPT, array("cost" => 12));
}
Это все еще обновляет пароль
Редактировать2:
"UPDATE users
SET username=:username,
password = CASE
WHEN :password = '' THEN password
ELSE :password
END,
fName=:fName,
lName=:lName,
role=:role,
region=:region,
district=:district,
outlet_id=:outlet_id,
store_name=:store_name
WHERE id=:id");