2017-01-23 58 views
0

我想从1或7的排名我的用户如果登录的用户拥有7级,说:“你的员工”。如果没有,请做其他事情。但是,如果我例如给用户1等级7,没有任何反应。然后,如果我给予用户2的等级7,则都会得到消息说你是员工。如果INT有一个特定的值,做一些事情,如果不是,做其他事

我一直在努力,现在这个3天没有发现出了问题。我想在网站上做的是找出如果登录的用户拥有7级(如果没有任何其他人,但只有已登录的有7级),如果有人在我的数据库东西有7级,而不是你,你”不应该得到“你是员工”的信息。我有一个名为GamesNet数据库,表名为members,和我的用户ID被称为memberID,我有一对夫妇叫usernamepasswordemailRank等栏目。

这是一个确定的设置,对不对? 这里是我的代码:

$stmt = $db->prepare('SELECT Rank, memberID from members where memberID'); 
$stmt->bindParam(7,$memberID, PDO::PARAM_INT); 
$stmt->execute(); 

$result = $stmt->fetch(PDO::FETCH_ASSOC); 
if($result['Rank'] == 7){ 
    echo "You are a staff member."; 
}else{ 
    echo "Hello you are not a staff."; 
} 

?> 

编辑:

user.php: 

     <?php 
     include('password.php'); 
     class User extends Password{ 

      private $_db; 

      function __construct($db){ 
       parent::__construct(); 

       $this->_db = $db; 
      } 

      private function get_user_hash($username){ 

       try { 
        $stmt = $this->_db->prepare('SELECT password, username, memberID FROM members WHERE username = :username AND active="Yes" '); 
        $stmt->execute(array('username' => $username)); 

        return $stmt->fetch(); 

       } catch(PDOException $e) { 
        echo '<p class="bg-danger">'.$e->getMessage().'</p>'; 
       } 
      } 

      public function login($username,$password){ 

       $row = $this->get_user_hash($username); 

       if($this->password_verify($password,$row['password']) == 1){ 

        $_SESSION['loggedin'] = true; 
        $_SESSION['username'] = $row['username']; 
        $_SESSION['memberID'] = $row['memberID']; 


        return true; 
       } 
      } 

      public function logout(){ 
       session_destroy(); 
      } 

      public function is_logged_in(){ 
       if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){ 
        return true; 
       } 
      } 

     } 


     ?> 

    Memberpage.php 
     <?php require('includes/config.php'); 



     $memberID = user; 
     $stmt = $db->prepare('select rank, memberid from members'); 
     $stmt->execute(); 
     while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { 
      if ($result['rank'] == 7) { 
       echo "You are a staff member."; 
      } else { 
       echo "Hello you are not a staff."; 

//When i run this code, it tells me im not staff, even tho i am rank 7. 
      } 
     } 




     //if not logged in redirect to login page 
     if(!$user->is_logged_in()){ header('Location: login.php'); } 


     //define page title 
     $title = 'Members Page'; 

     //include header template 
     require('layout/header.php'); 
     ?> 

     <div class="container"> 

      <div class="row"> 

       <div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3"> 

         <h2>Member only page - Welcome <?php echo $_SESSION['username']; ?></h2> 
       <p><a href='logout.php'>Logout</a></p> 
         <hr> 

       </div> 
      </div> 


     </div> 



     <?php 


/* 
$stmt = $db->prepare('select Rank, memberID from members'); 
$stmt->execute(); 
while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    if ($result['Rank'] == 7) { 

     echo "You are a staff member."; 
     echo $result['Rank']; 

    } else { 
     echo "Hello you are not a staff."; 
    } 
} 
*/ 
//When i run this code, it works. But it gives me the messages for all registrered users. 
    ?> 

的login.php

<?php 
//include config 
require_once('includes/config.php'); 

//check if already logged in move to home page 
if($user->is_logged_in()){ header('Location: index.php'); } 

//process login form if submitted 
if(isset($_POST['submit'])){ 

    $username = $_POST['username']; 
    $password = $_POST['password']; 

    if($user->login($username,$password)){ 
     $_SESSION['username'] = $username; 
     header('Location: memberpage.php'); 
     exit; 

    } else { 
     $error[] = 'Wrong username or password or your account has not been activated.'; 
    } 

}//end if submit 

//define page title 
$title = 'Login'; 

//include header template 
require('layout/header.php'); 
?> 


