2014-01-26 5 views
1

У меня есть сайт «установить пароль», где вы можете установить пароль, только если у вас его нет. Поэтому у меня есть SQL-запрос, который выбирает имя пользователя и пароль, с которыми мы будем работать, только если адрес электронной почты совпадает с адресом в базе данных, а пароль - NULL. Если этот возвращает false, PHP-скрипт не должен делать ничего, кроме echo «Пароль или имя пользователя недействительны». Он также выполняет другие действия, такие как проверка длины пароля, и если это было подтверждено, но это тот, который запутывается. Есть предположения?SQL возвращает true, даже если должен возвращать false

Это мой PHP-код до сих пор:

<?php 
session_start(); 
require 'connect.inc.php'; 
include 'core.php'; 
ob_start(); 
?> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<?php 
echo " 
      <form action='update.php' method='post'> 
      Ange din E-post.<br> 
      E-post: <input type='text' name='mail' /><br> 
      Ange ditt lösenord, minst sex tecken.<br> 
      Lösenord: <input type='password' name='pass1' /><br> 
      Bekräfta: <input type='password' name='pass2' /><br> 
      <input type='submit' value='Godkänn'/><br>"; 

if(isset($_POST['pass1'])&&isset($_POST['pass2'])) 
      { 

       $email = $_POST['mail']; 
       $query = "SELECT login_id, pass FROM users WHERE (email = '$email') AND (pass IS NULL)"; 
       $query_run = sqlsrv_query($link, $query); 



       if(($_POST['pass1'] == $_POST['pass2']) && !empty($_POST['pass2']) && $query_run && (strlen($_POST['pass2'])>5)) 
       { 
        $row = sqlsrv_fetch_array($query_run, SQLSRV_FETCH_ASSOC); 

        $id = $row['login_id']; 
        $_SESSION['id'] = $id; 

        $pass = $_POST['pass1']; 

        $query2 = "UPDATE users SET pass = '$pass' WHERE login_id = '$id'"; 
        sqlsrv_query($link, $query2); 

        $next = "https://localhost/title_choice.php"; 
        header('Location: '.$next); 
       }else 
       { 
        echo "Lösenorden matchar ej, eller E-post ogiltig! Var god ange dem igen!"; 
       } 
      } 

ob_end_flush(); 
?> 
+0

Просто потому, что SQL-запрос не возвращает ни одной строки, не означает, что она не смогла, так что '$ query_run' еще будет правда ... Вы должны проверить количество строки возвращены –

+0

Спасибо! Исправлено с помощью sqlsrv_has_rows! – pimmen

ответ

2

Похоже, что вы делаете проверки, если запрос побежал. В этом заявлении будет проверяться, был ли запрос запущен:

if(($_POST['pass1'] == $_POST['pass2']) && !empty($_POST['pass2']) && $query_run && (strlen($_POST['pass2'])>5)) 

Вместо этого вы должны проверить, не возвращает ли запрос ничего. Вы можете использовать sqlsrv_has_rows так:

$rows = sqlsrv_has_rows($query_run); 
if(($_POST['pass1'] == $_POST['pass2']) && !empty($_POST['pass2']) && $rows && (strlen($_POST['pass2'])>5)) 
{ 
    //rest of your code here 
} 
else{ 
    //no rows returned 
} 
Смежные вопросы