Editer un profil

Fermé
dimi - Modifié le 14 juil. 2018 à 14:45
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 14 juil. 2018 à 15:24
bonjour j'ai crée une page php appelé editionprofil.php dans laquelle je peut modifier ma photo de profil le problème qui me dérange est que l'utilisateur ne peut pas changer son mot de passe et changer son profil à sa guise surement à cause d'une erreur que j'ai faite SVP aidez moi à résoudre cette erreur voici ma page
<?php
session_start();

$bdd = new pdo('mysql:host=localhost;dbname=espace_membre', 'root', '');

if(isset($_SESSION['id']))
{
  $requser = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
  $requser->execute(array($_SESSION['id']));
  $user = $requser->fetch();

  if(isset($_POST['newnom']) AND !empty($_POST['newnom']) AND $_POST['newnom'] != $user['nom'])
  {
    $newnom = htmlspecialchars($_POST['newnom']);
    $insertnom = $bdd->prepare("UPDATE membres SET nom = ? WHERE id = ?");
    $insertnom->execute(array($newnom, $_SESSION['id']));
    header('Location:profil.php?id='.$_SESSION['id']);
  }

  if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail'])
  {
    $newmail = htmlspecialchars($_POST['newmail']);
    $insertmail = $bdd->prepare("UPDATE membres SET mail = ? WHERE id = ?");
    $insertmail->execute(array($newmail, $_SESSION['id']));
    header('Location:profil.php?id='.$_SESSION['id']);
  }
  if(isset($_POST['newmdp1']) AND !empty($_POST['newmdp1']) AND isset($_POST['newmdp2']) AND !empty($_POST['newmdp2']))
  {
    $mdp1 = sha1($_POST['newmdp1']);    
    $mdp2 = sha1($_POST['newmdp2']);

    if($mdp1 == $mdp2)
    {
      $insertmdp = $bdd->prepare("UPDATE membres SET motdepasse = ? WHERE id = ?");
      $insertmdp->execute(array($mdp1, $_SESSION['id']));
      header('Location:profil.php?id='.$_SESSION['id']);
    }
    else
    {
      $msg = "Vos 02 mots de passes ne correspondent pas !";
    }
  }
  if(isset($_FILES['avatar']) AND !empty($_FILES['avatar']['name']))
  {
    $tailleMax = 2097152;
    $extensionsValides = array('jpg','jpeg','gif','png');
    if($_FILES['avatar']['size'] <= $tailleMax)
    {
        $extensionsUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
        if(in_array($extensionsUpload, $extensionsValides))
        {
           $chemin = "membres/avatars/".$_SESSION['id'].".".$extensionsUpload;
           $resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
           if($resultat)
           {
              $updateavatar = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id');
              $updateavatar->execute(array(
                'avatar' =>$_SESSION['id'].".".$extensionsUpload,
                'id' => $_SESSION['id']
              ));
              header('Location:profil.php?id='.$_SESSION['id']);
           }
           else
           {
             $msg = "Erreur durant l'importation de votre photo profil";
           }
        }
        else
        {
          $msg = "Votre Photo profil doit etre au format jpg jpeg gif et png";
        }
    }
    else
    {
      $msg = "Votre photo de profil ne doit pas dépasser 2Mo";
    }
  }
?>
<html>
  <head>
   <title>Wotrom.com</title>
   <meta charset="utf-8">
  </head>
 <body>
   <div align="left">
    <h2>Editer Votre profil</h2>
        <form method="POST" action="" enctype="multipart/form-data">
                  <input type="text" name="newnom" placeholder="Votre Nom" value="<?php echo $user['nom']; ?>" /></br></br>
                  <input type="email" name="newmail" placeholder="Votre Mail" value="<?php echo $user['mail']; ?>" /></br></br>
                  <input type="password" name="newmdp" placeholder="Votre mot de passe"  /></br></br>
                  <input type="password" name="newmdp2" placeholder="confirmer Votre MDP" /></br></br>
                  <input type="file" name="avatar" /></br></br>
                  <input type="submit" value="Mettre a jour mon profil !" /></br></br>
                  <input type="reset" value="Annuler" /></br></br>
       </form> 
       <?php if(isset($msg)) {echo $msg;} ?>   
          </div>
     </body>
</html>
<?php
}
else
{
  header("Location: connexion.php");
}
?>


EDIT : Ajout des balises de code !

3 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
14 juil. 2018 à 14:57
Un message d'erreur, une requête SQL incorrecte, un mauvais affichage, autre ?
0
Utilisateur anonyme
14 juil. 2018 à 14:57
Bonjour

Ton mot de passe s'appelle newmdp dans don formulaire :
                <input type="password" name="newmdp" placeholder="Votre mot de passe"  /></br></br> 

mais tu testes newmdp1 dans ton traitement :
  if(isset($_POST['newmdp1'])...
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
14 juil. 2018 à 15:24
Bonjour,

Pleins d'erreurs.......
Du code placé hors de tes IF alors qu'il devrait s'y trouver
Des variables mal nommées...
Le code mal agencé...

Je t'invite vivement à lire et à appliquer le contenu de ces deux liens :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Puis à essayer ceci :
<?php
session_start();

//Affichage des erreurs de code
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//Connexion à la BDD (tu ferais mieux de la mettre dans un ficier à part que tu n'aurais qu'à inclure dans tes différentes
// pages au lieu de la ré-écire à chaque fois...
try{
  $bdd =new PDO('mysql:host=localhost;dbname=espace_membre; charset=utf8', 'root', '');
  // Activation des erreurs PDO
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
  die('Erreur : ' . $e->getMessage());
}


// fonction pour effectuer les requêtes SQL sans avoir à réécrire à chaque fois les try/catch
function executeQuery($sql,$datas=NULL){
  global $bdd;
  try{
    $requete = $bdd -> prepare($sql) ;
    $requete->execute($datas);
  }catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les datas : " ;
     print_r($datas);
  }
 return $requete;
}

