Я создал форму регистрации и в целях безопасности хочу проверить вводимые пользователем данные.
Я создал несколько функций, показанных ниже.
Я просто не уверен, как правильно их реализовать. Вкладываю ли я операторы if? Я просто сохраню это так, как сейчас?
Как мне остановить мой сценарий, если что-то не так? Чтобы предотвратить попытку вставки, когда что-то не так.
Любая помощь приветствуется.
function validateLength($stringToValidate, $minimumLength) {
if (strlen($stringToValidate) < $minimumLength) {
return [
'error' => 'Minimum length is 8 charachters',
'class' => 'alert alert-danger',
];
} else {
return true;
}
}
function validateEmail($emailToVerify) {
if (filter_var($emailToVerify, FILTER_VALIDATE_EMAIL)) {
return true
} else {
return [
'error' => '<strong>Error:</strong> That is not a valid email address',
'class' => 'alert alert-danger'
];
}
}
function formIsFilledIn(array $formInputs = []) {
foreach ($formInput as $inputField) {
if (empty($inputField)) {
return [
'error' => '<strong>Error: </strong> Fill in all fields.',
'class' => 'alert alert-danger',
];
}
}
return null;
}
Теперь я использую все функции таким образом.
$formErrors = formIsFilledIn($_POST);
if ($formErrors !== null) {
// Something is not filled in
}
$formErrors = validateLength($_POST['username'], 8);
if ($formErrors !== true) {
// Username doesn't have enough characters
}
$formErrors = validateLength($_POST['password'], 8);
if ($formErrors !== true) {
// Password doesn't have enough characters
}
Для полноты картины это вставка (работает исправно)
$stmt = $connect->prepare('INSERT INTO `users` (user_name, user_password, user_email, user_perms, user_created_at) VALUES (?, ?, ?, ?, ?)');
if ($stmt) {
$username = $_POST['username'];
$password = hashPassword($_POST['password']);
$email = $_POST['email'];
$date = date('Y-m-d H:i:s');
$perms = "Gebruiker";
$stmt->bind_param('sssss', $username, $password, $email, $perms, $date);
if ($stmt->execute()) {
$err = "<strong>Success: </strong> The account has been created";
$class = "alert alert-success";
} else {
$err = "<strong>Error:</strong> Something went wrong";
$class = "alert alert-danger";
}
}
Что именно вы подразумеваете под номерами ошибок? Не могли бы вы уточнить?
например if ($formErrors !== true) { exit('9');}. это прервет скрипт и вернет строку '9', которую вы можете проверить, используя свой интерфейс.
Должен ли я затем использовать эти числа для отображения ошибок соответственно или они для чего-то другого? Поскольку мои функции выдают ошибки в массиве, который я затем могу отобразить с помощью $formErrors['error'];






Вы действительно можете связать if, используя elseif. Однако я бы предложил некоторые изменения в functions. Вместо того, чтобы позволить им проверять и возвращать массив, содержащий некоторые ошибки, вам нужно только позволить им проверять и возвращать либо true, либо false.
Это выглядело бы примерно так:
function validateLength($stringToValidate, $minimumLength) {
if (strlen($stringToValidate) < $minimumLength) {
return false;
} else {
return true;
}
}
function validateEmail($emailToVerify) {
if (filter_var($emailToVerify, FILTER_VALIDATE_EMAIL)) {
return true;
} else {
return false;
}
}
function formIsFilledIn(array $formInputs = []) {
foreach ($formInputs as $inputField) {
if (empty($inputField)) {
return false;
}
}
return true;
}
Это означает, что вы можете делать следующее:
if (!formIsFilledIn($_POST)) {
$error = [
'error' => '<strong>Error: </strong> Fill in all fields.',
'class' => 'alert alert-danger',
];
} elseif (!validateLength($_POST['username'], 8) || !validateLength($_POST['password'], 8)) {
$error = [
'error' => 'Minimum length is 8 charachters',
'class' => 'alert alert-danger',
];
}
elseif (!validateEmail($_POST['email'])) {
$error = [
'error' => '<strong>Error:</strong> That is not a valid email address',
'class' => 'alert alert-danger'
];
}
else {
// now you can call a function that starts to insert stuff, everything has been validated
}
Конечно, чем длиннее будет форма, тем длиннее она будет. Другой вариант - перебрать сообщение и проверить, все ли поля имеют допустимую длину. Когда это будет сделано, вы можете проверить электронную почту и все другие специальные поля.
Таким образом, я мог бы повторить это сообщение об ошибке где-нибудь еще на моей странице, используя echo $error['error'];. Я вижу и понимаю, что вы здесь сделали, но это то, что я пытался предотвратить изначально. Я хочу выполнять централизованную обработку ошибок, поэтому мне нужно изменить ее только в одном месте, если мне нужно что-то изменить в будущем. Каковы преимущества этого способа и есть ли / есть ли альтернативы?
Преимущество этого способа состоит в том, что функции делают именно то, что они говорят, проверяют и ничего больше. Это означает, что вы можете использовать функции в других местах. Это также означает, что у вас есть одно место или функция (если вы поместите проверяющую часть в функцию), где вы должны изменить сообщения об ошибках. И последнее, но не менее важное: если первый if завершился неудачно, остальные if и else не будут выполнены.
вы можете использовать
exit()и определять номера ошибок, относящиеся к каждому случаю; аналогично тому, как веб-браузеры возвращают ошибку 404, если страница не может быть найдена