2016-01-20 4 views
0

Основы того, что я хочу сделать, это проверить пользовательские значения.Почему php пропускает оператор if?

Если они там возвращаются true и возвращаются на страницу, в противном случае возвращают false и печатают нулевые значения.

$query = sprintf("SELECT * from Users where username = ? and password = ?"); 
$params1 = array($username, $password); 
$stmt = sqlsrv_query($conn, $query, $params1); 
if ($stmt === false) 
{ 
    die(print_r(sqlsrv_errors(), true)); 
} 

$Users = array(); 

while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { 
    $username1 = $row['username']; 
    $password1= $row['password']; 
} 


$Users["username"] = $username1; 
$Users["password"] = $password1; 

//echo json_encode($Users); 
echo "you are here"; 

if ($username1==null) 
{ 
    return false; 
    echo "null values"; 
} 
else { 
    return true; 
    if (!empty($_SERVER['HTTP_REFERER'])) 
     header("Location: ".$_SERVER['HTTP_REFERER']); 
    else 
     echo "No referrer."; 
} 
echo "\n\nyou're at the end though"; 

sqlsrv_free_stmt($stmt); 

sqlsrv_close($conn); 

}  
else { 
    echo "Connection could not be established.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
} 

Как вы можете видеть, я пытаюсь отладить программу и посмотреть, куда идет программа. Доходит до

//echo json_encode($Users); 
echo "you are here"; 

После этого ничего больше не работает, и я не знаю почему.

+0

почему вы используете '' возвращают ложные ; '' или '' true'' в блоке if? – jmattheis

+0

Сделайте себе одолжение и установите xdebug, а затем выполните свой код. Отладка с помощью echo или var_dump становится утомительной быстро и запутывает вашу кодовую базу ненужными заявлениями. – k0pernikus

ответ

5

Непосредственно после работы echo у вас есть:

if ($username1==null) 
{ 
    return false; 
    ... 
} 
else 
{ 
    return true; 
    ... 
} 

... 

Так что ничего после этого не будут выполнены из-за return заявления. Из manual:

Если вызывается из функции, оператор возврата сразу заканчивает выполнение текущей функции и возвращает свой аргумент, как значение вызова функции. return также завершает выполнение инструкции eval() или скрипта.

Если вызывается из глобальной области, то выполнение текущего файла сценария завершено.

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

+0

Есть ли способ перенаправить страницу и вернуть true или false на эту страницу? –

+0

@ EoinÓCribín Конечно, вы можете использовать перенаправление заголовка. Что-то вроде: 'header ('Location: some_page.php? Result = true/false'); выход; '. Если это то, что вы имеете в виду, конечно. – jeroen

+0

, который работает, но я пытаюсь вернуться к странице, которая отправила запрос, в первую очередь, есть ли переменная, которая хранит это? –

1

, прежде чем войти THW в то время как Постулаты вам нужно проверить количество строк, если Постулаты, если его не 0 возвращающие еще вернуть ложное что-то вроде этого

if(sqlsrv_num_rows($stmt) 
{ 
// your code be here 
return true; 
}else{ 
// your code be here 
return false; 
} 

http://php.net/manual/en/function.sqlsrv-num-rows.php

+0

выглядит хорошо! Любая идея, как вернуть true на страницу, которая orignally отправил запрос, чтобы я мог использовать это как переменную? –

+0

Я думаю, что если вы попытаетесь использовать этот код, функция будет хорошей и простой в использовании. Я имею в виду $ result = fucttionname ($ username, $ password); и в этой функции напишите свой код –

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