mysql — оператор if-else strlen не работает Переполнение стека

Я пытаюсь создать рабочую проверку регистрации, однако у меня есть проблема. Проверки работают, но есть ошибка, даже если пользователь вводит правильную информацию, инструкция 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 }
?>

1

Решение

Ваш 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
}
}
}
1

Другие решения

В PHP конструкциям elseif и ‘else if’ могут потребоваться дополнительные скобки, см. Примечание к http://php.net/manual/en/control-structures.elseif.php

Дополнительно проверьте приоритет оператора. Использование ключевых слов «и» и «или» имеет тот же вес, что и использование «||» или же ‘&&». Я бы рекомендовал добавить дополнительные скобки и скобки, чтобы сделать условия еще более понятными.

0

Эй, я думаю, что ваша структура немного не так.

<?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 }
?>

Надеюсь, это поможет. но я бы также сохранил каждую ошибку в массиве и отобразил в конце.

0
По вопросам рекламы [email protected]