2013-11-24 54 views
0

試圖做一個登錄頁面。我沒有收到任何錯誤或任何迴應,我應該只是點擊登錄按鈕時再次刷新頁面。PHP登錄只是刷新

連接

<?php 

class Connection{  

    public function dbConnect(){ 

     $db_host = ""; 
     $db_username = ""; 
     $db_password = ""; 
     $db_name = ""; 

     try{ 
     $db = new PDO('mysql:host='.$db_host.';dbname='.$db_name , $db_username , $db_password); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
     //This is just to test if connection was succesfull.  
     echo "Success!"; 
     } 
     catch(PDOException $e){ 
     echo "Server Error: ".$e->getMessage()."". "Unable to connect to server."; 
     } 
     return $db; 
    } 
} 
?> 

用戶

<?php 

include_once("connection.php"); 

class Users{ 

     private $db; 

    public function __construct(){ 

     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
    } 

    public function Login($username, $password){ 

     if(!empty($username) && !empty($password)){ 

      $stmt = $this->db->prepare("SELECT * FROM users WHERE username= ? AND password= ?"); 
      $stmt->bindParam(1,$username); 
      $stmt->bindParam(2,$password); 
      $stmt->execute(); 

      if($stmt->rowCount() == 1){ 
      echo "Successfully logged in!"; 
      }else{ 
      echo "Incorrect username or password please try again."; 
      }   

     }else{ 
      echo"Must type a username and password to login."; 
     } 
    } 
} 
?> 

這是登錄頁面的實際形式是。我有一個簡短的PHP代碼在整個HTML的頂部。

<?php 

include_once("login.php"); 

if(isset($_POST["submit"])){ 

    $username = $_POST["username"]; 
    $password = $_POST["password"]; 
    $user = new User(); 
    $user->Login($username, $password); 
} 
?> 

這裏是實際的組成部分:

<form method ="post" action="index.php"> 
<input class="classname2" type="text" placeholder="Username" name="username"><br><br> 
<input class="classname2" type="password" placeholder="Password" name="password"><br><br> 
<input class="classname" type="submit" value="Login" ><br><br> 
<input class="classname" type="submit" value="SignUp" formaction="signup.php"> 
</form> 

好了,所以現在它添加名稱登錄按鈕後,有些工作。現在查詢或者出錯了。我改變了如果rowCount()== 1,因爲頭(「位置:...」)給我一個會發生什麼:警告:無法修改頭信息 - 頭已經發送(輸出開始在/ home/content/49/11554349/html/gb/dev/connection.php:15)在第25行的/home/content/49/11554349/html/gb/dev/login.php中。並且我也將它更改爲echo成功登錄,因爲它仍然在運行該部分代碼,即使我爲該用戶名輸入了錯誤的密碼。

+0

您沒有表單字段'name ='submit'',所以'$ _POST ['submit']'永遠不會被設置。爲登錄按鈕添加一個'name ='submit''屬性。 –

+0

這個問題肯定解決了問題的一部分,現在查詢被搞砸了,或者它仍然在運行代碼,如果密碼錯誤並且標題彈出警告 – ljrod95

+0

此代碼意味着您以純文本形式存儲密碼(無聲, unhashed)這是非常糟糕的。如果你實際上在存儲之前對它們進行了散列處理,則不會相應地對輸入密碼進行散列測試。 –

回答

1

您應該爲您的提交輸入名稱。例如: - name="submit"

<input class="classname" name="submit" type="submit" value="SignUp" formaction="signup.php"> 

當您使用if(isset($_POST['submit']))你的名字的_POST這個數組中檢查。

1

嘗試使用,新增name="submit"屬性在<input/>標籤

<input class="classname" name="submit" type="submit" value="Login" ><br><br> 

代替

<input class="classname" type="submit" value="Login" ><br><br> 
1

你似乎並不具備所謂的 「提交」 到參考的任何數據。我通常檢查$ _POST數組的大小(因爲isset不起作用,因爲它通常是一個空數組)。

if (sizeof($_POST) != 0) { 
    // .... 
} 

它看起來像正在處理,現在關你的登錄代碼,因爲沒有$ _ POST [「提交」。