Bonjour à tous , voilà , ça fait maintenant deux jours non-stop , que j'essaie de créer un update de compte , malheureusement en vain , j'ai cherché un peu partout , mais nul-part je trouve ce que je souhaite , en général , c'est en language mysql ou mysqli , que je ne parle absolument pas , donc je suis un peu perdu ... J'ai crée mon espace membre , en suivant ces tutos : http://www.grafikart.fr/tutoriels/php/gestion-membre-229 , http://www.grafikart.fr/tutoriels/php/niveau-permissions-php-148 :)

Par exemple , j'affiche les informations du membre dans leurs page compte comme ceci :

<?php
session_start();

//Instance PDO
try {

$PDO = new PDO('mysql:host=...;dbname=...', '...', '...');
$PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);

}catch(PDOException $e) {
echo 'Connexion impossible';
}

//Class Auth
require "class.auth.php";
?>
<?php $Auth->allow('user');?>
<?php
$req = $PDO->prepare('SELECT NiCK,PASSWORD,MAiL,avatar,name FROM users WHERE id=:id');
$req->execute(array(
'id' => $Auth->user('id')
));
$user = $req->fetch()
?>
<tr>
<th>REQUETE</th>
<th>INFO</th>
<tr>

<tr>
<td>Mon NiCK </td>
<td><?php if($Auth->user('slug') == 'admin' ): ?><span class="admin"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
<?php if($Auth->user('slug') == 'vip' ): ?><span class="vip"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
<?php if($Auth->user('slug') == 'user' ): ?><span class="user"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
<?php if($Auth->user('slug') == 'supmodo' ): ?><span class="supmodo"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?></td>
<tr>

<tr>
<td>Mon MAiL</td>
<td><?php echo $user->MAiL;?></td>
<tr>
<td>Mon GRADE</td>
<td><?php if($Auth->user('slug') == 'admin' ): ?><span class="admin"><?php echo $Auth->user('name'); ?></span><?php endif; ?>
<?php if($Auth->user('slug') == 'vip' ): ?><span class="vip"><?php echo $Auth->user('name'); ?></span><?php endif; ?>
<?php if($Auth->user('slug') == 'user' ): ?><span class="vip"><?php echo $Auth->user('name'); ?></span><?php endif; ?>
<?php if($Auth->user('slug') == 'supmodo' ): ?><span class="supmodo"><?php echo $Auth->user('name'); ?></span><?php endif; ?></td>
<tr>
</table>

Voilà , et en suivant ce systeme de code , je n'arrive vraiment pas à leur permettre de modifier leurs informations comme leurs mot de passe et en rajouter comme leurs sexe , leurs avatars etc ^^

Si quelqu'un pourrait m'aider , ce serait vraiment génial , car là , je bloque :(

Merci :D

26 réponses


extrarox
Réponse acceptée

Salut,

Déjà ça c'est faux :

<fieldset><legend>Avatar</legend>
<form method="POST" action="compte.php">
<input type="file" name="Avatar" placeholder="Avatar"><br>
<img src="./images/Avatar/'.<?php echo $Auth->user('name'); ?>.'" alt="No Avatar">
</fieldset></form><br>
<fieldset><legend>New Password</legend>
<form method="POST" action="compte.php">
<input type="text" name="PASSWORD" placeholder="PASSWORD"></fieldset></form><br>
<fieldset><legend>Confirmer New Password</legend>
<form method="POST" action="compte.php">
    <input type="text" name="CONFIRMER" placeholder="CONFIRMER"></fieldset></form><br>
<fieldset><legend>Modifier</legend>  
<form method="POST" action="compte.php">
    <input type="submit" value="Modifier"></fieldset></form></legend>

A chaque fois que tu mets un input, tu ouvres ta Form, ça ne marche pas comme ça, voilà la correction :

<form method="POST" action="compte.php">
    <fieldset>
        <legend>Avatar</legend>
            <input type="file" name="Avatar" placeholder="Avatar"><br>
            <img src="./images/Avatar/'.<?php echo $Auth->user('name'); ?>.'" alt="No Avatar">
    </fieldset><br>
    <fieldset>
        <legend>New Password</legend>
            <input type="text" name="PASSWORD" placeholder="PASSWORD">
    </fieldset><br>
    <fieldset>
            <legend>Confirmer New Password</legend>
            <input type="text" name="CONFIRMER" placeholder="CONFIRMER">
    </fieldset><br>
    <fieldset>
        <legend>Modifier</legend>  
        <input type="submit" value="Modifier">
    </fieldset>
</form>

Le dernier <legend> n'avais aucun intérêt.

De plus, le code d'après doit être entouré d'une condition pour être excuté que s'il y a eu validation du form, comme ça :

<?php
    if(isset($_POST'submit'])){
        include("connection.php");
        $pass = sha1($_POST'PASSWORD']);
        $confirm = sha1($_POST'CONFIRMER']);
        //Vérification du mdp
        if ($pass != $confirm || isset($confirm) || isset($pass)) {
            $query=$cnx->prepare('UPDATE users SET PASSWORD = :PASSWORD WHERE id=:id');
            $query->bindValue(':PASSWORD',$pass,PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor();
        }
    }
