2017-01-23 7 views
0

Ich versuche, meine Benutzer von 1 oder 7 zu ordnen. Wenn der eingeloggte Benutzer Rang 7 hat, sagen Sie "Sie sind Mitarbeiter". Wenn nicht, etwas anderes tun. Aber wenn ich zum Beispiel Benutzer 1 Rang 7 gebe, passiert nichts. Und dann, wenn ich Benutzer 2 Rang 7 gebe, erhalten beide die Nachricht, dass Sie Mitarbeiter sind.Wenn int einen bestimmten Wert hat, etwas tun, wenn nicht, etwas anderes tun

Ich habe seit 3 ​​Tagen damit gekämpft, ohne das Problem herauszufinden. Was ich möchte, dass die Website tut, ist herauszufinden, ob der eingeloggte Benutzer Rang 7 hat (Nicht wenn andere, sondern nur die eingeloggte Person Rang 7 hat), und wenn jemand anderes in meiner Datenbank Rang 7 hat und nicht Sie, re sollte nicht die Nachricht "Sie sind Mitarbeiter" erhalten. Ich habe eine Datenbank namens GamesNet, eine Tabelle mit dem Namen members, und meine Benutzer-IDs heißen memberID und ich habe ein paar andere Spalten namens username, password, email und Rank.

Das ist ein gutes Setup, oder? Hier ist mein Code:

$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 ist ein _terrible_ Debugger. Haben Sie schon einmal versucht zu protokollieren, was Sie bekommen und ob die Realität Ihren Erwartungen entspricht? – jdv

Antwort

1

Die where-Klausel in der select-Anweisung wird eine parameter marker fehlt, z.B.

SELECT Rank, memberID from members where memberID = ? 

und dann bindParam1 nicht 7 verwenden müssen, weil es das erste und einzige Marker Parameter ist

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

Sie auch bindParam und die memberId als Array an execute passieren überspringen

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

Um nur ein Benutzer

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

holen alle Benutzer

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

Sie haben bereits $_SESSION['memberID'] in Funktion login zu verarbeiten. So können Sie es verwenden

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

und haben die erforderlichen Daten.


Noch besser wäre es, Sie Funktion erweitern konnte get_user_hash mit

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

Diese rank in einem Rutsch bieten würde, und vermeiden die zusätzliche Datenbank Rundfahrt.Sie könnten dann Rang in Funktion login

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

Jetzt sparen, können Sie nur

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

für überprüfen, ohne dass eine weitere SQL-Abfrage zu tun.

+0

Danke! Ich weiß nicht, was mit den Kommentaren passiert ist, aber wenn ich den Rang ändere und die Seite aktualisiere, passiert nichts, ich muss mich ein- und ausloggen, um die Änderung zu sehen, wie kann ich sie ändern, nur durch die Aktualisierung? –

+0

Ich schätze, ein Moderator zappte die Kommentare. –

+0

Okay, aber ich habe immer noch nicht herausgefunden, wie man es ändern kann, nur durch das Aktualisieren der Mitgliederseite. Haben Sie irgendwelche Ideen, was ich tun muss? :) –