UPDATE après déconnexion

Fermé
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 4 nov. 2014 à 22:25
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 25 nov. 2014 à 20:43
Bonjour,

J'ai un problème très bizarre, lorsque j'effectue une mise à jour d'un membre, cette mise à jour s'effectue uniquement si je me déconnecte et ensuite je me reconnecte alors là la mise à jour est efectuée.
Merci beaucoup de votre aide, car je n'ai rien trouvé de semblable sur le net.
Avez-vous des idée? voici ma méthode
    public function UpdateMembre() {
        $req = self::$db->prepare('SELECT id_adherent FROM tb_adherent WHERE username = :username');
        $req->bindParam(':username', $this->username, PDO::PARAM_STR);
        $req->execute();
        $this->id_adherent = $req->fetchColumn();

        $req = self::$db->prepare('UPDATE tb_adherent SET nom = :nom, prenom = :prenom, email = :email, naissance = :naissance, fixe = :fixe, mobile = :mobile, adresse = :adresse, lieu_dit = :lieu_dit, code_postal = :code_postal, ville = :ville, username = :username WHERE id_adherent = :id_adherent');
        $req->bindParam(':id_adherent',     $this->id_adherent,     PDO::PARAM_INT);        
        $req->bindParam(':nom',             $this->nom,             PDO::PARAM_STR);
        $req->bindParam(':prenom',          $this->prenom,          PDO::PARAM_STR);
        $req->bindParam(':email',           $this->email,           PDO::PARAM_STR);
        $req->bindParam(':naissance',       $this->naissance,       PDO::PARAM_STR);
        $req->bindParam(':fixe',            $this->fixe,            PDO::PARAM_STR);
        $req->bindParam(':mobile',          $this->mobile,          PDO::PARAM_STR);
        $req->bindParam(':adresse',         $this->adresse,         PDO::PARAM_STR);
        $req->bindParam(':lieu_dit',        $this->lieu_dit,        PDO::PARAM_STR);
        $req->bindParam(':code_postal',     $this->code_postal,     PDO::PARAM_STR);
        $req->bindParam(':ville',           $this->ville,           PDO::PARAM_STR);
        $req->bindParam(':username',        $this->username,        PDO::PARAM_STR);
        $req->execute();
        
        echo '<center><span class="MiseAJour">Vos modifications ont été mis à jour !</span></center>';
    }


A voir également:

11 réponses

Liightman Messages postés 49 Date d'inscription lundi 17 novembre 2014 Statut Membre Dernière intervention 7 janvier 2016 9
17 nov. 2014 à 22:07
Salut!

Déjà ton code est propre! C'est assez rare :p
C'est par rapport à la superglobale SESSION ou tu vérifie directement dans la base de donnée?
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
17 nov. 2014 à 23:03
Bonjour
Merci je desespérais d'avoir un peu d'aide. Peux tu m'en dire un peu plus je ne comprend pas s'il te plait.
Déjà suis je obligé de faire un SELECT avant le UPDATE ?
Pour bien que tu comprennes, mes données je peux les modifier sans problème mais pour l'affichage dans mon formulaire elles apparaissent seulement après déconnexion.
Merci
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
Modifié par labourette le 17/11/2014 à 23:09
Je te donne mon fichier de vérification de données si çaa peut te servir à m'aider
<?php
if(!empty($_POST)) {
    $username = Security::clean($_POST['username']);
    $password = Security::clean($_POST['password']); 

    if(empty($username) || empty($password)) {
        $error = 'Veuillez entrer le Login et le Mot de passe';
    } else {
        $password = Security::hash($password);

        $user = new User();

        $user->setUsername($username);
        $user->setPassword($password);

        if($user->login()) {
            $_SESSION['id_adherent'] = serialize($user);

            if(isset($_POST['remember'])) {
                $value = Security::crypt($user->getUsername()) . '_' . Security::crypt($user->getPassword());
                setcookie('mon_site', $value, time() + 3600 * 24 * 3);
            }
            header('Location: index.php?body=compte_profil&type=compte');
            exit();
        } else {
            $error =  'La combinaison Login/Mot de passe est incorrect';
        }
    }
}
echo isset($error) ? $error . '<br>' : '';
?>
0
Liightman Messages postés 49 Date d'inscription lundi 17 novembre 2014 Statut Membre Dernière intervention 7 janvier 2016 9
18 nov. 2014 à 06:10
Salut!