?>

A+

extrarox
Réponse acceptée

En fait, il te manque la valeur de l'id, tu la mets jamais dans ta requête.

A+

extrarox
Réponse acceptée

Pour l'avatar, tu mets un input type file, tu oublis pas de mettre enctype="multipart/form-data" au form.

Puis tu copies le fichier en tmp dans le répertoire que tu veux.

Sur google tu peux trouver facilement le code.

A+

extrarox
Réponse acceptée

Ah j'avais pas vu tu as mis "!" devant le isset, il faut pas, ça veut dire qu'il change s'il n'y a pas eu de validation, seulement dans ce cas^^

extrarox
Réponse acceptée

Change :

<input type="submit" value="Modifier">

par

<input type="submit" name="submit" value="Modifier">
extrarox
Réponse acceptée

Salut,

Si tu es déjà dans une balise php, tapes :

echo '<img src="LECHEMIN/'.$Auth->user('avatar').'.jpg" alt="Pas d avatar" />';//.jpg par utile si déjà présent dans ta bdd

Si c'est du HTML directement :

<img src="LECHEMIN/<?php echo $Auth->user('avatar'); ?>.jpg" alt="Pas d avatar" />
<!--.jpg par utile si déjà présent dans ta bdd-->

A+

Salut,

Pour pouvoir, leur permettre de changer leurs infos, il faut que tu leur propose un formulaire avec les données actuelles (sauf pour le password où c'est vide). Et après tu mets à jour les modifs quand ils valident le formulaire.

A+

iTACHi
Auteur

Merci de ta reponse , oui je vois un peu le principe , mais faudrait que je m'y prenne comment ? Puis j'avoue ramer sur les requêtes préparé d'update en PDO :s

iTACHi
Auteur

J'arrive pas a faire en sorte que le UPDATE fonctionne , quand j'ai plus d'erreur , et quand le header fonctionne bien , ça n'update pas la base de donnée :(

Salut,

Tu as surement déjà codé un peu?

Tu peux envoyé ce que tu as fais? Et je t'aiguillerai ;)

iTACHi
Auteur

:D Ce serait sympas :D Alors oui , j'ai pas mal codé , il y a la page function , la page compte qui appel les informations du profil , protégé par id par rapport aux functions , donc page unique au membre , enfin , faudrait tu me dises si tu s besoin d'autres choses , en attendant je te passe la page function ainsi que la page qui appel les infos du membre et les inputs pour faire les modifications :)

En fait , il me manque juste la requête UPDATE a faire fonctionner , et à uploader un avatar , ça aussi je bloque un peu , mais je vais pas trop t'en demander ^^ Pour le moment , si tu peux m'aider sur l'update de la page profil , ce serait vraiment sympas de ta part :)

Page Function :

<?php class Auth {
    /**
    * Permet d'identifier un utilisateur
    **/
    function login($d) {
       global$PDO;
       $NiCK = $_POST'NiCK'];
       $PASSWORD = ($_POST'PASSWORD']);
       $d = array('NiCK'=>$NiCK, 'PASSWORD'=>$PASSWORD);
       $req = $PDO->prepare ('SELECT users.id,users.PASSWORD,users.NiCK,users.MAiL,role.name,role.slug,role.level FROM `users` LEFT JOIN `role` ON users.role_id=role.id WHERE NiCK = :NiCK AND PASSWORD = :PASSWORD AND activer = 1');
       $req->execute($d);
       $data = $req->fetchAll();
       if(count($data)>0) {
            $_SESSION'Auth'] = $data[0];
            return true;
       }
       return false;
    }

    function allow($rang) {
       global$PDO;
       $req = $PDO->prepare ('SELECT slug,level FROM `role` ');
       $req->execute();
       $data = $req->fetchAll();
       $role = array();
       foreach($data as $d) {
           $role$d->slug] = $d->level;
       }
       if(!$this->user('slug')) {
           $this->forbidden();
       } else {
          if($role$rang] > $this->user('level')) {
               $this->forbidden();
        } else {
              return true;
        }
     }
 }

    /**
    * Recupere une info utilisateur
    ***/
    function user($field) {
       if(isset($_SESSION'Auth']->$field)) {
         return $_SESSION'Auth']->$field;
       } else {
         return false;
       }
    }

    /**
    *Redirige un utilisateur vers forbidden
    **/
    function forbidden() {
           header('Location:forbidden.php');
    }

     /**
     * Recupere les infos de tout les utilisateurs
     **/

}
$Auth = new Auth();

