2016-03-29 13 views
-2

Ich versuche, edit.php zu erstellen, damit Benutzer das Passwort ändern und ihre Informationen wie E-Mail, Benutzername ändern können.Kontoinformationen aktualisieren PDO/PHP

Benutzername ist der Sitzungsbenutzer angemeldet. Wenn der Benutzername geändert wird, muss UPDATE SESSION mit dem neuen Benutzernamen verwendet werden. es funktioniert nicht. Ich weiß nicht warum. Vielen Dank für Ihre Hilfe. Dies ist der Code edit.php

<?php 
require('includes/config.php'); 
if(!$user->is_logged_in()){ header('Location: login.php'); } 
?> 
<?php 
class info {  
} 
$username= $_SESSION['username']; 
$sql = 'SELECT * FROM users WHERE username = :username'; 
$query= $db->prepare($sql); 
$query->execute(array(

      ':username' => $username, 
)); 
$query->setFetchMode (PDO::FETCH_CLASS, 'info'); 
while($r= $query->fetch(PDO::FETCH_OBJ)) { 
    $email = $r->email; 
    $namefull = $r->namefull; 
    $usertype = $r->usertype; 
    $password = $r->password; 
    } 
if(isset($_POST['submit'])){ 
    if(strlen($_POST['username']) < 3){ 
     $error[] = 'Username deve avere almeno 4 lettere.'; 
    } else { 
     $stmt = $db->prepare('SELECT username FROM users WHERE username = :username'); 
     $stmt->execute(array(':username' => $_POST['username'])); 
     $row = $stmt->fetch(PDO::FETCH_ASSOC); 
     if(!empty($row['username'])){ 
      $error[] = 'Username già in uso.'; 
     } 
    } 
    if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){ 
     $error[] = 'Inserisci una email valida'; 
    } else { 
     $stmt = $db->prepare('SELECT email FROM users WHERE email = :email'); 
     $stmt->execute(array(':email' => $_POST['email'])); 
     $row = $stmt->fetch(PDO::FETCH_ASSOC); 
     if(!empty($row['email'])){ 
      $error[] = 'Email già in uso.'; 
     } 
    } 
    if(!isset($error)){ 
     try { 
      $stmt = $db->prepare("UPDATE users SET (username,email,usertype) VALUES (:username, :email,:usertype) WHERE username='".$username."'"); 
      $stmt->execute(array(
       ':username' => $_POST['username'], 
       ':email' => $_POST['email'], 
       ':usertype' => $_POST['usertype'], 
      )); 
      header('Location: edit.php?action=joined'); 
      exit; 
     } catch(PDOException $e) { 
      $error[] = $e->getMessage(); 
     } 

     } 
} 
?> 

Dies ist das Aktionsformular für das Zurücksetzen des Passworts, i erstellen edit-reset.php

<?php 
if(isset($_POST['submit'])){ 
    if(strlen($_POST['password']) < 3){ 
     $error[] = 'Password deve contenere almeno 4 lettere.'; 
    } 

    if(strlen($_POST['passwordConfirm']) < 3){ 
     $error[] = 'Conferma password deve contenere almeno 4 lettere.'; 
    } 

    if($_POST['password'] != $_POST['passwordConfirm']){ 
     $error[] = 'Le password non sono uguali.'; 
    } 


    //if no errors have been created carry on 
    if(!isset($error)){ 

     //hash the password 
     $hashedpassword = $user->password_hash($_POST['password'], PASSWORD_BCRYPT); 

     //create the activasion code 
     $activasion = md5(uniqid(rand(),true)); 

     try { 

      //insert into database with a prepared statement 
      $stmt = $db->prepare('INSERT INTO users (username,password,email,active) VALUES (:username, :password, :email, :active)'); 
      $stmt->execute(array(
       ':username' => $_POST['username'], 
       ':password' => $hashedpassword, 
       ':email' => $_POST['email'], 
       ':active' => $activasion 
      )); 
      $id = $db->lastInsertId('id'); 

      //send email 
      $to = $_POST['email']; 
      $subject = "Cambio password"; 
      $body = "<p>La tua password è stata cambiata!</p> 
      <p>Amministrazione Dixard</p>"; 

      $mail = new Mail(); 
      $mail->setFrom(SITEEMAIL); 
      $mail->addAddress($to); 
      $mail->subject($subject); 
      $mail->body($body); 
      $mail->send(); 

      //redirect to index page 
      header('Location: register.php?action=joined'); 
      exit; 

     //else catch the exception and show the error. 
     } catch(PDOException $e) { 
      $error[] = $e->getMessage(); 
     } 

     //aggiornare la sessione con la nuova password 




    }  

} 