Si j'ai bien compris, quelqu'un remplie un formulaire pour faire des modifications de compte (par exemple), les changements se font en base de données, mais nécessite une déconnexion pour que ça apparaissent sur la page c'est bien ça?

Si c'est le cas, donne moi le script de la page où sont affichés les informations pour m'assurer que je connais bien la résolution au problème
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
Modifié par labourette le 18/11/2014 à 13:00
Bonjour
oui c'est exactement ça.
Voici mon formulaire où les membres font leurs modifications necessaire.
Tu as bien compris les modifs dans le formulaires'affiche après déconnexion mais dans la BDD c'est immédiat.
<?php
if(isset($_POST)&&!empty($_POST)) {

    $nom   = $_POST['nom'];
    $prenom  = $_POST['prenom'];
 $email   = $_POST['email'];
 $naissance  = $_POST['naissance_3'] ? trim($_POST['naissance_3']) . '-' .  trim($_POST['naissance_2']) . '-' .  trim($_POST['naissance_1']) : '';
 $fixe   = $_POST['fixe'];
 $mobile   = $_POST['mobile'];
 $adresse  = $_POST['adresse'];
 $lieu_dit  = $_POST['lieu_dit'];
    $code_postal = $_POST['code_postal'];
 $ville   = $_POST['ville'];
    $username  = $_POST['username'];

        $user = new User();

        $user->setNom($nom);
        $user->setPrenom($prenom);
  $user->setEmail($email);        
        $user->setNaissance($naissance);
  $user->setFixe($fixe);
  $user->setMobile($mobile);
  $user->setAdresse($adresse);
  $user->setLieuDit($lieu_dit);
  $user->setCodePostal($code_postal);
  $user->setVille($ville);
  $user->setUsername($username);

        $user->UpdateMembre();

if(preg_match('#(\d{4})-(\d{1,2})-(\d{1,2})#is', $user->getNaissance(), $match)) $date = array( 1 => $match[3], 2 => $match[2], 3 => $match[1] );
}
?>

<br/>

<div id="content">
 <form id="formulaire" action="" method="post">

  <table cellpadding="0" cellspacing="3">

   <tr>
    <th colspan="6">Coordonné :</th>
   </tr>
   <tr>
    <td width="20%">Nom :</td>
    <td width="30%"><input name="nom" class="content_input" size="30" type="text" value="<?php echo $user->getNom();?>"/></td>
    <td width="20%">Prénom :</td>
    <td width="30%"><input name="prenom" class="content_input" size="30" type="text" value="<?php echo $user->getPrenom();?>"/></td>
   </tr>
   <tr>
    <td width="20%">Adresse :</td>
    <td width="30%"><input name="adresse" class="content_input" size="30" type="text" value="<?php echo $user->getAdresse();?>"/></td>
    <td width="20%">Lieu Dit :</td>
    <td width="30%"><input name="lieu_dit" class="content_input" size="30" type="text" value="<?php echo $user->getLieuDit();?>"/></td>
   </tr>
   <tr>
    <td width="20%">Code Postale :</td>
    <td width="30%"><input name="code_postal" class="content_input" size="30" type="text" value="<?php echo $user->getCodePostal();?>"/></td>
    <td width="20%">Ville :</td>
    <td width="30%"><input name="ville" class="content_input" size="30" type="text" value="<?php echo $user->getVille();?>"/></td>
   </tr>
   <tr>
    <th colspan="3">Contact :</th>
   </tr>
   <tr>
    <td width="20%"><img src="image/fixe.png" alt="Téléphone fixe" title="Téléphone fixe" height="22" width="22"/> Téléphone fixe :</td>
    <td width="30%"><input name="fixe" class="content_input" size="30" type="text" value="<?php echo $user->getFixe();?>"/></td>
    <td width="20%"><img src="image/mobile.jpg" alt="Téléphone mobile" title="Téléphone mobile" height="22" width="22"/> Téléphone mobile :</td>
    <td width="30%"><input name="mobile" class="content_input" size="30" type="text" value="<?php echo $user->getMobile();?>"/></td>
   </tr>
   <tr>
    <td width="20%"><img src="image/mail.png" alt="Email" title="Email" height="22" width="22"/> Adresse mail :</td>
    <td width="30%"><input name="email" class="content_input" size="30" type="text" value="<?php echo $user->getEmail();?>"/></td>
    <td width="20%"></td>
    <td width="30%"></td>
   </tr>
   <tr>
    <th colspan="4">Informations supplémentaires :</th>
   </tr>
   <tr>
    <td width="20%">Date de Naissance :</td>
    <td width="30%" id="naissance" name="naissance">
     <input name="naissance_1" class="content_input" type="text" value="<?php echo @$date[1] ?>" size="2" maxlength="2"/>
     <input name="naissance_2" class="content_input" type="text" value="<?php echo @$date[2] ?>" size="2" maxlength="2"/>
     <input name="naissance_3" class="content_input" type="text" value="<?php echo @$date[3] ?>" size="4" maxlength="4"/>
     jj/mm/aaaa
    </td>
    <td width="20%"><img src="image/login.png" alt="Login" title="Login" height="22" width="22"/> Login :</td>
    <td width="30%"><input name="username" id="login_modif_membre"  onFocus="this.blur()" size="20" type="text" value="<?php echo $user->getUsername();?>"/><div><span class="info">Le Login ne peut-être modifié !</span></div></td>
   </tr>

  </table>