La page compte qui affiche les infos du membre et les inputs pour modifier :

<?php 
session_start();
//Instance PDO
try {
      $PDO = new PDO('mysql:host=''';dbname=''''', ''''', '''''');
      $PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
          $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
}catch(PDOException $e) {
   echo 'Connexion impossible';
}
//Class Auth
require "class.auth.php";
?>
<?php include("DoctypeCompte.php"); ?>
<?php include("csscompte.php"); ?>
<?php $Auth->allow('user');?>
<?php
    $req = $PDO->prepare('SELECT NiCK,PASSWORD,MAiL,avatar,name FROM users WHERE id=:id');
    $req->execute(array(
       'id' => $Auth->user('id')
        ));
     $user = $req->fetch()
?>
<br><br><br>
<div align=center>
<a href="private.php"><img src="connecte.png"alt=""></a>
</div>
<div align=center>
<fieldset><legend>Identifiants</legend>
Pseudo : <?php if($Auth->user('slug') == 'admin' ): ?><span class="admin"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'vip' ): ?><span class="vip"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'user' ): ?><span class="user"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'supmodo' ): ?><span class="supmodo"><?php echo $Auth->user('NiCK'); ?></span><?php endif; ?></fieldset>
<br>
<fieldset><legend>Adresse</legend>
Mail : <?php if($Auth->user('slug') == 'admin' ): ?><span class="admin"><?php echo $Auth->user('MAiL'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'vip' ): ?><span class="vip"><?php echo $Auth->user('MAiL'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'user' ): ?><span class="user"><?php echo $Auth->user('MAiL'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'supmodo' ): ?><span class="supmodo"><?php echo $Auth->user('MAiL'); ?></span><?php endif; ?></fieldset>
<br>
<fieldset><legend>Level</legend>
Grade : <?php if($Auth->user('slug') == 'admin' ): ?><span class="admin"><?php echo $Auth->user('name'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'vip' ): ?><span class="vip"><?php echo $Auth->user('name'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'user' ): ?><span class="user"><?php echo $Auth->user('name'); ?></span><?php endif; ?>
        <?php if($Auth->user('slug') == 'supmodo' ): ?><span class="supmodo"><?php echo $Auth->user('name'); ?></span><?php endif; ?></fieldset>
