2016-10-24 117 views
1

這就是我的課:PHP的重定向不起作用

public function is_admin() { 

    try { 
    $admin = $this->db->prepare("SELECT * FROM users WHERE user_name = 'admin' AND user_pass='123456'"); 
    $admin->execute(); 
     if ($admin->rowCount() > 0) { 
      return header("Location: admin.php"); 


     }else { 
      return false; 
     } 
    } catch (PDOException $e) { 
     echo $e->getMessage(); 
    } 
} 

public function login($uname, $umail, $upass) { 
    try { 
     $stmt = $this->db->prepare("SELECT * FROM users WHERE user_name=:uname AND user_email=:umail LIMIT 1"); 
     $stmt->execute(array(':uname' => $uname, ':umail' => $umail)); 
     $userRow = $stmt->fetch(PDO::FETCH_ASSOC); 
     if ($stmt->rowCount() > 0) { 
      if (password_verify($upass, $userRow['user_pass'])) { 
       $_SESSION['user_session'] = $userRow['user_id']; 
       return header("Location: home.php"); 
      } else { 
       return false; 
      } 
     } 
    } catch (PDOException $e) { 
     echo $e->getMessage(); 
    } 
}` 

的login.php

require 'app' . DIRECTORY_SEPARATOR . 'connection.php'; 
    $test = new USER($DB_con); 

    if (isset($_POST['submit'])) { 
     $uname = $test->validate($_POST['uname']); 
     $umail = $test->validate($_POST['email']); 
     $upass = $test->validate($_POST['password']); 
     $test->login($uname, $umail, $upass); 

    } 

,我不知道如何與管理功能總是重定向連接到home.php 和我不會重定向到不同頁面 用戶必須重定向到主頁 管理員必須重定向到管理頁面

+0

按[php手冊](h ttp://php.net/manual/en/function.header.php)header return void因此替換'return true;'而不是'return header(「Location:home.php」);' – asissuthar

+0

非常感謝。 但是我如何檢查重定向現在沒有得到任何東西 – Darina

+0

你會做'if($ test-> login($ uname,$ umail,$ upass))header(...);' – krasipenkov

回答

1

你可以只是做一個檢查裏面的登錄方法,並相應地重定向...

<?php 

    class USER{ 

     protected $userIsAdmin = false; 

     /* NO NEED FOR THIS FUNCTION. 
     * SINCE ADMIN IS ALSO A USER, YOU CAN LOGIN THE USER 
     * USING THE LOGIN METHOD AND THEN CHECK IF THE SUPPLIED CREDENTIALS 
     * MATCH THOSE OF THE ADMIN... NO NEED FOR SEPARATE SQL QUERY 
     */ 

     /* 
     public function is_admin() { 
      try { 
       $admin = $this->db->prepare("SELECT * FROM users WHERE user_name = 'admin' AND user_pass='123456'"); 
       $admin->execute(); 
       if ($admin->rowCount() > 0) { 
        return header("Location: admin.php"); 


       }else { 
        return false; 
       } 
      } catch (PDOException $e) { 
       echo $e->getMessage(); 
      } 
     } 
     */ 


     public function user_is_admin() { 
      return $this->userIsAdmin; 
     } 

     public function login($uname, $umail, $upass) { 
      try { 
       $stmt = $this->db->prepare("SELECT * FROM users WHERE user_name=:uname AND user_email=:umail LIMIT 1"); 
       $stmt->execute(array(':uname' => $uname, ':umail' => $umail)); 
       $userRow = $stmt->fetch(PDO::FETCH_ASSOC); 
       if ($stmt->rowCount() > 0) { 
        if (password_verify($upass, $userRow['user_pass'])) { 
         $_SESSION['user_session'] = $userRow['user_id']; 
         // HERE YOU CHECK IF THE LOGGED-IN USER IS ADMIN 
         // IF ADMIN, REDIRECT TO ADMIN PAGE 
         // ELSE REDIRECT TO HOME PAGE 
         if($uname == "admin"){ //<== YOU MAY ADD OTHER CONDITIONS HERE AS WELL... 
          // SET $this->userIsAdmin TO TRUE & REDIRECT 
          $this->userIsAdmin = true; 
          header("Location: admin.php"); 
          exit; 
         } 
         header("Location: home.php"); 
         exit; 
        } else { 
         return false; 
        } 
       } 
      } catch (PDOException $e) { 
       echo $e->getMessage(); 
      } 
     } 
    } 

    require 'app' . DIRECTORY_SEPARATOR . 'connection.php'; 
    $test = new USER($DB_con); 

    if (isset($_POST['submit'])) { 
     $uname = $test->validate($_POST['uname']); 
     $umail = $test->validate($_POST['email']); 
     $upass = $test->validate($_POST['password']); 
     $test->login($uname, $umail, $upass);  
    } 
+0

非常感謝,非常感謝。 – Darina

1

is_admin c焊割

if ($admin->rowCount() > 0) { 
    return "admin.php"; 
} else { 
    return null; 
} 

login

if (password_verify($upass, $userRow['user_pass'])) { 
    $_SESSION['user_session'] = $userRow['user_id']; 
    return "home.php"; 
} else { 
    return null; 
} 

login.php

$page = $test->login($uname, $umail, $upass); 

if(isset($page)) { 
    header("Location: $page"); 
}