<!--#######################################################################################################################################-->

   <input type="submit" class="submit" value="Enregistrer"/>

 </form>
</div>

juste pour info même si je réactulise la page il y a aucun effet
0
Liightman Messages postés 49 Date d'inscription lundi 17 novembre 2014 Statut Membre Dernière intervention 7 janvier 2016 9
18 nov. 2014 à 17:50
Je pense que tu ne m'a pas donner le bon script. Ce que tu me donne c'est le formulaire de pour modifier, mais une fois le formulaire rempli, il y a une redirection je suppose qui mène vers la page du compte de l'utilisateur.

Si c'est le cas, c'est ce script qu'il me faut.

0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
Modifié par labourette le 21/11/2014 à 17:10
Bonjour
En fait depuis lle début j'ai mon formulaire de connexion sur la page d'accueil
<form name="SeConnecter" id="SeConnecter" action="index.php?body=connexion_verif&type=accueil" method="post" enctype="multipart/form-data">
    <fieldset class="fieldset_connexion">
        <legend class="legend_connexion">Se connecter</legend>
  <center><b><p style="margin: 5px; padding: 5px;">Réservé aux membres</p></b></center>

   <label for="login">Login :</label>  
   <center><input type="text" id="login" name="username" class="login" value="" tabindex="1"/></center> 
<br/> 
            <label for="motdepasse">Mot de passe :</label> 
            <center><input type="password" id="motdepasse" name="password" class="motdepasse" value="" tabindex="2"/></center> 
<br/>
<!--#######################################################################################################################################-->
   <input type="checkbox" name="remember"><span class="SeSouvenir">Se souvenir de moi</span>
<!--#######################################################################################################################################-->
   <center><input src="image/envoyer.png" width="70%" type="image" name="connexion" class="connexion_form" border="0" Value="" align="middle"/></center>  
 </fieldset>
</form>

ensuite ma vérification pour savoir si tout est ok pour le membre
<?php
if(!empty($_POST)) {
    $username = Security::clean($_POST['username']);
    $password = Security::clean($_POST['password']); 

    if(empty($username) || empty($password)) {
        $error = 'Veuillez entrer le Login et le Mot de passe';
    } else {
        $password = Security::hash($password);

        $user = new User();

        $user->setUsername($username);
        $user->setPassword($password);

        if($user->login()) {
            $_SESSION['id_adherent'] = serialize($user);

            if(isset($_POST['remember'])) {
                $value = Security::crypt($user->getUsername()) . '_' . Security::crypt($user->getPassword());
                setcookie('mon_site', $value, time() + 3600 * 24 * 3);
            }
            header('Location: index.php?body=compte_profil&type=compte');
            exit();
        } else {
            $error =  'La combinaison Login/Mot de passe est incorrect';
        }
    }
}
echo isset($error) ? $error . '<br>' : '';
?>

ensuite le membre est connecté son compte s'affiche
<div id="SousMenu">
 <ul>
  <li><b>MENU :</b></li>
  <li> - <a href="./index.php?body=liste_membre&type=compte">Liste des membres</a></li>
  <li> - <a href="./index.php?body=modif_profil&type=compte">Modifier mon profil</a></li>
  <li> - <a href="./index.php?body=change_password&type=compte">Changer mon Mot de Passe</a></li>
  <li> - <a href="./Personnage.php">Partitions de Musique</a></li>
 </ul>
</div>

<h2>Mon espace</h2>

<br/>

