2016-06-14 5 views
-3

login.php 페이지에 그냥 갇혀있는 index.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의 boolean 함수에서 bind_param() 함수를 호출하십시오. @jothi – Batz

+0

이 테이블 이름이나 열이 잘못되었을 수 있습니다. @ 바츠 – JYoThI

+0

고맙습니다. 선생님! 이것은 나의 질문에 대답했다! 저와 다른 문제를 도울 수 있기를 바랍니다. 그것을 유지! :) @ jothi – Batz

-3


"SELECT COUNT ('userID') FROM 'tbl_account'에서 'username'= '$ username'및 '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 문은 신뢰할 수없는 데이터를 주입을 제거하지 않고 명세서에 직접 삽입하므로 보안 위험이 있습니다.

을 Heres 예를 들어 당신이 보안을 사용할 수 있습니다

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

관련 문제