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'insertion au rafraîchissement


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Points : 11
    Points
    11
    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 : 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
    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>

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    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.

  3. #3
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    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.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Points : 11
    Points
    11
    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.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Tu es vraiment sur que tout est ok ? Pas de nouvelles insertions même si tu utilises une page différente pour le traitement ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Laisse moi le temps de vérifier!

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

    Merci encore!

  7. #7
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    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 : 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
    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]

Discussions similaires

  1. problème d'insertion de données
    Par Falgan dans le forum ASP
    Réponses: 2
    Dernier message: 06/04/2004, 09h29
  2. Probléme d'insertion par défault
    Par xavier62 dans le forum SQL
    Réponses: 7
    Dernier message: 28/11/2003, 13h03
  3. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58
  4. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 01h02
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

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