2015-03-17 2 views
-4

Я написал код PHP со многими вложенными if условиями. Я просто хочу показать предупреждение для исключительного состояния вместе с условиями if.Как сделать условие else в PHP?

Вот мой исходный код:

$username = $_POST['username']; 
$password = $_POST['password']; 

if (!empty($username) && !empty($password)) { 
    $query ="SELECT * FROM user where username='.$username.' AND pass='.$password.'"; 

    $row = mysql_fetch_array($query); 
    $counted = mysql_num_rows($query); 

    if (($counted === 1) && 
     ($row['username'] === $username) && 
     ($row['password'] === $password)) 
    { 
     session_destroy(); 
     session_start(); 
     echo "message"; 
    } else { 
     do_alert("Exceptional alert"); 
    } 
} else { 
    do_alert("Exceptional alert"); 
} 

Эти два условия остальное не работают. Я не знаю, где моя ошибка.

+2

@lolka Есть два вложенных 'if', что едва ли очевидно из-за ** отсутствия отступа ** (* подсказка подсказки Devarajan *). – deceze

+1

У вас есть ошибки на этом? Какие результаты вы получаете? – h00ligan

+1

не работает не совсем понятно. Далее, возможно, вам следует также санкционировать и защитить свои переменные. Кроме того, у вас нет запроса, поэтому, конечно, вы не получите ничего в этой части. Если я, может быть, так смел, что это за 'do_alert', что у вас есть? (предполагая, что это функция) – Dorvalla

ответ

1

Я думаю, что это может иметь отношение к вашему do_alert в вашем коде. Следуйте за мной через код.

$username = $_POST['username']; 
$password = $_POST['password']; 

if (!empty($username) && !empty($password)) { // if not empty 
    $query ="";        // this is an empty query 
    $row = mysql_fetch_array($query);   // returns nada 
    $counted = mysql_num_rows($query);   // gives nada back 

    if (($counted === 1) && ($row['username'] === $username) && ($row['password'] === $password)) {    // completely useless at this point cause no row is returned 

     session_destroy(); 
     session_start(); 
     echo "message";       

    } else {         // this will not be executed 
     do_alert("Exceptional alert");  
    } 

} else {          // this will be executed 
    do_alert("Exceptional alert");   // where is this function defined? 
} 

ОК, я прокомментировал ваш код, где он идет не так. Как вы видите, это происходит уже на первом, если так, то он должен вернуть последнее. Поскольку я не знаю, где ваш код do_alert определен, я предполагаю, что это ваша ошибка.

Попробуйте заменить его первым эхом следующим образом: echo "I am a super duper evil monkey"; и посмотрите, работает ли это.

редактировать

, так как вы добавили свой запрос прямо сейчас, я бы хотел отметить, как хорошо, что вы должны дезинфицировать ваш вклад. Это сделает его более безопасным. Однако термин «безопасный» здесь является разновидностью irralevant, потому что вы используете устаревший набор mysql. (mysqli/pdo есть способы, чтобы пойти в настоящее время)

$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string($_POST['password']); 

почему? просто. Посмотри на это!

$_POST['username'] = 'awesome'; 
$_POST['password'] = "' OR ''='"; 

было бы что-то похожее на это.

SELECT * FROM users WHERE user='awesome' AND password='' OR ''='' 

И это будет означать, что каждый может войти в систему, поскольку пустое значение всегда пусто. Так же, как хэдшоп.

Более подробная информация здесь: http://php.net/manual/en/function.mysql-real-escape-string.php

редактировать 2

// very first thing you do if you work with sessions, is actually starting it. you dont do this in your if else statement, cause you could not benefit of the session variable on a later stage on this page. 

session_start(); 

// these variables come from a form with a form name, so we are going to do a check if indeed this came from that form. 


$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string($_POST['password']); 

if (!empty($username) && 
    !empty($password)) { 
    $query ="SELECT name, password FROM user WHERE name='".$username."' AND password = '".$password."'"; 
    $row = mysql_fetch_array($query);   
    $counted = mysql_num_rows($query);   

    if (($counted === 1) && 
     ($row['username'] === $username) && 
     ($row['password'] === $password)) {     

     echo "message";       
    } else {         
     echo "no entrees found";  
    } 
} else {          
    echo "failed to input some variable";  
} 

Я очистил некоторые в своих собственных словах, возможно, придется возиться с запросом, и в дальнейшем я установил ее немного, так как вы не использовали сеанс соответственно.

Теперь, когда это сообщение эха, вы должны установить переменную сеанса, которую вы можете уничтожить позже, когда вы выходите из системы. Переменная сеанса, которую вы можете вызвать в самом сеансе, на каждой странице, на которой есть sessionstart(). Здесь вы можете проверить, не возбуждает ли он, если да, то вы вошли в систему. Надеюсь, это поможет вам.

+0

function do_alert ($ msg) { echo ' '; } –

+0

вот моя функция do_alert –

+0

почему опасные очки! pls –

Смежные вопросы