<br>
<fieldset><legend>Avatar</legend>
<form method="POST" action="compte.php">
<input type="file" name="Avatar" placeholder="Avatar"><br>
<img src="./images/Avatar/'.<?php echo $Auth->user('name'); ?>.'" alt="No Avatar">
</fieldset></form><br>
<fieldset><legend>New Password</legend>
<form method="POST" action="compte.php">
<input type="text" name="PASSWORD" placeholder="PASSWORD"></fieldset></form><br>
<fieldset><legend>Confirmer New Password</legend>   
<form method="POST" action="compte.php">
    <input type="text" name="CONFIRMER" placeholder="CONFIRMER"></fieldset></form><br>
<fieldset><legend>Modifier</legend> 
<form method="POST" action="compte.php">
    <input type="submit" value="Modifier"></fieldset></form></legend>
</div>
<?php
$req->closecursor();
?>
<?php include("connection.php"); ?>
<?php
$pass = sha1($_POST'PASSWORD']);
$confirm = sha1($_POST'CONFIRMER']);
//Vérification du mdp
if ($pass != $confirm || isset($confirm) || isset($pass)) {
$query=$cnx->prepare('UPDATE users SET PASSWORD = :PASSWORD WHERE id=:id');
$query->bindValue(':PASSWORD',$pass,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
}
?>

là , j'ai une erreur undefined index sur l'update tout en bas , tout le reste fonctionne bien sûr :) j'ai essayé plein de trucs pour l'update , mais bon , en vain comme tu sais ... ^^

iTACHi
Auteur

Merci :D Oui je me disais aussi que ce systeme de form que j'avais mit en oeuvre pour un certain design de fieldset n'etait pas tres correct :P Quand a

if(isset($_POST'submit'])){
        include("connection.php");

ça je n'avais pas pensé ... je vais voir , j'te dirais ^^

iTACHi
Auteur

bin , pas de message d'erreur , mais ça n'update pas ma bdd :( Quand je clique sur modifier , c trop rapide , je vois bien qu'il ne se passe rien , puis bah quand je vérifie dans la bdd , rien ne c passé , je ne comprends pas , vu qu'il n'y a pas de message d'erreur ... Tu aurais une idée ?

Je viens de tester ça :

<?php
    if(isset($_POST'submit'])){
        include("connection.php");

        $pass = sha1($_POST'PASSWORD']);
        $confirm = sha1($_POST'CONFIRMER']);

        //Vérification du mdp
        if ($confirm && $pass && $pass == $confirm){
            $query=$PDO->prepare('UPDATE users SET PASSWORD = :PASSWORD WHERE id=:id');
            $query->bindValue(':PASSWORD',$pass,PDO::PARAM_INT);
            $query->bindValue(':id',$Auth->user('id'),PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor();
            print_r($query->errorInfo());
        }
    }
?>

Tjs pareil , pas de message d'erreur , mais ça n'update pas la bdd :(

iTACHi
Auteur

c bon , jai trouvé :D Le code correct est : J'ai changé les fieldset des passwords car sinon il prenait pas en compte la confirmation , il me changeait le pass même si le pass de la confirmation n'etait pas correcte , même pire impossible de se reconnecter via l'un des deux mots de pass rentrés :(

Là , avec ces news codes , tout fonctionne au mieux :D

<form method="POST" action="compte.php">
    <fieldset>
        <legend>Avatar</legend>
            <input type="file" name="Avatar" placeholder="Avatar"><br>
            <img src="./images/Avatar/'..'" alt="No Avatar">
    </fieldset><br>
    <fieldset>
        <legend>New Password</legend>
            <input type="text" name="PASSWORD" placeholder="PASSWORD"><br><br>

            <input type="text" name="CONFIRMER" placeholder="CONFIRMER">
    </fieldset><br>
    <fieldset>
        <legend>Modifier</legend> 
        <input type="submit" value="Modifier">
    </fieldset>
</form>
<?php
    if(!isset($_POST'submit'])){
        include("connection.php");

        $pass = sha1($_POST'PASSWORD']);
        $confirm = sha1($_POST'CONFIRMER']);

        //Vérification du mdp
        if ($confirm && $pass && $pass == $confirm){
            $query=$cnx->prepare('UPDATE users SET PASSWORD = :PASSWORD WHERE id=:id');
            $query->bindValue(':PASSWORD',$pass,PDO::PARAM_INT);
            $query->bindValue(':id',$Auth->user('id'),PDO::PARAM_INT);
            $query->execute();
            $sendpass = 'Votre New Password est bien configuré !';
            $query->CloseCursor();
        }
    }