/**
* Mise à jour des infos du membre
*/
function update_membres($id, $Nom = NULL ,$Email= NULL ,$Mdp = NULL, $avatar=NULL){
  $a_datas = array();
  $arrTmp = array();
  if($Nom){
    $arrTmp[] = "nom = ?";
    $a_datas[] = $Nom;
  }
  if($Email){
    $arrTmp[] = "mail = ?";
    $a_datas[] = $Email;
  }
  if($Mdp){
    $arrTmp[] = "motdepasse = ?";
    $a_datas[] = $Mdp;
  }
  
  if($avatar){
    $arrTmp[] = "avatar = ?";
    $a_datas[] = $avatar;
  }
  
  //on ajoute l'ID dans les DATAS pour la mise à jour
  $a_datas[] = $id;
  
  $datasAUpdate = join(",",$arrTmp);// on genere les champs à mettre à jour
  
  //on prepare la requête
  $sql = "UPDATE membres 
          SET ". $datasAUpdate ."
          WHERE id = ? ";
  return executeQuery($sql,$a_datas);
}

/**
Fonction de redirection sur le profil du user
*/
function redirectProdil($id){
  // header('Location:profil.php?id='.$id); // on desactive les redirections le temps des tests.. sinon tu ne peux pas voir les erreurs !
  // exit();  //toujours mettre un exit après une redirection !
}

//récupération PROPRE des variables AVANT de les utiliser
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$newnom = !empty($_POST['newnom']) ? $_POST['newnom'] : NULL;
$newmail = !empty($_POST['newmail']) ? $_POST['newmail'] : NULL;
$newmdp1 = !empty($_POST['newmdp1']) ? $_POST['newmdp1'] : NULL;
$newmdp2 = !empty($_POST['newmdp2']) ? $_POST['newmdp2'] : NULL;
$msg = array();

//debut du traitement
if($id) {
  
  //recupération des informations de l'utilisateur
  //preparation de la requetes et de ses variables
  $sql = "SELECT * FROM membres WHERE id = ?";
  $datas = array($id);
  //Execution de la requete
  $requete = executeQuery($sql,$datas);
  
  $user = $requete->fetch();
  $usr_nom = $user['nom'];
   
  $NomToInsert = $newnom != $usr_nom ? $newnom : NULL;
  $mailToInsert =  $newmail != $user['mail'] ? $newmail : NULL;
  $mdpToTinsert = !empty($mdp1) && $mdp1 == $mdp2 ? sha1($mdp1) : NULL;
  $NewAvatar = !empty($uploadedAvatar) ? $id.".".$extensionsUpload : NULL;
  
  $avatar = !empty($_FILES['avatar']) ? $_FILES['avatar'] : NULL;
  $avatar_Name = !empty($avatar['name']) ? $avatar['name'] : NULL;
  $avatar_Size = !empty($avatar['size']) ? $avatar['size'] : NULL;
  $avatar_TmpName = !empty($avatar['tmp_name']) ? $avatar['tmp_name'] : NULL;
  
  if($avatar_Name) {
    $tailleMax = 2097152;
    $extensionsValides = array('jpg','jpeg','gif','png');
    if( $avatar_Size <= $tailleMax) {
        $extensionsUpload = strtolower(substr(strrchr($avatar_Name, '.'), 1));
        if(in_array($extensionsUpload, $extensionsValides)){
           $uploadedAvatar = $id.".".$extensionsUpload;
           $chemin = "membres/avatars/".$uploadedAvatar;
           if(move_uploaded_file($avatar_TmpName, $chemin)) {
                           
           } else {
             $uploadedAvatar = NULL;
             $msg[] = "Erreur durant l'importation de votre photo profil";
           }
        } else {
          $uploadedAvatar = NULL; 
          $msg[] = "Votre Photo profil doit etre au format jpg jpeg gif et png";
        }
    } else {
      $uploadedAvatar = NULL;
      $msg[] = "Votre photo de profil ne doit pas dépasser 2Mo";
    }
  }
  
  if($mdp1 != $mdp2){
    $msg[] = "Vos 02 mots de passes ne correspondent pas !";
  }
  
  if(empty($msg)){
    // si pas d'erreur... on fait la redirection
    redirectProdil($id);
  }    
}else{
  header("Location: connexion.php");
  exit();
}
  

?>
<html>
  <head>
   <title>Wotrom.com</title>
   <meta charset="utf-8">
  </head>
  <body>
    <div align="left">
      <h2>Editer Votre profil</h2>
      <form method="POST" action="" enctype="multipart/form-data">
        <input type="text" name="newnom" placeholder="Votre Nom" value="<?php echo $user['nom']; ?>" /></br></br>
        <input type="email" name="newmail" placeholder="Votre Mail" value="<?php echo $user['mail']; ?>" /></br></br>
        <input type="password" name="newmdp" placeholder="Votre mot de passe"  /></br></br>
        <input type="password" name="newmdp2" placeholder="confirmer Votre MDP" /></br></br>
        <input type="file" name="avatar" /></br></br>
        <input type="submit" value="Mettre a jour mon profil !" /></br></br>
        <input type="reset" value="Annuler" /></br></br>
     </form> 
     <?php 
     if(!empty($msg)) {
      foreach($msg as $err){
         echo $err; 
      }
     }
     ?>   
    </div>
  </body>
</html>


0