Программа PHP отрицает функцию? - PullRequest
0 голосов
/ 25 сентября 2011

Итак, в основном я настроил очень простой и общий вход в систему. Я скопировал весь код и вставил его, потому что, возможно, это важно как-то.Однако -

$user = mysql_real_escape_string($_POST['User']);
$pass = mysql_real_escape_string(md5($_POST['Pass']));
$conn = mysql_connect("localhost", "root") or die(mysql_error());
(mysql_select_db('fireworks', $conn));
$ask = "SELECT * FROM name WHERE (User = '" . $user . "') and (Pass = '" . $pass . "');";
$result = mysql_query($ask);

Сегмент кода ниже полностью игнорируется!Когда я нажимаю войти (со страницы индекса), я предполагаю, чтобы выполнить серию проверок.Если пользователь решает не помещать что-либо внутри текстовых полей пользователя и пароля, то предполагается вернуть строку, показанную ниже:

if (strlen($user) < 1){
    if (strlen($pass) < 1){
        print "<p class = 'Back'>Epic Fail</p>";
        print "<p>You forgot to put in your Username or Password.</p>";
    }
}

(^ До здесь), но это не так.Вместо этого это просто пустая страница.Но все остальное работает отлично.Если я ввожу фальшивого пользователя, то он возвращает "ВЫ НЕ УДАЛЕНЫ!"Если я ввожу действительного пользователя, он возвращает «ДОБРО ПОЖАЛОВАТЬ».

if (strlen($user) >= 1){
    if (mysql_num_rows($result) >= 1) {
        while ($row = mysql_fetch_array($result))
        {
            print "<p class='Back'>Welcome back</p><p>" . $row['User'] . "</p>";
        }
    }else{
        print "YOU FAIL!!!";
    }
}

Есть предложения?ДОПОЛНИТЕЛЬНЫЕ ЗАМЕЧАНИЯ: База данных называется фейерверком, таблица называется именем. В таблице имен есть три столбца.nameID, User и Pass.(Иду, как это полезно, но иногда это так.)

Ответы [ 4 ]

2 голосов
/ 26 сентября 2011

Ваш код:

if (strlen($user) < 1){
if (strlen($pass) < 1){
print "<p>You forgot to put in your Username or Password.</p>";
}
}

На самом деле, это не проверяет, является ли $user или $pass пустым; сообщение об ошибке выдается только в том случае, если оба значения пустые.

Каждый тест в порядке сам по себе, но, как написано, тест для $pass будет выполняться, только если тест $user уже дал результат true.

Вам нужно написать их вместе с условием or, например:

if (strlen($user) < 1 or strlen($pass) < 1){
....
}

Надеюсь, это поможет.

1 голос
/ 25 сентября 2011

попробуйте это:

if (strlen($user) < 1 || strlen($pass) < 1){ .... }
0 голосов
/ 26 сентября 2011

В документации mysql_real_escape_string говорится, что он попытается подключиться к базе данных для набора символов.Если перед проверкой вы вообще не подключались к базе данных, это вполне может иметь место.Вы можете проверить, есть ли сообщение об ошибке, чтобы узнать, вернулась ли ошибка уровня E_WARNING.

Другое дело, что вы должны избегать вызовов базы данных, когда это не нужно.Если это вся часть важного кода, вы должны вызвать обе проверки, прежде чем пытаться их избежать и продолжить работу с базой данных.Также вам может помочь функция empty().

if(!empty($_POST['User']) || trim(strlen($_POST['User'])) < 1) {
 // database stuff
}
0 голосов
/ 26 сентября 2011

Вы вкладываете ifs, поэтому «Epic Fail» отображается только тогда, когда имя пользователя и пароль не введены.

Возможно, вы захотите изменить это на:

if (strlen($user) < 1 || strlen($pass) < 1)
{
    print "<p class = 'Back'>Notice</p>";
    print "<p>You forgot to put in your Username or Password.</p>";

}
...