<table class="CompteProfil" border="3">
 <tr>
  <th>Nom</th>
  <th>Prénom</th>
  <th>Adresse Mail</th>
  <th>Date Naissance</th>
  <th>Tél. Fixe</th>
  <th>Tél. Mobile</th>
 </tr>
 <tr>
  <td><?php echo $user->getNom(); ?></td>
  <td><?php echo $user->getPrenom(); ?></td>
  <td><?php echo $user->getEmail(); ?></td>
  <td><?php echo $user->getNaissance(); ?></td>
  <td><?php echo $user->getFixe(); ?></td>
  <td><?php echo $user->getMobile(); ?></td>
 </tr>
</table>

<table class="CompteProfil" border="3">
 <tr>
  <th>Adresse</th>
  <th>Lieu dit</th>
  <th>Code Postal</th>  
  <th>Ville</th>
  <th>Login</th>
 </tr>
 <tr>
  <td><?php echo $user->getAdresse(); ?></td>
  <td><?php echo $user->getLieuDit(); ?></td>
  <td><?php echo $user->getCodePostal(); ?></td>
  <td><?php echo $user->getVille(); ?></td>
  <td><?php echo $user->getUsername(); ?></td>
 </tr>
</table>

ensuite il clique sur le lien "Modifier mon profil"
Le formulaire que je t'ai envoyé s'affiche et là le problème, une fois le formulaire envoyé la redirection est sur la même page en fait.
Je ne vois rien d'autre
Merci
0
Liightman Messages postés 49 Date d'inscription lundi 17 novembre 2014 Statut Membre Dernière intervention 7 janvier 2016 9
21 nov. 2014 à 20:51
Très bien, merci des précisions, ça permet de mieux me repérer! Tu as créer un objet, l'objet "user". L'objet est disponible pendant la session en cours, tu doit donc actualiser l'objet afin que les modifications apparaissent sans à avoir actualiser (déconnexion de ) la session.

J'ai des exemples bien concret avec le cas de la superglobale SESSION, mais sous forme d'objet, ce problème là ne m'est jamais arrivé donc je pense que ça viens de ça, mais ma certitude n'est pas de 100%
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
23 nov. 2014 à 07:19
Bonjour
Merci de té réponse c'est exactement le problème que j'ai, malheureusement tu n'as pas pu me donner une explication, par contre je ne vois pas trop comment résoudre ce problème, je vais encore faire des recherches.
Si par hasard il te viendrais une idée on ne sait jamais.
Merci quand même pour tout.
0
Liightman Messages postés 49 Date d'inscription lundi 17 novembre 2014 Statut Membre Dernière intervention 7 janvier 2016 9
23 nov. 2014 à 09:30
Désolé je pensai que le fait d'avoir dit d'actualiser ton objet t'aurais mis la puce à l'oreille ^^.

Comme dit précédemment, ce problème ne m'est arrivé qu'avec les SESSION, je sais comment les résoudre donc je vais essayer d'appliquer la même logique pour ton objet.

Une fois que le membre valide le formulaire, tu refais une requête sur ton objet afin d'y actualiser les informations.

Voilà un petit shéma pour t'aider.

/**
  *
  *Traitement du formulaire
  *
  */
if(!empty($_POST)) {
   //contenu du traitement

/* Si on modifie les valeurs en bdd */

//alors

//on refait notre objet User on y stockant dedans les variables qu'on viens de mettre en bdd
}


Concrètement, voilà comment je procède pour ce problème avec la superglobale SESSION


if($_GET['post']=="ok")
		{
			$erreurRechargerPage=false;
			$Emploi = new Emploi($bdd);
			$erreur= $Emploi->verifierMetier($emploi);
			$test=$Emploi->selectArgent();
			if($erreur==NULL)
			{ 
				$metier=$Emploi->enregistrerEmploi($emploi); // modification dans la base de donnés	
				$Emploi->modifArgent();	//modification d'argent en base de données
				if($metier!='0')
				{
				$_SESSION['emploi']=$emploi; // stockage de la variable qui viens d'être mise en bdd dans la superglobale session!
				header('Location: index.php?page=metier&result=done');
				ob_flush(); 
				}
			}

			else{
			//Message d'erreur concernant VerifDonnees. 
				$erreurRechargerPage=true;
			}
		}
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
25 nov. 2014 à 20:43
Bonjour
Un très grand merci pour ton aide, malheureusement après 2 jours de galère, je ne comprends toujours pas malgrès tes réponses je reste avec mes problèmes non résolus.
J'ai vraiment essayé de comprendre je suis désolé, peux tu me donner une solution concrété s'il te plait, je t'en serai très reconnaissant.
Merci de tout coeur.
0