?> 

Hier die ist, die beiden Formen (E-Mail ändern, Benutzernamen, Benutzertyp UND Passwort ändern):

Benutzername „> Art des Zimmers Konto „> E-Mail-Adresse “> Salva
   <h2 class="strong-header large-header">Change Password</h2> 
       <form role="form" action="edit-reset.php" method="post" novalidate> 
        <div class="form-group"> 
         <label for="password">Password corrente</label> 
         <input type="password" placeholder="Password" name="password_corrent" id="password" class="form-control" required> 
        </div> 

        <div class="form-group"> 
         <label for="password">Nuova Password</label> 
         <input type="password" placeholder="Nuova Password" name="password" id="password" class="form-control" required> 
        </div> 
        <div class="form-group"> 
         <label for="password-repeat">Conferma Nuova password</label> 
         <input type="password" name="passwordConfirm" id="passwordConfirm"class="form-control" placeholder="Conferma Nuova Password" required> 
        </div> 

        <button type="submit" class="btn btn-primary">Cambia Password</button> 
       </form> 

Antwort

0

Wenn Sie überprüfen in Ihrem edit.php Skript, wenn der Benutzername oder die E-Mail bereits verwendet wird, sind Sie nicht die id des Ausschluß aktueller Benutzer So wird der Benutzer immer verpflichtet, seinen Benutzernamen UND E-Mail jedes Mal ändern, wenn er eines von ihnen ändern möchte.

Außerdem aktualisieren Sie $_SESSION['username'] nicht, nachdem Sie Daten in der Datenbank aktualisiert haben, damit der Benutzer angemeldet bleibt (vorausgesetzt, der Benutzername wurde geändert).

+0

Ja ich brauche Update-Sitzung mit den neuen Benutzernamen Daten. Aber das Problem ist, dass sich Benutzername und E-Mail nicht ändern. Datenbankdaten ändern sich nicht \t \t $ stmt = $ db-> prepare ('SELECT username FROM users WHERE username =: Benutzername \t \t AND NOT EXISTS (SELECT username FROM users WHERE id = $ id)'); \t \t $ stmt-> ausführen (array (': username' => $ _POST ['username'])); \t \t $ row = $ stmt-> fetch (PDO :: FETCH_ASSOC); (! Empty ($ row [ 'username'])) \t \t wenn { \t \t \t $ error [] = 'Benutzername existieren.'; \t \t} –

+0

1. Ich denke, es gibt ein Problem in Ihrer Update-Anfrage; Sie müssen sich dies ansehen: http://dev.mysql.com/doc/refman/5.7/en/update.html. Ihre Anfrage sollte mehr wie folgt lauten: 'UPDATE Benutzer SET Benutzername =: Benutzername, E-Mail =: E-Mail, usertype =: Benutzertyp WHERE ID =: ID;' 2. In Ihrer vorherigen Überprüfung, erhalten Sie die aktuelle Benutzer-ID mit einem einfachen Anfrage 'SELECT ID FROM Benutzer WHERE Benutzername =: Benutzername;' und fügen Sie diese ID in Ihrer Bedingung, während Sie überprüfen, ob Benutzername nicht bereits verwendet wird: 'SELECT username VON Benutzern WHERE username =: username UND id! =: id;' – Schnapse

Verwandte Themen