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 06/02/2012, 21h06   #1
Invité de passage
 
Homme Vainui TUAIVA
Développeur informatique
Inscription : novembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Vainui TUAIVA
Localisation : Polynésie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : novembre 2011
Messages : 19
Points : 1
Points : 1
Par défaut Problème d'insertion au rafraîchissement

Bonjour à tous,

Contexte:

J'ai un formulaire ordonné dans un tableau que je rempli et que je valide à ce moment là aucun problème l'insertion se passe très bien.

"LE problème":

Lorsque je rafraîchis ma page à l'aide de "F5" j'ai les précédentes données (données que je viens de saisir) qui s'insèrent automatiquement et cela donc à chaque rafraîchissement de page.

Question: Comment se fait-il? Je ne comprends pas. Quelqu'un pourrait-il m'expliquer?

Merci par avance.

Voici mon 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<HTML>
<center>
<HEAD>
	<title>Application Caisse de la STP</title>
	<!---Lien du fichie style.css-->
	<link rel="stylesheet" type="text/css" href="style/design.css"/>
	<link rel="shortcut icon" href="favicon.ico" type="images/x-icon"/>
	<script type="text/javascript" src="javascript/dept_xhr.js" charset="iso_8859-1"></script>
	<script type="text/javascript" src="javascript/nomchauff.js" charset="iso_8859-1"></script>
	<script type="text/javascript" src="javascript/soc.js" charset="iso_8859-1"></script>
	<title>Page d'accueil: CAISSE</title>
</HEAD>
<BODY>
<div id="fondec">
	<div id="bandeau">
		<h3>&nbspSociété de Gestion des transports</h3>	
	<div id="gauche">
		&nbsp
		<a href="interfaceOp.php">Réaliser inventaire</a>
		</br>
		<a href="operation.php">Opérations</a>
		</br>
		<a href="exportGlobal.php">Global journée</a>
		</br>
		<a href="suspendChauff.php">Suspendre un chauffeur</a>
		</br>
		<a href="depot.php">Dépôt</a>
	</div>
		<h1>Caisse</h1>
		<?php 
			include('verifSession.php');
			include('config.php');
		?>
		<a HREF="deconnexion.php">Se déconnecter?</a>&nbsp
		<a href="eure.php">Exporter</a>		
	</div>
<form name="frm" id="frm" action="<?php echo($_SERVER['PHP_SELF']);?>" method="POST">
<?php 
	$zql="SELECT IdSoc FROM t_recette WHERE dateSaisie=now() ORDER BY Idrecette DESC LIMIT 1";
	$reszql=mysql_query($zql) or die('Affiche pas la dernière société sélectionnée');		
	while($done=mysql_fetch_row($reszql))
	{ $test=$done[0]; }
 
	$qry="SELECT IdSoc from t_recette ORDER BY Idrecette DESC LIMIT 1";
	$result=mysql_query($qry) or die ('Affiche pas le numéro de la societe!');
	while($datas=mysql_fetch_row($result))
	{
		$dat=$datas[0];
	}
?>
<table border="1">
<tr>
	<th>Société</th>
	<th width="8%"><font face="times new roman"><b>Nom</b></font></th>
	<th width="6%"><font face="times new roman"><b>Matricule</b></font></th>
	<th width="4%"><font face="times new roman"><b>Ligne</b></font></th>
	<th width="10%"><font face="times new roman"><b>Date Recette</b></font></th>
	<th width="8%"><font face="times new roman"><b>Recette trieuse</b></font></th>
    <th width="8%"><font face="times new roman"><b>Recette</b></font></th>
	<th width="8%"><font face="times new roman"><b>Gazole</b></font></th>
    <th width="8%"><font face="times new roman"><b>Carte</b></font></th>
    <th width="8%"><font face="times new roman"><b>Relica</b></font></th>
	<th width="8%"><font face="times new roman"><b>Avance</b></font></th>
    <th width="10%"><font face="times new roman"><b>Observation</b></font></th>
