Я строю веб-сайт с использованием PHP, и мне нужно проверить, правильно ли введено пользователем имя или нет. Поскольку JavaScript на стороне клиента, я не могу полностью на это полагаться, поэтому вот моя функция на стороне сервера для проверки имени пользователя:
function validate_name($name) {
$name = trim($name); // only for the purpose of debugging <---- edited comment
echo $name;
if (strlen($name) <= 1) {
return "small";
} else if (has_numbers($name)) {
return "numbers";
} else {
return true;
}
}
После этого я проверяю ввод и отображаю результат соответственно:
function final_check() {
if (validate_name($_POST["first_name"]) == "small") {
echo "<span class='error'>Your first name cannot be empty</span>";
return false;
} else if (validate_name($_POST["first_name"]) == "numbers") {
echo "<span class='error'>Numbers are not allowed in your first name</span>";
return false;
}
return true;
}
Когда я ничего не ввожу в first_name
поле, я получаю пустое сообщение об ошибке; когда я ввожу числа, я получаю сообщение об ошибке чисел. Однако, когда я действительно ввожу правильное имя, мне выдается пустое сообщение об ошибке.
Вот данные поста:
Array
(
[email] => ewf@gmail.com
[first_name] => qwe
[last_name] => wqe
[password] => qwe
[re_password] => qwe
[gender] => Male
)
Выход:
Your first name cannot be empty
Есть идеи, что я делаю не так? Я был в тупике в течение последнего часа, пытаясь это исправить, и я не смог найти решение.
Array
(
[email] => ewf@gmail.com
[first_name] => qwe
[last_name] => wqe
[password] => qwe
[re_password] => qwe
[gender] => Male
)
// First_name length = 3
function validate_name($name) {
$name = trim($name);
echo $name;
if (strlen($name) <= 1) {
return "small";
} else if (has_numbers($name)) {
return "numbers";
} else {
return true; // satisfy this case return true
}
}
и здесь это становится как
function final_check() {
if (validate_name($_POST["first_name"]) == "small") { // if(1 == 'small')
echo "<span class='error'>Your first name cannot be empty</span>";
return false;
} else if (validate_name($_POST["first_name"]) == "numbers") {
echo "<span class='error'>Numbers are not allowed in your first name</span>";
return false;
}
return true;
}
if (1 == ‘small’) — это сравнение строк с логическим значением, которое всегда будет возвращать true.
пожалуйста, проверьте эта страница в руководстве чтобы понять проблему.
Ваша логика верна, однако, как указали другие вопросы, строка с логическим сравнением вернет true.
Чтобы это исправить, вы должны использовать ===
вместо ==
и все должно быть хорошо
То, что я предлагаю здесь, это изменить ваш validate_name
функция, так что он будет иметь только один тип возвращаемого значения, поскольку в настоящее время он может возвращать либо string
или boolean
, что не очень хорошая практика.
Например, вы можете сделать что-то вроде:
function validate_name($name) {
$name = trim($name);
echo $name;
if (strlen($name) <= 1) {
return "small";
} else if (has_numbers($name)) {
return "numbers";
} else {
return "ok"; // or return ""; or whatever string you want.
}
}
Кроме того, чтобы оптимизировать код и улучшить читабельность, вы можете изменить final_check
функционировать так, что будет только один вызов validate_name
используя промежуточную переменную.
function final_check() {
$valid = validate_name($_POST["first_name"]);
if ($valid == "small") {
echo "<span class='error'>Your first name cannot be empty</span>";
return false;
} else if ($valid == "numbers") {
echo "<span class='error'>Numbers are not allowed in your first name</span>";
return false;
}
return true;
}
попробуй с
if (validate_name($_POST["first_name"]) == "small" && !validate_name($_POST["first_name"])) {
echo "<span class='error'>Your first name cannot be empty</span>";
return false;
} else if (validate_name($_POST["first_name"]) == "numbers" && validate_name($_POST["first_name"])) {
echo "<span class='error'>Numbers are not allowed in your first name</span>";
return false;
}
true == 'small'
также вернется true
или попробуйте с ===
будет строго соответствовать значениям
if (validate_name($_POST["first_name"]) === "small") {
echo "<span class='error'>Your first name cannot be empty</span>";
return false;
} else if (validate_name($_POST["first_name"]) === "numbers"=) {
echo "<span class='error'>Numbers are not allowed in your first name</span>";
return false;
}
Я думаю, что вы должны изменить только функцию final_check ()
function final_check() {
if(validate_name($_POST["first_name"])){
return true;
}else{
if (validate_name($_POST["first_name"]) == "small") {
echo "<span class='error'>Your first name cannot be empty</span>";
return false;
} else if (validate_name($_POST["first_name"]) == "numbers") {
echo "<span class='error'>Numbers are not allowed in your first name</span>";
return false;
}
}
}