IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème d'affichage après édition [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut Problème d'affichage après édition
    Bonsoir à tous,

    J'ai créé une interface administrateur qui permet à celui-ci de modifier les textes de sa page, en l'occurrence "Contact". J'ai donc utilisé du php et une base de donné. J'ai mis en place différents champs où il peut changer le texte et un bouton qui valide la saisie, l'enregistre dans la BDD et l'affiche sur la page "Contact" du site quand on l'a rafraichie.

    Je vous expose maintenant le problème, quand celui-ci clic sur le bouton, la BDD est modifié, un message disant que la modification a été prise en compte s'affiche mais la zone de texte (input) garde l'ancien contenu et donc n'affiche pas ce qui a été modifié. On est obligé de rafraichir la page admin après avoir cliqué sur le bouton pour que nos modifications apparaissent dans les champs.

    Je vous montre une partie du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <div class="corps">
    			<h2>CONTACT</h2>
    			<?php 
    				// On place dans une variable l'id transmit dans l'url		
    				$result = mysql_query("SELECT * FROM contact WHERE id_contact = 1");
     
    				while($data = mysql_fetch_array($result))
    				{	
    			?>
    			<form class="contenu1" action="" method="post">
     
    				<h4 style="text-decoration:underline">XXXXXX</h4>
    				<p>
    					<label>Responsable</label><br/>
    					<input type="text" name="Responsable1" value="<?php echo $data["contenu1"]; ?>" size="37"></input>
     
    				</p>
                                    <p>
    					<br/>
    					<input type="submit" name="Modifier1" value="Modifier"></input>
    				</p>
    			</form>
    				<?php
    					}
    					if(isset($_POST["Modifier1"]))
    					{
    						$lechamp01 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["Responsable1"])));
     
     
    						$result = mysql_query(" UPDATE contact SET contenu1='$lechamp01' WHERE id_contact = 1");
     
    					}
    				?>
    J'ai essayé de mettre un header mais cela ne marche pas.
    Si quelqu'un à une idée de commun rafraichir la page ou si il voit une erreur, je vous remercie.

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    C'est à mon sens dû au faite que dans la chronologie du code, tu récupère les données de la Bdd en 1er, et c'est après que tu effectue la mise à jour (le UPDATE).
    Il est donc normal qu'au moment où tu récupère les données, la nouvelle version n'y soit pas encore effectuée.

    Faut donc procéder de manière inverse, soit mettre à jour en 1er, puis après récupérer.

    Ne pas perdre de vue que le code ici est très procédural, donc exécuté ligne pas ligne, le déroulement a donc une importance.

  3. #3
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    C'est normal.

    Quand tu cliques sur ton bouton pour valider le formulaire, tu envoies au serveur différentes données. La valeur de Responsable1 et la valeur du bouton lui même, c'est d'ailleurs sur cette valeur que tu détermines si il faut faire l'update ou non.

    Au premier affichage, tu affiches juste ton formulaire puis tu testes si il connait la valeur du bouton, vu que non, il ne fait pas d'update. Pas de soucis.

    Après clic, second affichage donc, tu affiches ton formulaire puis tu testes si il connait la valeur du bouton, vu que oui, il fait l'update. Et c'est là que ça coince. Tu fais ton update après ton affichage.

    Quand tu cliqueras sur F5, tu renvoies toutes les données, ce qui fondamentalement ne change rien vu qu'au deuxième passage, tu as mis à jour ta base. C'est pour ça que l'affichage se met alors à jour. Mais au passage, t'auras mis 2 fois à jour ta base de la même façon. Ce qui n'est pas forcément l'idéal.

    Déplace donc ton bloc if avant ta requête SELECT et ça marchera mieux. Au passage. Vu que tu ne chopes qu'un seul enregistrement, pas besoin de le mettre dans un while.

    Ton code corrigé vite fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <div class="corps">
    			<h2>CONTACT</h2>
    			<?php 
    					if(isset($_POST["Modifier1"]))
    					{
    						$lechamp01 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['Responsable1'])));
     
     
    						$result = mysql_query(' UPDATE contact SET contenu1="'.$lechamp01.'" WHERE id_contact = 1");
    			
    					}
    				// On place dans une variable l'id transmit dans l'url		
    				$result = mysql_query('SELECT * FROM contact WHERE id_contact = 1');
    	 
    				while($data = mysql_fetch_array($result))
    				{	
    			?>
    			<form class="contenu1" action="" method="post">
     
    				<h4 style="text-decoration:underline">XXXXXX</h4>
    				<p>
    					<label>Responsable</label><br/>
    					<input type="text" name="Responsable1" value="<?php echo $data["contenu1"]; ?>" size="37"></input>
     
    				</p>
                                    <p>
    					<br/>
    					<input type="submit" name="Modifier1" value="Modifier"></input>
    				</p>
    			</form>
    				<?php
    					}
    				?>
    J'en ai profité pour changer la déclaration de tes chaînes de caractères. Quand tu les déclares entre ", le moteur va les parcourir entièrement à la recherche d'une variable à interpréter. Parfois, il y en a pas. Donc traitement inutile. Avec ', il ne parcourt pas. Reste plus qu'à concaténer intelligemment les morceaux de chaîne avec tes variables. Et hop, un truc optimisé en plus. Tu verras pas la différence sur un ou dix utilisateurs, ni même sur 100 mais bon, c'est toujours ça de gagner.

    EDIT: ah runcodephp a été plus rapide

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut
    Ha mais oui c'est évident j'y avais pas pensé, je m'excuse du dérangement et vous remercie c'est beaucoup mieux comme ça

    @gwinyam : En fait je n'ai mis qu'une partie du code car je ne voyais pas l'intérêt de tout vous mettre. Mais en fait la boucle while est utile vu qu'il y a une dizaine d'enregistrements.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème d'affichage après execution d'une macro
    Par ptitemar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/08/2007, 17h45
  2. Problème d'affichage après import Excel
    Par e040098k dans le forum IHM
    Réponses: 1
    Dernier message: 25/06/2007, 12h20
  3. Réponses: 2
    Dernier message: 18/07/2006, 09h29
  4. Problème d'affichage après un tri....
    Par lyim dans le forum Langage
    Réponses: 4
    Dernier message: 27/04/2006, 17h06
  5. [Menu] Problème d'affichage après redirection
    Par Pfeffer dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/03/2006, 21h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo