2016-06-14 329 views
-3

爲什麼我無法登錄到我的index.php頁面,它只是在我的login.php頁面中被刪除。請幫忙。謝謝。PHP登錄無法登錄到index.php

<?php 
session_start(); 

$conn = new PDO('mysql:host = localhost;dbname=userdb','root',''); 

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

$query = $conn->prepare("SELECT COUNT('userID') FROM 'tbl_account' WHERE   'username' = '$username' AND 'password' = '$password' "); 
$query->execute(); 

$count = $query->fetchColoumn(); 

if ($count == 1){ 
    $_SESSION['username'] = $username; 

    header("location : index.php"); 
    exit(); 

}else{ 
    $error = "Your Login Name or Password is invalid"; 
} 

} 

?> 

<html> 
<head> 
    <title>Login</title> 
</head> 

<body> 
    <form action = "?" method = "POST"> 
    <input type = "text" name="username"><br> //username 
    <input type = "password" name = "password"><br> //password 
    <input type = "submit" name = "submit" value = "Login"> /button 
    </form> 
</body> 
</html> 

哪裏可能是我的錯?在我的PDO上?在我準備好的聲明? TIA

+0

自動換行關行情形成的表和列名,而不是使用反引號。並且必須閱讀http://php.net/manual/en/pdostatement.bindparam.php – Saty

+4

我愛你準備好的聲明。 – revo

+0

那個問號呢? – chaoss88

回答

0

1)形式的行動中失蹤。 2)isset($ _ POST ['login'])錯誤的名稱檢查是否存在條件。

3)準備好的語句有很多問題。

嘗試這樣的事情

  <?php 
      session_start(); 

     //db connection 

     global $conn; 

     $servername = "localhost"; //host name 

     $username = "root"; //username 

     $password = ""; //password 

     $mysql_database = "userdb"; //database name 

    //mysqli prepared statement 

     $conn = mysqli_connect($servername, $username, $password) or die("Connection failed: " . mysqli_connect_error()); 

     mysqli_select_db($conn,$mysql_database) or die("Opps some thing went wrong"); 

         if(isset($_POST['submit'])) 
         { 
           $username = $_POST['username']; 
           $password = $_POST['password']; 

           $stmt = $conn->prepare("SELECT * FROM tbl_account WHERE username =? AND password =? "); 
           $stmt->bind_param('ss',$username,$password); 
           $stmt->execute(); 
           $get_result= $stmt->get_result(); 
           $row_count= $get_result->num_rows; 

           $stmt->close(); 
           $conn->close(); 

           if ($row_count>0){ 

            $_SESSION['username'] = $username; 

            header("location:index.php"); 
            exit(); 

           }else{ 
            $error = "Your Login Name or Password is invalid"; 
           } 

         } 


    ?> 



      <html> 
      <head> 
       <title>Login</title> 
      </head> 

      <body> 
       <form action = "login.php" method = "POST"> 
       <input type = "text" name="username"><br> //username 
       <input type = "password" name = "password"><br> //password 
       <input type = "submit" name = "submit" value = "Login"> /button 
       </form> 
      </body> 
      </html> 
+0

我想我會接近。但'$ stmt-> bind_param('ss',$ username,$ password);'有錯誤。 調用第23行C:\ xampp \ htdocs \ Webprog \ Login.php中的布爾成員函數bind_param()@jothi – Batz

+0

可能是您的表名或列有錯誤,這就是爲什麼這個錯誤檢查它。 @Batz – JYoThI

+0

非常感謝先生!這回答了我的問題!希望能幫助我和其他人解決進一步的問題。保持!! :) @ jothi – Batz

-3

嘗試將此代碼更改爲
「SELECT COUNT('userID')FROM'tbl_account'WHERE'username'='$ username'AND'password'='$ password'」);

放分號內的報價,並在外面還有

"SELECT userID FROM tab1_account WHERE username='$username' AND password='$password';"; 
+0

準備好的聲明使用錯了 – Andre

0

你誤用事先準備好的聲明。

你應該寫,

$query = $conn->prepare("SELECT COUNT('userID') FROM REGISTRY WHERE name = ? AND password' = ?"); 
$query->bindParam(':name', $username); 
$query->bindParam(':password', $password); 
$query->execute(); 
$result_rows = $query->fetchColumn(); // get result 

檢查this link瞭解更多詳情。

意見: - 還加退出;標題標記停止執行後續代碼。

+0

還是我的登錄信息。 PHP什麼都不做。 – Batz

0

在調用任何header('location [...]')調用之後使用exit();的語法,您在代碼中忽略了這一點,這可能是您的頁面無法執行任何操作的原因。

另外,我真的很想了解一些安全說明:這到底是什麼?

PDO有預先寫好的功能,可以讓您充分利用與安全連接的動態,可以使用它們;因爲您直接將不可信數據插入到語句中,而不刪除它的注入,因此您的SQL語句存在安全風險。

這裏有一個例子,你可以用它來確保這一點:

class DB extends PDO 
{ 
    function __construct(
     $dsn = 'mysql:host=localhost;dbname=kida', 
     $username = 'root', 
     $password = 'root' 
    ) { 
     try { 
      parent::__construct($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")); 
      parent::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 
    } 

    public function query($statement, array $parameters = array()) 
    { 
     $stmp = parent::Prepare($statement); 
     $i = 1; 
     foreach($parameters as $parameter) { 
      $stmp->bindParam($i, $parameter); 
      $i++; 
     } 
     $stmp->execute(); 
     return $stmp->FetchAll(); 
    } 
} 

$Con = new DB(); 
$username = "example"; 
$row = $Con->query("SELECT * FROM table WHERE username = ?", [$username]); 
+0

已經放了一個exit();但頁面仍然沒有任何作用。 PDO是否是這裏的問題? – Batz

+1

你的錯誤究竟是什麼?你有沒有調試過任何東西?您的表單是否成功發佈了正確的數據?你有沒有連接到數據庫,我看不到try/catch? @Batz – KDOT

+0

我試圖解決的確切錯誤是,當我登錄時沒有任何事情發生,是的,我有我的index.php連接,我把我的簡單註冊。 – Batz