2016-06-14 317 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