</tr>
<tr>
	<td><input type="text" size="1" name="list0" value="<?php echo $test; ?>" onblur="controle(this.form);"/></td>
	<td><span id="blocNom"></span></td>
	<td><input type="text" name="idselect" size="7" readonly="readonly"/></td>
	<td width="10%"><span id='blocLigne'></span></td>
	<?php 
		$sqll="SELECT DATE_FORMAT(Daterecette, '%d/%m/%Y')
		FROM t_recette
		WHERE Daterecette=now()";
		$ress=mysql_query($sqll);	
		while($donnee=mysql_fetch_row($ress))
		{
			$date=$donnee[0];
		}
	?>
	<td><INPUT type="text" name="Date_Recette" size="10" value="<?php if (isset($date)) {echo $date;} ?>"></td>
	<td><input type="text" size="7" name="recetteMachine" onblur="controlerForm(this.form)"></td>
	<td><INPUT type="text" size="8" name="MontantRecette"></td>
	<td><INPUT type="text" size="8" name="Gazoline"></td>
	<td><INPUT type="text" size="8" name="CarteValeur" onblur="calculCV(this.value);" value="0"></td>
	<td><INPUT type="text" size="8" name="RelicaCarte"></td>
	<td><INPUT type="text" size="10" name="MontantAvance"></td>
	<td><INPUT type="text" size="10" name="Observation"></td>
	<input type="hidden" name="ligne">
</table>
 
<input type="submit" name="btsend" value="Enregistrer"/>
<?php
		if(isset($_POST['btsend']))
		{	
 
			$idsoc = $_POST['list0'];
			$idchauff=$_POST['idselect'];
			$ligne=$_POST['ligne'];
			$daterecette=$_POST['Date_Recette'];
			$recetteMachine = $_POST['recetteMachine'];
			$recette = $_POST['MontantRecette'];
			$gazole = $_POST['Gazoline'];
			$carte = $_POST['CarteValeur'];
			$relica = $_POST['RelicaCarte'];
			$avance = $_POST['MontantAvance'];
			$obs = $_POST['Observation'];
 
 
			$log=$_SESSION['login'];
			$req="SELECT IdUser FROM user WHERE login='$log'";
			$res=mysql_query($req) or die ('Erreur');
			while($data=mysql_fetch_row($res))
			{
				$iduser=$data[0];
			}
 
			//on écrit la requête sql
			$sql = "INSERT INTO t_recette(Idchaufgesco, Ligne, Daterecette, dateSaisie, Carte, 
			Relica, Avance, RecetteMachine, Recette, Observation, IdUser, Gazole,IdSoc) 
			VALUES('$idchauff','$ligne',STR_TO_DATE('$daterecette', '%d/%m/%Y'),now(),'$carte',
			'$relica','$avance','$recetteMachine','$recette','$obs','$iduser','$gazole','$idsoc')";
 
			// on insère les informations du formulaire dans la table
			mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
 
			/*Si il y a un montant pour les avances*/
			/*Alors la requête d'insertion s'exécute*/
		}	
			/*Réinitialise les variables*/
			$_POST['list0']="";
			$idchauff=0;
			$ligne=0;
			$datesaisie="";
			$daterecette="";
			$recetteMachine=0;
			$recette=0;
			$gazole=0;
			$carte=0;
			$relica=0;
			$avance=0;
			$obs="";
			$test=0;
			$sql="";
			$sql2="";			
?>
</div>
<script type="text/javascript">
    var maintenant = new Date();
    var jour = maintenant.getDate();
    var mois = maintenant.getMonth() + 1;
    var annee = maintenant.getYear();
    var heures = maintenant.getHours();
    var minutes = maintenant.getMinutes();
    var format  = ((minutes < 10) ? ":0" : ":");
    if (annee<2000) annee=annee+1900;
    document.write("<b>Recette(s) du "
    + jour + "." + mois + "." + annee + "<\/b>");
</script>
</br>
</br>
<!-- Tableau activité -->
<span id="blocSoc"></span>
<div id="piedpage">
</br>
	<div id="powered">SGT@Corporation</div>
</div>
</form>
</BODY>
</center>
</HTML>
vainuiz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 22h18   #2
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
C'est un cas typique car en faisant f5, le formulaire est de nouveau posté et donc intégré en base avec un autre identifiant.

Une des solution peut consister à tester le contenu de ton formulaire via une requête SQL qui va chercher la dernière insertion et la compare à la nouvelle insertion. Si et seulement si le contenu est différent, l'intégration peut être effectuée, sinon il s'agit d'un F5.
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 22h20   #3
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
Bonsoir,

C'est le fonctionnement standard.

En fait lorsque tu fait F5 le navigateur recharge les informations de la page, mais également les informations envoyé par le formulaire.

Du coup faire F5 revient à cliquer sur envoyer.
humitake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 22h50   #4
Invité de passage
 
Homme Vainui TUAIVA
Développeur informatique
Inscription : novembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Vainui TUAIVA
Localisation : Polynésie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : novembre 2011
Messages : 19
Points : 1
Points : 1
Par défaut Problème résolu

