2017-01-23 67 views
0

ユーザーのランキングを1または7に設定しようとしています。そうでない場合は、別の操作を行います。しかし、例えば私がユーザー1のランク7を与えると、何も起こりません。そして、ユーザー2のランク7を与えると、両方とも、あなたがスタッフであるというメッセージが表示されます。intに特定の値がある場合は、何かを実行しない場合は何かを実行してください

私は問題を見つけ出すことなく3日間これを苦労しました。私がウェブサイトにしたいのは、ログインしているユーザーがランク7を持っているかどうかを調べることです(ログインしている人だけがランク7になっていない場合)。データベースの誰かがランク7で、 「あなたはスタッフです」というメッセージを受け取らないようにしてください。 GamesNetというデータベースとmembersというテーブルがあり、私のユーザーIDはmemberIDと呼ばれ、username,passwordemailRankという2つの列があります。

これは正常な設定です。

$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."; 
} 

?> 

EDIT:

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は_デバッガです。現実があなたの期待に合っているかどうかを、あなたが得たものを記録することを試みたことがありますか? – jdv

答えて

1

ザ・SELECT文の句がparameter markerが欠落している場合、例えば はここに私のコードです

SELECT Rank, memberID from members where memberID = ? 

、その後bindParamそれが最初で唯一のパラメーター・マーカー

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

あるので、あなたはまた、bindParamをスキップし、execute

に配列として memberIdを渡すことができ、 1ない 7を使用する必要があります。
$stmt->execute(array($memberId)); 
すべてのユーザー

$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."; 
    } 
} 

を取得するにはちょうど1ユーザー

$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."; 
} 

を処理するために、


あなたは既に機能login$_SESSION['memberID']を持っています。あなたはそれを使用することができます

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

と必要なデータを持っています。


いっそのこと、あなたはこれが一度にrankを提供する

// 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を拡張し、追加のデータベース・ラウンドトリップを避けることができます。その後、今、あなたはちょうど別のSQLクエリを実行せずに

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

をチェックすることができる機能login

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

にランクを救うことができます。

+0

ありがとう!コメントで何が起こったのかわかりませんが、ランクを変えてサイトをリフレッシュすると、何も起こりません。変更を見るためにログインしていなければなりません。 –

+0

私は、司会者がコメントを縮めたと思います。 –

+0

さて、メンバーページを更新するだけで、それを変更する方法はまだ分かっていません。あなたは何をする必要があるかについてのアイデアはありますか?:) –

関連する問題