简化php用户配置文件更新代码
我正在制作一个用户配置文件更新php文件,我想知道,有没有其他方法可以简化这个检查输入是否为空的简化php用户配置文件更新代码,php,Php,我正在制作一个用户配置文件更新php文件,我想知道,有没有其他方法可以简化这个检查输入是否为空的if语句代码?当前代码如下所示: ` ` 也许有一种方法可以通过函数实现这一点?您可以编写一个函数,该函数可以更新a)名称b)姓氏c)密码。之后,您可以执行以下操作: if(!empty($name)){ updateName($name); } if(!empty($surname)){ updateSurname($surname); } if(!empty($newPassword)
if
语句代码?当前代码如下所示:
`
`
也许有一种方法可以通过函数实现这一点?您可以编写一个函数,该函数可以更新a)名称b)姓氏c)密码。之后,您可以执行以下操作:
if(!empty($name)){
updateName($name);
}
if(!empty($surname)){
updateSurname($surname);
}
if(!empty($newPassword) && !empty($newConfirmPassword)){
if($newPassword == $newConfirmPassword){
updatePassword($newPassword);
}
}
这看起来稍微小一些。我会使用多个功能:一个用来查看是否没有任何更改,一个用来测试密码是否有效,等等 示例代码:
我认为约翰·斯莱格斯的回答很好。这是一个程序应该如何工作的方式 在我看来,它可以实现得更“优雅”,有
例外。使用异常
的优点是,使用嵌套函数时,您不必在每个级别中检查返回值并将其传递-相反,您只需在一个点上实现最终流,并且定义良好
想想看,花33美元买这本书。有一些好主意。你可能不同意所有的观点,但它确实为你提供了一个很好的编程指南
正如John在评论中指出的,尝试使用多个函数,并给函数起很好的名字。很高兴你不是30年前的程序员,在那里你的函数和变量名有两个字符
你问这个问题是一个很好的迹象,因为你对自己的版本不“满意”。谢谢,我现在就试试!在开始之前,请澄清die
命令是否仅作为“占位符”在MCVE中,或者它们也将保留在最终代码中。当您使用die
命令时,第一步可能是可以省略每个die
之后的所有其他
。这就是我想要的,我想省略其余的代码如果执行die
理想情况下,您应该使用多个函数:例如,一个用于验证您的姓名,一个用于验证密码,一个用于查看所有内容是否为空,等等。请参阅我的答案()了解如何执行此操作。
if(!empty($name)){
updateName($name);
}
if(!empty($surname)){
updateSurname($surname);
}
if(!empty($newPassword) && !empty($newConfirmPassword)){
if($newPassword == $newConfirmPassword){
updatePassword($newPassword);
}
}
session_start();
if($_POST['password'] !== $_SESSION['password']){
die('Wrong password, try again!');
}
$data['name'] = test_input($_POST['name']);
$data['surname'] = test_input($_POST['surname']);
$passwordConfirmed = $_POST['newConfirmPassword'] === $_POST['newPassword'] && !empty($_POST['newPassword']);
$newPassword = $_POST['newPassword'];
$data = array_filter($data);
if (count($data)===0) {
die('No changes has been made!');
}
if (!empty($newPassword) && $passwordConfirmed) {
//Update password
} else {
foreach ($data as $field => $value) {
//Update field. This would work best if your $field variable makes updating easy to code.
//break; //If you only want to update one field on each request
}
}
function stripName($data) {
return strtolower(htmlspecialchars(stripslashes(trim($data)));
}
function noChanges($name, $surname, $newPassword, $newConfirmPassword) {
if(empty($name) &&
empty($surname) &&
empty($newPassword) &&
empty($newConfirmPassword)
) {
return 'No changes has been made!';
}
return false;
}
function oldPasswordIsInvalid($password) {
if($password !== $_SESSION['password']){
return 'Wrong password, try again!';
}
return false;
}
function newPasswordIsInvalid($password1, $password2) {
if(empty($password1) {
return 'Password must not be empty';
}
if(empty($password2) {
return 'Password confirmation must not be empty';
}
if($password1 !== $password2) {
return 'Passwords do not match';
}
return false;
}
function errorFound(
$name,
$surname,
$password,
$newPassword,
$newConfirmPassword
) {
return
oldPasswordIsInvalid($password) ||
noChanges($name, $surname, $newPassword, $newConfirmPassword) ||
newPasswordIsInvalid($newPassword, $newConfirmPassword);
}
function removeEmptyFieldsFromArray($array) {
$returnArray = [];
foreach($array as $key => $value) {
if(!empty($value)) {
$returnArray[$key] = $value;
}
}
return $returnArray;
}
session_start();
$name = stripName($_POST['name']);
$surname = stripName($_POST['surname']);
$password = $_POST['password'];
$newPassword = $_POST['newPassword'];
$newConfirmPassword = $_POST['newConfirmPassword'];
if ($errorMessage = errorFound(
$name,
$surname,
$password,
$newPassword,
$newConfirmPassword
)) {
die($errorMessage);
} else {
$valuesThatNeedToBeUpdated = removeEmptyFieldsFromArray([
'name' => $name,
'surname' => $surname,
'password' => $newPassword
]);
// $valuesThatNeedToBeUpdated is an array that contains
// only the fields that aren't empty.
// Fields in this array are the ones that need to be updated
}