2011-10-13 36 views
0

因此,我的研究讓我感到這個小問題。 (一直進入php爲一個堅實的一個月,所以我道歉,如果我不完全清楚)匹配數據庫中的所有值的表單值

我有一個小的表格組成的用戶名和通行證。

<form method="post" action="proc.php"> 
     <table> 
     <tr> 
      <td>Username:</td> 
      <td><input type="text" name="user" id="user"></td> 
     </tr> 
     <tr> 
      <td>password:</td> 
      <td><input type="text" name="password" id="password"></td> 
     </tr> 
      <tr> 
      <td></td> 
      <td><input type="submit" value="submit"></td> 

     </tr> 

</table> 
</form> 

我在db列中有相應的值。

即時嘗試要做的是,即時嘗試檢查所輸入的名稱在表單字段與數據庫列的期望值。

所以當我做這個測試在DB只是一個值(第一個值正弦其不循環),它的工作原理,讓我在:

$dbq = "SELECT * FROM accounts;"; 
    $dbqDoIt = mysqli_query($connect2db, $dbq)or die("error".mysqli_error($connect2db)); 

    $getNames = mysqli_fetch_array($dbqDoIt); 


    //check if user acc. exists inside vSpot database. 
    if(($name !== $getNames['username']) || ($pass !== $getNames['password'])){ 
     header("Location:index.php"); /* Redirect browser */ 

測試我的while循環... (導致即時新的大聲笑),當我這樣做:

$nums = array(1,2,3,4,5); 

for($i=0; $i<6; $i++){ 
    if($nums[0] < 6) echo $i . '<br/>'; 
} 

它的工作原理和列出數字1-5。

現在,當我嘗試通過數據庫名稱/通過循環,它不起作用。 像這樣:

while($getNames = mysqli_fetch_array($dbqDoIt)){ 
    //check if user acc. exists inside my database. 
    if(($name !== $getNames['username']) || ($pass !== $getNames['password'])){ 
     header("Location:index.php"); /* Redirect them to log in */ 

     } 

    } 

任何想法,爲什麼它不檢查,對所有的值?即時消息確定我錯過了什麼大聲笑。

任何提示,建議等不愉快欣賞。 謝謝你advace

somdow。

+1

客戶端篩選...啊...你應該閱讀約佔['哪裏'](http://en.wikipedia.org/wiki/Where_%28SQL%29)SQL查詢中的子句。 –

+1

除非我錯過了一些東西,不應該使用一個簡單的'WHERE username ='$ username''爲你工作嗎? – jprofitt

回答

3

你不需要(而你不應該)從數據庫表中獲取所有數據並遍歷所有結果以進行這種檢查。爲什麼?

  • 這是緩慢和資源消耗
  • 這不是很安全
  • 數據庫引擎更好的搜索的東西在數據庫
  • 在大型數據庫(他們對這種任務的提出)您可能會填充所​​有允許的內存以執行PHP腳本(這會返回錯誤)。

嘗試一個更具體的SQL,並使用你的數據庫引擎功能,爲你自己好,就像這樣:

$query = "SELECT user_id FROM accounts WHERE username = :username"; 
1

而不是返回所有的帳戶,你應該限制你的結果。

$dbq = "SELECT * FROM accounts WHERE username = '$name';"; 

,然後看看如果返回的結果爲空如果沒有的話對證查詢返回的的密碼。

編輯: 嘿我不會加入爲什麼你不應該做的事情,OP不知道他可以做,因爲我知道比他更好....所以,你應該再檢查SQL如果你打算把輸入的文字加入到你的查詢中(希望增加更多的內容並重現以前的答案,也許我會得到更多的讚賞)。

相關問題