Я продолжаю получать сообщение об ошибке использования функции else в PHP

Вот блок PHP, который я использую:

$reg = @$_POST['reg'];

$fn = "";
$ln = "";
$un = "";
$em = "";
$em2 = "";
$pswd = "";
$pswd2 = "";
$d = "";
$u_check = "";

$fn = strip_tags(@$_POST['fname']);
$ln = strip_tags(@$_POST['lname']);
$un = strip_tags(@$_POST['username']);
$em = strip_tags(@$_POST['email']);
$em2 = strip_tags(@$_POST['email2']);
$pswd = strip_tags(@$_POST['password']);
$pswd2 = strip_tags(@$_POST['password2']);
$d = date("Y-m-d"); //Year - Month - Day

if ($reg) {}
if ($em==$em2){}
$u_check = mysql_query("SELECT username FROM users WHERE username='$un'");
$check = mysql_num_rows ($u_check);
if ($check == 0){}
if ($fn&&$ln&&$un&&$em&&$em2&&$pswd&&$pswd2){}
if ($pswd==$pswd2){}
if (strlen($un)>25||strlen($fn)>25||strlen($ln)>25){
echo "The maximum amount of character is 25! Please try again";
}
else
{
if (strlen($pswd)>30||strlen($pswd)<5){}
echo "Your password be between 5 and 30 characters long!";
}
else
{
$pswd = md5($pswd);
$pswd2 = md5($pswd2);
$query = mysql_query("INSERT INTO users VALUES (' ', '$un', '$fn', '$ln',   
'$em','$pswd','$d','0')");
}

И вот два других утверждения:

else
{
if (strlen($pswd)>30||strlen($pswd)<5){}
echo "Your password be between 5 and 30 characters long!";
}
else
{
$pswd = md5($pswd);
$pswd2 = md5($pswd2);
$query = mysql_query("INSERT INTO users VALUES (' ', '$un', '$fn', '$ln',   
'$em','$pswd','$d','0')");
}

Когда у меня есть только:

else
{
if (strlen($pswd)>30||strlen($pswd)<5){}
echo "Your password be between 5 and 30 characters long!";
}

Я не получаю сообщение об ошибке, но когда я добавляю:

else
{
$pswd = md5($pswd);
$pswd2 = md5($pswd2);
$query = mysql_query("INSERT INTO users VALUES (' ', '$un', '$fn', '$ln', '$em','$pswd','$d','0')");
}

Я получаю это сообщение об ошибке при обновлении:

Ошибка анализа: синтаксическая ошибка, неожиданное "else" (T_ELSE) в C:\xampp\htdocs\Socially\index.php в строке 39

Я использую учебник YouTube, и вот что он набрал, он не получил сообщение об ошибке. Вот ссылка: https://www.youtube.com/watch?v=EgqVNMTnmDQ&list=PLA7F9875BD031DC16&index=36

Это видео было сделано в 2013 году.

Если кто-то может мне помочь, это будет оценено.

Ответы

Ответ 1

Ваш if ошибочен, { открывает блок управления, а } закрывает его. Например:

if (strlen($pswd)>30||strlen($pswd)<5){}

Вы ничего не делаете, когда пароль длиннее 30 символов или меньше 5. (также зачем ограничивать пароли до 30 символов?)

Затем вы также эхом отзываете сообщение независимо от этого условия:

echo "Your password be between 5 and 30 characters long!";

Дополнительные примечания:

Ваши блоки управления должны быть отступом.

Вы не должны помещать пользовательские данные непосредственно в SQL-запрос. Так происходит инъекция. strip_tags не делает ничего, чтобы остановить SQL-инъекцию.

Try:

<?php
$reg = @$_POST['reg'];
$fn = "";
$ln = "";
$un = "";
$em = "";
$em2 = "";
$pswd = "";
$pswd2 = "";
$d = "";
$u_check = "";
$fn = strip_tags(@$_POST['fname']);//dont use @, no need for error supression, resolve the errors.
$ln = strip_tags(@$_POST['lname']);
$un = strip_tags(@$_POST['username']);
$em = strip_tags(@$_POST['email']);
$em2 = strip_tags(@$_POST['email2']);
$pswd = strip_tags(@$_POST['password']);
$pswd2 = strip_tags(@$_POST['password2']);
$d = date("Y-m-d"); //Year - Month - Day
if ($reg) {}//does nothing
if ($em==$em2){}//does nothing
$u_check = mysql_query("SELECT username FROM users WHERE username='$un'");
$check = mysql_num_rows ($u_check);
if ($check == 0){}//does nothing
if ($fn&&$ln&&$un&&$em&&$em2&&$pswd&&$pswd2){}//does nothing
if ($pswd==$pswd2){}//does nothing
if (strlen($un)>25||strlen($fn)>25||strlen($ln)>25){
    echo "The maximum amount of character is 25! Please try again";
} else {
    if (strlen($pswd)>30||strlen($pswd)<5){
        echo "Your password be between 5 and 30 characters long!";
    } else {
        $pswd = md5($pswd); //should upgrade hashing algorithm
        $pswd2 = md5($pswd2);//not used
        $query = mysql_query("INSERT INTO users VALUES (' ', '$un', '$fn', '$ln',   
        '$em','$pswd','$d','0')");//open to SQL injections
    }
}