Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2010, 19h22   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 1
Points : 1
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 :
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.
t0m.35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 19h43   #2
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 691
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 691
Points : 3 258
Points : 3 258
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.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 19h45   #3
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
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 116
Points : 2 142
Points : 2 142
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 :
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
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 20h00   #4
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 1
Points : 1
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.
t0m.35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h16.


 
 
 
 
Partenaires

Hébergement Web