2014-04-24 67 views
0

我想在PHP中創建一個登錄表單。我傳遞用戶輸入的用戶名和密碼,並檢查數據庫中存在的天氣。Mysql查詢IFEXIST不返回任何結果

我已經完成了編碼,但IF EXIST查詢不返回任何結果。

任何人都可以幫助我解決這個問題。或給我一個替代的想法..謝謝...

 <?php 

     $name= $_POST["usname"]; 
     $pass = $_POST ["password"]; 

     $connection = mysqli_connect("localhost","sathya","sathya","learning1"); 
     //mysqli_query($connection,"INSERT INTO user (name, password) VALUES ('".$name."', '".$pass."')"); 
     $result = mysqli_query($connection, "IF EXISTS(SELECT * FROM user WHERE name='".$name."'AND password='".$pass."')"); 
     mysqli_close($connection); 

     echo "result ".$result; 

     if($result == True){ 

      header("Location: logedin.php"); 
      //redirect_to('logedin.php'); 
     }else{ 

      echo "not logged in installed"; 
     } 


     ?> 
+0

你閉上你的連接。 – user3517652

+0

我試圖不關閉連接,它不起作用。 –

+0

「IF EXISTS」沒有,只有'SELECT IF ...' –

回答

1

我不能說任何關於PHP部分,但查詢肯定會導致語法錯誤。

IF whatever ...只能在存儲過程或函數中使用,而不能在單個查詢中使用。但是,您可以替換IFSELECT

$result = mysqli_query($connection, "SELECT EXISTS(SELECT * FROM user WHERE name='".$name."'AND password='".$pass."')"); 

該查詢將返回0(如果不存在該條目)或1(如果條目存在)。使用EXISTS也是一個好主意,因爲只要找到條目就會停止查詢,並且不會返回整個數據集。

1

你可以試試這個用旁邊的「IF存在」 function--

$result = mysqli_query($connection, "SELECT * FROM user WHERE name='".$name."'AND password='".$pass."'"); 



$count=mysql_num_rows($result); 
if($count==1) // $count=1 if any row is present with mathing username and pwd in db 
{ 
    echo "user already logged in"; 
} 
else 
{ 
    echo "user not exist"; 
} 
+0

你選擇一切只是爲了計算結果後,看看是否至少有一個條目? LOL – fancyPants

+0

這個'mysql_num_rows'應該是'mysqli_num_rows' ---你不能混用兩個不同的MySQL API。 –

4

這是一個遲到的回答,但有你需要意識到的一些事情。 (不接受已接受的答案)。

您將需要使用if(mysqli_num_rows($result) > 0),因爲如果用戶名匹配且密碼不爲,則查詢將始終爲TRUE,反之亦然。

您最好使用mysqli_num_rows()而不是使用if($result == True)

旁註:諮詢我關於密碼的存儲和SQL注入腳註。

<?php 
$DB_HOST = "xxx"; 
$DB_NAME = "xxx"; 
$DB_PASS = "xxx"; 
$DB_USER = "xxx"; 

$db = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); 
    if($db->connect_errno > 0) { 
     die('Connection failed [' . $db->connect_error . ']'); 
    } 

$name = $_POST["usname"]; // See footnotes about this 
$pass = $_POST ["password"]; // See footnotes about this 

$result = mysqli_query($db, "SELECT EXISTS(SELECT * FROM users WHERE username='".$name."' AND password='".$pass."')"); 

// Works just as well 
// $result = mysqli_query($db, "SELECT * FROM users WHERE username='".$name."' AND password='".$pass."'"); 

    if(mysqli_num_rows($result) > 0){ 
    echo "Both match."; 
    } 

    else{ 
    echo "Sorry, there was not a perfect match."; 
    } 

腳註:

您還可以使用:

$result = mysqli_query($db, "SELECT * FROM users WHERE username='".$name."' AND password='".$pass."'"); 

同時使用更少的字符,確實爲SELECT EXISTS(SELECT *相同。

或選擇的實際列:

$result = mysqli_query($db, "SELECT username, password FROM users WHERE username='".$name."' AND password='".$pass."'"); 

我建議你使用準備好的語句和淨化你的投入。不這樣做會使您打開SQL injection

這裏是(mysqli的)準備語句的一些教程,你可以學習和嘗試:

這裏有PDO一些教程:


密碼

我也注意到,您採用明文存儲密碼。這不被推薦。下面的

用途之一:

其他鏈接: