Я пытаюсь создать рабочую проверку регистрации, однако у меня есть проблема. Проверки работают, но есть ошибка, даже если пользователь вводит правильную информацию, инструкция INSERT не выполняется. Однако когда оператор elseif удаляется, в интерфейсе отображается ошибка, но данные по-прежнему вставляются, даже если в пользовательской форме есть ошибка; такой как пароль, имеющий только буквы. Буду признателен, если кто-нибудь сможет исправить эту ошибку. Полная проверка приведена ниже.
Спасибо
Wasim
<?php include "connection2.php" ?>
<?php
session_start();
if (empty($errors)) {
if(isset($_POST['submitted'])) {
$firstname=$_POST['Firstname'];
$lastname=$_POST['Lastname'];
$username=$_POST['Username'];
$password= $_POST['Password'];
$email=$_POST['Email'];if ($username&&$password&&$email) {
if (strlen($username)>10) {
echo "Username is too long (Max 10 Characters)";
}
else {
//check password length
if (strlen($password)>15||strlen($password)<5) {
echo "Password must be 5 to 15 characters<br>";
}
if (!preg_match("#[0-9]+#", $password)) {
echo "Password must include at least one number!<br>";
}
if (!preg_match("#[a-zA-Z]+#", $password)) {
echo "Password must include at least one letter!<br>";
}
elseif ((!strlen($username) >10) and
(!strlen($password)>15||!strlen($password)<5) and
(preg_match("#[0-9]+#", $password)) and
(preg_match("#[a-zA-Z]+#", $password))) {$sql = mysql_query
("INSERT INTO users(firstname, lastname,username, password, email)
VALUES ('$firstname','$lastname','$username',
'$password','$email')");
md5($password);
//register the user!
echo "Your Are Now a Member";}
}
}
mysql_close();
}}
else { ?>
<?php }
?>
Ваш elseif
привязан только к последнему if
, И я не уверен, что вы правильно поняли всю перевернутую логику. Но более простое решение состоит в том, чтобы просто установить переменную, которая указывает, не прошла ли какая-либо из проверок валидации, и проверить это.
if ($username && $password && $email) {
if (strlen($username)>10) {
echo "Username is too long (Max 10 Characters)";
}
else {
$error = false;
//check password length
if (strlen($password)>15||strlen($password)<5) {
echo "Password must be 5 to 15 characters<br>";
$error = true;
}
if (!preg_match("#[0-9]+#", $password)) {
echo "Password must include at least one number!<br>";
$error = true;
}
if (!preg_match("#[a-zA-Z]+#", $password)) {
echo "Password must include at least one letter!<br>";
$error = true;
}
if (!$error) {
// insert new users
}
}
}
В PHP конструкциям elseif и ‘else if’ могут потребоваться дополнительные скобки, см. Примечание к http://php.net/manual/en/control-structures.elseif.php
Дополнительно проверьте приоритет оператора. Использование ключевых слов «и» и «или» имеет тот же вес, что и использование «||» или же ‘&&». Я бы рекомендовал добавить дополнительные скобки и скобки, чтобы сделать условия еще более понятными.
Эй, я думаю, что ваша структура немного не так.
<?php include "connection2.php" ?>
<?php
session_start();
if (empty($errors)) {
if(isset($_POST['submitted'])) {$firstname=$_POST['Firstname'];
$lastname=$_POST['Lastname'];
$username=$_POST['Username'];
$password= $_POST['Password'];
$email=$_POST['Email'];if ($username&&$password&&$email)
{
if (strlen($username)>10)
{
echo "Username is too long (Max 10 Characters)";
}
elseif(strlen($password)>15||strlen($password)<5)
{
echo "Password must be 5 to 15 characters<br>";
}
elseif (!preg_match("#[0-9]+#", $password)) {
echo "Password must include at least one number!<br>";
}
elseif (!preg_match("#[a-zA-Z]+#", $password)) {
echo "Password must include at least one letter!<br>";
}
else ((!strlen($username) >10) and
(!strlen($password)>15||!strlen($password)<5) and
(preg_match("#[0-9]+#", $password)) and
(preg_match("#[a-zA-Z]+#", $password)))
{$sql = mysql_query
("INSERT INTO users(firstname, lastname,username, password, email)
VALUES ('$firstname','$lastname','$username',
'$password','$email')");
md5($password);
//register the user!
echo "Your Are Now a Member";}
}
}mysql_close();
}}
else { ?>
<?php }
?>
Надеюсь, это поможет. но я бы также сохранил каждую ошибку в массиве и отобразил в конце.