?>
iTACHi
Auteur

Si tu pourrais m'aider sur le systeme avatar , comment je pourrais m'y prendre pour faire en sorte que dans cette page , le membre puisse mettre son avatar , puis bah le changer , ce serait sympas , je vais m'y mettre de mon côté , mais je pense un peu galérer :lol:

En tout cas , merci à toi :) J'aurais bien cliqué vert , sur ta reponse mais ça close le sujet je pense :( puis vu que j'ai tjs besoin d'aide sur l'avatar :lol:

iTACHi
Auteur

oki merci , je te dirais :)

sinin j'ai un bug concernant l'update du mdp , quand tu charges la page , ça change le mdp automatiquement , du coup , bah j'ai testé avec ma copine , ça lui change le mdp et ça lui en met un autre :( avec le code que je t'ai cité plus haut , je comprends pas pk

Tu veux dire quand tu recharges la page?

iTACHi
Auteur

oui , enfin même quand on quitte , on va sur une autre , on revient , bim , ça le change sans qu'on touche a rien

iTACHi
Auteur

ah d'accord , je vais tester :)

iTACHi
Auteur

là , ça n'update pas :(

<?php
    if(isset($_POST'submit'])){
        include("connection.php");

        $pass = sha1($_POST'PASSWORD']);
        $confirm = sha1($_POST'CONFIRMER']);

        //Vérification du mdp
        if ($confirm && $pass && $pass == $confirm){
            $query=$cnx->prepare('UPDATE users SET PASSWORD = :PASSWORD WHERE id=:id');
            $query->bindValue(':PASSWORD',$pass,PDO::PARAM_INT);
            $query->bindValue(':id',$Auth->user('id'),PDO::PARAM_INT);
            $query->execute();
            $sendpass = '<span class="sendpass">Votre New Password est bien configuré !</span>';
            $query->CloseCursor();
        } else {
           if ($confirm && $pass && $pass != $confirm) {
          $nopass = '<span class="sendpass">Vos Password ne sont pas identiques !</span>';
          }
    }
}
?>
iTACHi
Auteur

:D Yes nikel , ça fonctionne :D

Merci à toi , serieux , tu m'enleves une grosse epine du pied , et comme ça , j'ai bien compris le fonctionnement , j'te remercie , et t'inquiète pas , j'te tiens au courant si jamais il y a un soucis où si j'arrive avec l'avatar :D

iTACHi
Auteur

bon alors voilà , j'ai crée tout un code via un tuto de creatiq , mais je ne sais pas comment faire pour insérer l'avatar dans ma bdd et ainsi le rendre visible au membre :(

voici le code :

<?php
$rep = 'img/' ;
$fichier = basename ($_FILES'avatar']'name']);
$taille_max = 200000;
$taille_origin = filesize($_FILES'avatar']'tmp_name']);
$ext = array('.png' , '.jpg' , '.jpeg', '.gif' , '.bmp');
$ext_origin = strchr($_FILES'avatar']'name'], '.');
if(isset($_POST'envoyer'])){
   include("connection.php");

   if(!in_array($ext_origin, $ext)) {
       $erreur = 'Vous devez uploader un fichier de type png , jpg , jpeg , gif ou bmp !';
   }
   if($taille_origin>$taille_max) {
       $erreur = 'Votre fichier est trop volumineux !';
   }
   if(!isset($erreur)) {
   if(move_uploaded_file($_FILES'avatar']'tmp_name'], $rep . $fichier)){
   echo 'Votre Avatar à été uploadé avec succes !';
      } else {
          echo 'Erreur ! Votre Avatar n\'à pas été uploadé !';
      }
   }

   if(isset($erreur)) {
      echo $erreur;
   }
   }