<div class="container"> 

    <div class="row"> 

     <div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3"> 
      <form role="form" method="post" action="" autocomplete="off"> 
       <h2>Please Login</h2> 
       <p><a href='./'>Back to home page</a></p> 
       <hr> 

       <?php 
       //check for any errors 
       if(isset($error)){ 
        foreach($error as $error){ 
         echo '<p class="bg-danger">'.$error.'</p>'; 
        } 
       } 

       if(isset($_GET['action'])){ 

        //check the action 
        switch ($_GET['action']) { 
         case 'active': 
          echo "<h2 class='bg-success'>Your account is now active you may now log in.</h2>"; 
          break; 
         case 'reset': 
          echo "<h2 class='bg-success'>Please check your inbox for a reset link.</h2>"; 
          break; 
         case 'resetAccount': 
          echo "<h2 class='bg-success'>Password changed, you may now login.</h2>"; 
          break; 
        } 

       } 


       ?> 

       <div class="form-group"> 
        <input type="text" name="username" id="username" class="form-control input-lg" placeholder="User Name" value="<?php if(isset($error)){ echo $_POST['username']; } ?>" tabindex="1"> 
       </div> 

       <div class="form-group"> 
        <input type="password" name="password" id="password" class="form-control input-lg" placeholder="Password" tabindex="3"> 
       </div> 

       <div class="row"> 
        <div class="col-xs-9 col-sm-9 col-md-9"> 
         <a href='reset.php'>Forgot your Password?</a> 
        </div> 
       </div> 

       <hr> 
       <div class="row"> 
        <div class="col-xs-6 col-md-6"><input type="submit" name="submit" value="Login" class="btn btn-primary btn-block btn-lg" tabindex="5"></div> 
       </div> 
      </form> 
     </div> 
    </div> 



</div> 


<?php 
//include header template 
require('layout/footer.php'); 
?> 
+1

SO是一个_terrible_调试器。你是否试图记录你所得到的结果,看看现实是否符合你的期望? – jdv

回答

1

的地方在SELECT语句子句缺少parameter marker,例如

SELECT Rank, memberID from members where memberID = ? 

然后bindParam必须使用17,因为它是在第一和唯一的参数标记

$stmt->bindParam(1,$memberID, PDO::PARAM_INT); 

您也可以跳过bindParam并传递memberId与数组execute

$stmt->execute(array($memberId)); 

要处理只是一个用户

$memberID = 1234; 
$stmt = $db->prepare('select rank, memberid from members where memberid = ?'); 
$stmt->execute(array($memberID)); 
$result = $stmt->fetch(PDO::FETCH_ASSOC); 
if ($result['rank'] == 7) { 
    echo "You are a staff member."; 
} else { 
    echo "Hello you are not a staff."; 
} 

获取所有用户

$stmt = $db->prepare('select rank, memberid from members'); 
$stmt->execute(); 
while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    if ($result['rank'] == 7) { 
     echo "You are a staff member."; 
    } else { 
     echo "Hello you are not a staff."; 
    } 
} 

您已经$_SESSION['memberID']在功能login。所以你可以使用它

$stmt = $db->prepare('select rank, memberid from members where memberid = ?'); 
$stmt->execute(array($_SESSION['memberID'])); 

并且有所需的数据。


更好

的是,你可以用

// user.php, function get_user_hash() 
$stmt = $this->_db->prepare('SELECT password, username, memberID, Rank FROM members WHERE username = :username AND active="Yes" '); 

扩展功能get_user_hash这将一气呵成提供rank,并避免额外的数据库往返。然后,您可以保存军衔功能login

// user.php, function login() 
// ... 
$_SESSION['loggedin'] = true; 
$_SESSION['username'] = $row['username']; 
$_SESSION['memberID'] = $row['memberID']; 
$_SESSION['Rank'] = $row['Rank']; 

现在你可以检查

// Memberpage.php 
if ($_SESSION['Rank'] == 7) { 
    echo "You are a staff member."; 
} else { 
    echo "Hello you are not a staff."; 
} 

没有做其他的SQL查询。

+0

谢谢!不知道评论发生了什么,但是当我改变排名并刷新网站时,没有任何事情发生,我必须登录和注销以查看更改,我如何才能使其仅从刷新更改? –

+0

我想,一个版主打了个评论。 –

+0

好的,但我还没有想出如何从刷新成员页面改变它。你对我需要做什么有什么想法吗?:) –

相关问题