2014-01-26 215 views
1

我有一個「設置密碼」網站,您可以在此設置密碼,但前提是您目前沒有密碼。因此,我有一個SQL查詢,只有當電子郵件與數據庫中的電子郵件匹配且密碼爲NULL時,纔會選擇我們將使用的用戶名和密碼。如果這個返回false,那麼PHP腳本不應該做任何其他回聲「密碼或用戶名無效」。它也做其他事情,比如檢查密碼的長度以及它是否被確認,但是這是一個混亂的問題。有什麼想法嗎?即使返回false,SQL也會返回true

這是我的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 
} 
相關問題