2017-03-12 9 views
0

Ich habe auf diesem vorgefertigten PHP-Login-System erweitert. Der erste Code-Block ist eine Datei namens user.php und ich glaube, dass es geladen wird, wenn der Benutzer sich anmeldet. Ich habe hinzugefügt, zum BeispielBearbeiten von MySQL in PHP und Anzeigen des neuen Ergebnisses

Für wenn ich zusätzliche Spalten zur Datenbank hinzufügen und es echo aus.

'depot' and $_SESSION['depot'] = $row['depot']; 

Mein Problem ist, wenn ich das Profil-Seite bearbeiten baue diese Daten nicht aktualisiert, wenn der Benutzer sich abmeldet und meldet sich zurück.

Was ist ein guter Weg, dies zu beheben. Muss ich die Zusätze, die ich an die user.php mache, entfernen und eine neue SELECT-Anweisung und ein neues Array in der Datei profile.php erstellen. oder kann ich irgendwie die Variablen in der user.php aktualisieren?

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, firstname, lastname, phone, memberID, user_level, credit, email, depot 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['firstname'] = $row['firstname']; 
     $_SESSION['lastname'] = $row['lastname']; 
     $_SESSION['phone'] = $row['phone']; 
     $_SESSION['memberID'] = $row['memberID']; 
     $_SESSION['user_level'] = $row['user_level']; 
     $_SESSION['credit'] = $row['credit']; 
     $_SESSION['email'] = $row['email']; 
     $_SESSION['depot'] = $row['depot'];   

     return true; 
    } 
} 

public function logout(){ 
    session_destroy(); 
} 

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

} 


?> 

Beispiel profile.php

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

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

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

//include header template 
require('layout/header-active.php'); 

?> 

<div id="Holder"> 
<div class="container">  
    <div class="row"> 
    <div class="col-lg-6 col-lg-offset-3"> 
     <h1> Account Information </h1> 
     <p>Username: <?php echo $_SESSION['username']; ?></p> 
     <p>First Name: <?php echo $_SESSION['firstname']; ?></p> 
     <p>Last Name: <?php echo $_SESSION['lastname']; ?></p> 
     <p>Phone: <?php echo $_SESSION['phone']; ?></p> 
     <p>Email: <?php echo $_SESSION['email']; ?></p> 
     <p>Member ID: <?php echo $_SESSION['memberID']; ?></p>    

     <hr> 

     <h3>Global Settings</h3> 

     <form class="" action="" method="post"> 
      <div class="form-group"> 
       <label>Depot:</label> <input type="text" name="depot" class="form-control" value="<?php echo $_SESSION['depot']; ?>" /> 
      </div> 
      <input type="submit" name="submit" value="Submit" class="btn btn-primary"> 
     </form> 

     <?php 
     include('connect-db.php'); 

     if (isset($_POST['submit'])) 
     { 
      $memberID = $_SESSION['memberID']; 
      $depot = $_POST['depot']; 

      mysqli_query($conn, "UPDATE members SET depot='$depot' WHERE  memberID='$memberID'") 
      or die(mysqli_error()); 

      header("Location: profile.php"); 
     } 

     ?> 

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

Antwort

0

Da Ihr Code $ _SESSION Variable verwendet Werte angezeigt werden, um den Wert in der Datenbank zu aktualisieren hat keine Auswirkungen für die aktuelle Sitzung da $ _SESSION nur aktualisiert wird, wenn sich der Benutzer anmeldet.
Die Änderungen sind sichtbar, wenn sich der Benutzer erneut anmeldet, da die Variable $ _SESSION in Ihrer Anmeldefunktion mit den aktualisierten Informationen aus der Datenbank überschrieben wird.

Um die Änderungen sichtbar zu machen, ohne sich abzumelden, aktualisieren Sie sofort nach dem Aktualisieren des Werts in der Datenbank die Variable $ _SESSION.

mysqli_query($conn, "UPDATE members SET depot='$depot' WHERE  memberID='$memberID'"); 
$_SESSION['depot'] = $depot; 

Außerdem sollten Sie diese How can I prevent SQL injection in PHP?
nie Benutzer übermittelten Daten direkt an MySQL übergeben lesen, ohne es richtig zu entkommen.

Verwandte Themen