2016-12-16 16 views
-3

私はPDOでサインインしようとしていますが、私は傾けません。私は古いデータベース接続を試しているときに動作しますが、PDOでは動作しません。私は正確に問題がどこにあるのか理解できません。接続はOKですが、コードは他のページに移動していません。電子メールとパスワードは正しいです。下記のメールを参照してください。php PDOサインインが機能しないのはなぜですか?

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=social", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    //echo "Connected successfully"; 
    } 
catch(PDOException $e) 
    { 
    echo "Connection failed: " . $e->getMessage(); 
    } 

class UserLogin { 

    public $id; 
    public $first; 
    public $last; 
    public $email; 
    public $password; 

    function Login(){ 
     global $conn; 
     $this->email = $_POST['user_email']; 
     $this->password = $_POST['user_email']; 
     $sql = $conn->prepare("SELECT * FROM scusers WHERE scemail =? AND scpass =?"); 
     $sql->execute(array($this->email, $this->password)); 
     while($row = $sql->fetch(PDO::FETCH_ASSOC)){ 
      $this->email = $row['scemail']; 
      $this->password = $row['scpass']; 
     } 

    } 

} 

<?php 
//print_r($_POST); 
if(isset($_POST['user_email']) && isset($_POST['user_password'])){ 
    $login = new UserLogin(); 
    $login->email = $_POST['user_email']; 
    $login->password = $_POST['user_password']; 
    if($login->Login()){ 
     header("Location:home.php"); 
    }else{ 
     echo "Negative"; 
    } 
} 
?> 
    <body> 
<header> 

      <form action="#" method="post"> 
       <div class="col-sm-6"> 
        <div class="row"> 
         <div class="col-sm-5"> 
          <div class="form-group"> 
           <input name="user_email" type="text" class="form-control" placeholder="Email Address"> 
           <div class="login-bottom-text checkbox"> 
            <label> 
             <input type="checkbox" id=""> 

            </label> 
           </div> 
          </div> 
         </div> 
         <div class="col-sm-5"> 
          <div class="form-group"> 
           <input name="user_password" type="text" class="form-control" placeholder="Password"> 
           <div class="login-bottom-text"><a class="bottom-txt" href="recover_password.php">Forgot your password?</a></div> 
          </div> 
         </div> 
         <div class="col-sm-2"> 
          <div class="form-group"> 
           <button type="submit" value=" Send" class="btn btn-default" id="submit">login</button> 
          </div> 
         </div> 
        </div> 
       </div> 
      </form> 
+3

'Login()'メソッドには 'return'ステートメントがありません。 –

+2

と 'ログイン'に '$ this-> password'に' $ _POST ['user_email'] 'を割り当てます。 – Jeff

答えて

0

Login()メソッドにはreturn文がありません。 returnステートメント関数がなければNULLを返します。 NULLと考えられていますfalsyです。それはいくつかのtruthy値、少なくともこのよう返しますので、だから、Login()方法を変更します。メソッドのログインが何も返さないので、このコードブロックは、常に「負」エコーされます

function Login(){ 
    $user_found = false; 

    global $conn; 
    $this->email = $_POST['user_email']; 
    $this->password = $_POST['user_email']; // is it? 
    $sql = $conn->prepare("SELECT * FROM scusers WHERE scemail =? AND scpass =?"); 
    $sql->execute(array($this->email, $this->password)); 
    while ($row = $sql->fetch(PDO::FETCH_ASSOC)){ 
     $this->email = $row['scemail']; 
     $this->password = $row['scpass']; 

     $user_found = true; 
    } 

    return $user_found; 
} 
+0

まさに、愚かな間違いです。本当に疲れた –

1

if($login->Login()){ 
     header("Location:home.php"); 
    }else{ 
     echo "Negative"; 
    } 

データベース内の行を見つける場合はtrueを返します。

関連する問題