2013-11-22 21 views
-3

我爲我的網站設置了一個php登錄。我有一個單獨的PHP文件的PHP代碼,我打電話給該PHP文件的表單動作。所有來自html的名稱都與php中的名稱匹配。當我點擊登錄時,無論它是否有任何輸入,它會將我重定向到一個地址爲「mywebsite.com/login.php?username= & password =」的空白頁面。當它迴應用戶名或密碼無效時。這個php登錄碼有什麼問題?

><?php 

session_start(); 
//Creates connection 
$con = mysqli_connect("my info and stuff") or die("Error " . mysqli_error($con)); 
$db = mysqli_select_db($con,"users"); 

if(isset($_POST["Login"])){ 
    $username = mysqli_real_escape_string($connect, $_POST["username"]); 
    $password = mysqli_real_escape_string($connect, CRYPT_MD5($_POST["password"])); 
    $query = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' "); 
    $result = mysqli_query($query); 
    $row = mysqli_num_rows($result); 
    if($row == 1){ 
     session_register("username"); 
     session_register("password"); 
     header("location: profile.php"); 
    } 
    else { 
     echo ("Wrong Username or Password"); 
    } 
} 

?> 

如果使用更有效的方法做出這些,會很感激這些建議。 PHP還很新。

+1

在你的表格你所提到的方法「獲得」,這就是爲什麼它被附加參數網址和發送,但在後端你使用$ _POST []。沒有什麼會在$ _POST []中顯示,因此它不顯示 – Bhadra

+0

您能顯示HTML代碼嗎? –

+0

停止閱讀十年前的PHP教程。每次升級PHP時,您的代碼都會中斷。 –

回答

1

這是probem之一,你試圖兩次執行sql,

$query = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' "); 
$result = mysqli_query($query); 

您已經執行的查詢,使用$查詢變量直接在這裏,

$row = mysqli_num_rows($query); 
+0

那麼它應該顯示一個sql錯誤。它不會顯示任何錯誤,所以它甚至沒有進入這部分代碼。 (實際上這是一個錯誤,但在它之前還有一個錯誤),所以錯誤必須在該行之前 – Bhadra

+0

請參閱我的答案以此爲開頭是其中一個問題......並未聲明它是唯一的錯誤。 –

+0

作爲你的回答是偏離他目前的情況,我想可能會增加一點。我沒有投票給你。我只是添加了一些支持你的情況 – Bhadra

4

這導致當你沒有將你的formmethod屬性值設置爲POST,所以將其設置爲post,使用沒有method屬性將它設置爲GET而不是你的代碼塊wi因爲您使用的是if(isset($_POST['Login']) {},因此沒有Loginisset,您的if條件中的代碼將被跳過。

此外,在您的代碼中有很多問題,您打電話給您的查詢兩次,這不是必需的,不是消毒您的輸入,使用mysqli_real_escape_string()是不夠的考慮學習一些基本知識,並開始使用您的項目。

而且你告訴你是新來的PHP,那麼可以考慮使用PDO代替mysqli_(),比你不必擔心約消毒用戶輸入...

這裏是一個不錯的PDO tutorialhere上手..當然事情會反彈在你的頭上,在第一次嘗試,但不要把它..

+1

這是正確的答案 – Bhadra

+0

Whoever Downvoter先生是,任何理由爲-1? –

+1

DV'd這個答案誰不知道他們在說什麼。這是正確的答案。 – vascowhite

0

變化以下

$query = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' "); 
$result = mysqli_query($query); 
$row = mysqli_num_rows($result); 

$result = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' "); 
$row = mysqli_num_rows($result); 

mysqli_query使用執行查詢

0

它是簡單的登錄例子

<?php 
     //for login.php page 
     session_start(); 

     if(isset($_POST['login'])) 
     { 
     $username=$_REQUEST['username']; 
     $password=$_REQUEST['password']; 
     $password=md5($password); 

    //1st query whish will fetch record and then count tham 
     $query="select * from users where username='$username' and password='$password'"; 
     $rs= mysqli_query($query); 
     @$n=mysqli_num_rows($rs); 
        or 
    //2nd query which will fetch only quantity it is very usefull 
     $query="select count(*) from users where username='$username' and password='$password'"; 
     $n=mysqli_query($query); 


     if($n==1) 
     { 
     $_SESSION['username']=$username; 
     $_SESSION['password']=$password; 
     header("location: profile.php"); 
     } 
     else 
     { 
     echo ("Wrong Username or Password"); 
     } 
     } 
     ?> 


     <?php 
     //for profile.php page 
     session_start(); 
     $username=$_SESSION['username']; 
     $password=$_SESSION['password']; 
     echo $username."<br />".$password; 
     ?>