Bonjour à vous!

Merci pour vos propositions je suis passé par une autre alternative, c'est à dire que je fais le traitement d'insertion php sur une autre page et donc j'envoi le formulaire vers cette page et lorsque je refresh la page où se trouve le formulaire tout est ok!

Qu'en pensez-vous?

Merci encore pour vos réponses.
vainuiz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 23h07   #5
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Tu es vraiment sur que tout est ok ? Pas de nouvelles insertions même si tu utilises une page différente pour le traitement ?
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 00h17   #6
Invité de passage
 
Homme Vainui TUAIVA
Développeur informatique
Inscription : novembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Vainui TUAIVA
Localisation : Polynésie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : novembre 2011
Messages : 19
Points : 1
Points : 1
Laisse moi le temps de vérifier!

Mais sinon oui je penses bien que tout est à mon avantage!

Merci encore!
vainuiz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 05h57   #7
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 738
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 738
Points : 3 310
Points : 3 310
Citation:
Envoyé par vainuiz
Mais sinon oui je penses bien que tout est à mon avantage!
Théoriquement cela ne changera rien.

Ce problème est connu, et il n'y a pas lieu de faire pointer sur une autre page, on peu tout faire sur la même page.
Le moyen le plus courant de résoudre ce problème est de faire une redirection avec la fonction header().
Le principe est le suivant :
- Lors du "submit (soumission du formulaire), le serveur reçoit la demande, reçoit toutes les données à traiter.
1/ Si lors des vérifications on remarque une erreur, on n'effectue aucune insertion/mise à jour : On ne fait rien, pas de redirection.
2/ Si toutes les données sont valides, on effectue l'insertion/mise à jour et juste après la redirection.

Exemple :
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
34
35
36
37
38
39
40
41
42
43
44
<?php
include('verifSession.php');
include('config.php');
 
// Partie traitements
if (isset($_POST['btsend'])) {
    $erreur = FALSE;
    // Vérification des données
 
    if ($erreur === FALSE) {
        $sql = "INSERT INTO table (...) VALUES (...)";
        // On exécute la requête
 
        // Redirection
        header('Location: appli_caisse.php');
        exit();
    }
}
 
// Récupération de quelques données
$zql = "SELECT IdSoc FROM t_recette WHERE dateSaisie=now() ORDER BY Idrecette DESC LIMIT 1";
$reszql = mysql_query($zql) or die('Affiche pas la dernière société sélectionnée');		
$done = mysql_fetch_row($reszql);
$test = $done[0];
 
$qry = "SELECT IdSoc from t_recette ORDER BY Idrecette DESC LIMIT 1";
$result = mysql_query($qry) or die ('Affiche pas le numéro de la societe!');
$datas = mysql_fetch_row($result);
$dat = $datas[0];
 
// Partie Interface
?>
<html>
<head>
    <title>UN TITRE</title>
<head>
<body>
 
<form action="appli_caisse.php">
    ... etc ...
</form>
 
</body>
</html>
Quelques remarques au passage.
Tu effectue toute la construction de cette page en total relation du déroulement du code Html, cela même pour le déroulement du code Php.
Pourtant, le déroulement du Html et du Php n'ont aucun rapport entre eux.
Le Html sera interprété par un post client, un navigateur, et Php du coté serveur.
La différence est de taille.

Il préférable de faire en 1er tout ce qui est traitement, c'est à dire récupération/insertion/mise à jour/suppression des données en Bdd, manipulation de fichiers, etc ...
Puis de faire en dernier la partie interface, c'est à dire de générer le code Html.
Ceci va résoudre indirectement quelques problèmes, puis ça offre plus de possibilités.


Aussi, le fait de faire en 1er cette requête :
SELECT DATE_FORMAT(Daterecette, '%d/%m/%Y')
puis après l'insertion (le INSERT INTO ...), la dernier valeur obtenue ne sera pas celle qu'on vient d'insérer vu que l'insertion se fait après.

J'ai idée que tu actualises cette page pour justement obtenir cette dernière valeur, mais en faisant cela tu rencontres en cascade un 2ème problème de doublon.

Dans le déroulement, il faut en 1er effectuer l'insertion, et c'est après ça qu'il faut récupérer la donnée dans cette table, et là on obtiendra bien la dernière valeur précédemment insérée (plus besoin d'actualiser entre autre).
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h45.


 
 
 
 
Partenaires

Hébergement Web