?>

l'avatar s'upload bien dans mon fichier sur mon disque dur , mais je ne sais pas du tout comment le rendre visible , surtout par id ... à moins de l'inserer dans ma bdd , une fois dans ma bdd , je saurais comment le rendre visible , mais je n'arrive pas à l'insérer :(

iTACHi
Auteur

j'y suis arrivé , exemple , dans ma bdd , sur mon id , il est dans avatar , sous luffy avatar.jpg ^^ Je ne sais pas si c'est bon , mais avec ma variable qui affiche les infos des membres , [code][code] [/code] ça m'affiche pas d'avatar :( De cette manière , j'ai l'image dans mon fichier img se situant dans mon dossier www , renommé avec l'id du membre , exemple : 1.jpg , et aussi dans ma bdd portant le nom original , exemple : luffy avatar.jpg :) Mais je n'arrive pas a afficher l'image , j'ai essayé plein de methode , je n'arrive pas a caller un img src avec un echo $Auth-user('avatar') :( Si tu as une idée de la façon de faire , elle serait la bienvenue :P Merci à toi :) Voici le code : [code]<?php if(isset($_POST['envoyer'])){
include("connection.php");

$rep = 'img/';
$fichier = basename($_FILES['avatar']['name']);
$taille_max = 200000;
$taille_origin = filesize($_FILES['avatar']['tmp_name']);
$ext = array('.png' , '.jpg' , '.jpeg', '.gif' , '.bmp');
$ext_origin = strchr($_FILES['avatar']['name'], '.');
$avatar = $_FILES['avatar'];//Dans le formulaire l'input type file doit avoir le nom "avatar".
$extention = strtolower(substr($avatar['name'],-3));//Récupération de l'extension et mise en minuscule.
//Important ! penser à sécuriser les extentions valides dans un tableau.
move_uploaded_file($avatar['tmp_name'],"img/".$Auth->user('id').".".$extention); $query=$cnx->prepare('UPDATE users SET avatar = :fichier WHERE id=:id'); $query->bindValue(':fichier',$fichier,PDO::PARAM_INT); $query->bindValue(':id',$Auth->user('id'),PDO::PARAM_INT); $query->execute(); if(!in_array($ext_origin, $ext)) { $erreur = 'Vous devez uploader un fichier de type png , jpg , jpeg , gif ou bmp !'; } if($taille_origin>$taille_max) { $erreur = 'Votre fichier est trop volumineux !'; } if(!isset($erreur)) { if($extention) { echo 'Votre Avatar à été uploadé avec succes !'; } else { echo 'Erreur ! Votre Avatar n\'à pas été uploadé !'; } } if(isset($erreur)) { echo $erreur; } } ?>

<form method="POST" action="compte.php" enctype="multipart/form-data">
<fieldset>
<legend>Avatar</legend>
<input type="file" name="avatar"><br>
<input type="hidden" name value="200000">
</fieldset>
<br>
<fieldset>
<input type="submit" name="envoyer" value="Uploader">
</fieldset>
<br>[/code]</form>

iTACHi
Auteur

C'est bon , ça s'affiche en local :D mais sur mon server , il veut pas l'afficher , peut-être le chemin qui n'est pas bon , je vais voir , j'te tiens au courant :)

iTACHi
Auteur

C'est bon , problème résolu :) Merci pour toute ton aide , tu m'as été d'un grand secours :D Je te valide le vert ^^

moi je cherche comment afficher l'avatar a partir de l'espace membre créer par creatiq.