Double insertion dans la base MySql sous IE

Résolu/Fermé
Tantor8 - 21 mai 2008 à 14:42
 bigD1485 - 25 juil. 2011 à 21:47
Bonjour,

Après avoir visité plusieurs forums, dont celui-ci, avec des sujets similaires au mien je n'ai toujours pas trouver de réponse.

Donc la situation est la suivante:
j'ai un formulaire qui doit enregistrer un déstockage dans une base MySql, si le stock possède un sous stock la modification s'éffectue après demande du sous stock. Soit un select qui apparait dans ce même formulaire. La page se recharge après séléction et enregistre le déstockage.

Le problème étant que sous FireFox tout fonctionne bien mais sous IE l'enregistrement est fait deux fois. J'ai pus lire qu'il pourais s'agir de mon code HTML, j'ais alors tous enlever pour avoir uniquement l'HTML et la seule erreur que me donne W3C est l'absence de "action" dans mon formulaire.

En effet comme le formulaire se charge plusieur fois avec des forme différente (select si sous-stock ou non) j'ai alors intégrer du javascript dans mon code php selon le cas pour passer au formulaire suivant:

        echo "<script>document.form.action='prepa_commande.php';
		document.form.submit();
		</script>";
	}		
}else{/*si la requette est null, le code barre ou le code article ne correspond à aucun enregistrement*/
	echo "	<script>alert('La saisie ne correspond à aucun article en stock.');
			document.form.action='prepa_commande.php';				
                        document.form.submit();
		</script>";


Jusqu'a maintenant dans mes autres formulaires cette façon fonctionnait bien, je l'utilise pour forcer automatiquement le changement de formulaire sans que l'utilisateur intervienne.

Enfin je pense que cela peut venir de là mais si besoin je peut poster tout mon code (+200 ligne), et si quelqu'un à le même problème ou sais comment le résoudre veuillez m'aider.

Je vous remerci de votre aide.

PS: je programme en local avec EasyPhp.
A voir également:

1 réponse

Tantor8 Messages postés 46 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 9 janvier 2009 2
21 mai 2008 à 15:34
Re,
j'ajoute mon code pour les courageux cela aidera peut-être à la compréhension:
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <LINK REL=stylesheet HREF='style.css' TYPE='text/css'>
  <script language='javascript'  type="text/javascript">
<!--
function valider(){
	alert("valider");
	document.form.action="enregistre_prepa.php";
	document.form.submit();
}
-->
</script>
</head>
<body  onload="document.form.valid.focus()">

<form name="form" method="post" enctype="multipart/form-data">
<?php
if (isset($_SESSION['identification'])){
	if($_SESSION['fonction']=="gestion_commandes.php"){	
		$stock=$_SESSION['stock'];
		require_once ("connect.php");
		require_once ("connexion.php");
		require_once ("ExecRequete.php");
		$connexion = Connexion (NOM, PASSE, BASE, SERVEUR);
		/*soit on a le code barre soit le code article*/
		if ((isset($_POST['code_article'])&& $_POST['code_article']!="")||(isset($_SESSION['article'])&&$_SESSION['article']!="")){
			if(isset($_POST['code_article'])){
				$code_article="".$_POST['code_article'];
				$_SESSION['article']=$code_article;
			}else{
				$code_article=$_SESSION['article'];
			}
			$requete="SELECT * FROM article WHERE Code_article = '$code_article'";
			/*On prépare déjà la requete d'update qui sera utiliser plus tard*/
			$finreq="Code_article = '$code_article'";
		}else{
			if(isset($_POST['code_barre'])&&$_POST['code_barre']!=""){
				$code_barre="".$_POST['code_barre'];
				$_SESSION['code_barre']=$code_barre;
			}else{
				$code_barre=$_SESSION['code_barre'];
			}
			$requete="SELECT * FROM article WHERE Code_barre ='$code_barre'";
			$finreq="Code_barre ='$code_barre'";
		}
		if(isset($_POST['quantite'])){
			$_SESSION['quantite']=$_POST['quantite'];	
		}
		$quantite=$_SESSION['quantite'];
		$resultat=ExecRequete($requete, $connexion);
		$tab=array();
		$tab=mysql_fetch_assoc($resultat);
		if($tab!=null){
			$stock_emp=$tab[$_SESSION['stock']];
			print_r($stock_emp);
			$tab_emp=array();
			$tab_emp=explode("||",$stock_emp);
			print_r($tab_emp);
			$nb_emp=count($tab_emp);
			if($nb_emp>1&&!isset($_POST['emplacement'])){
			/*s'il y a plus d'un emplacement on laisse le choix*/
			?>
			<table border="0" cellpadding="0" cellspacing="0" width="98%" onload="valid.focus()">
				<tr>
					<td colspan='3' height="35" align="center" bgcolor="#CCCCCC"><span class="tittrefen">&nbsp;&nbsp;Choix de l'emplacement</span></td>
				</tr>
				<tr><td width="20%" height="35" align="right" bgcolor="#CCCCCC">
					<select class="textefiche3" name="emplacement" size="1" style="background-color:#FFFF55"> 
					<?php for($i=0;$i<$nb_emp;$i++){
							if(isset($tab_emp[$i])){
							$tab_emp2[$i]=explode("$*",$tab_emp[$i]);
							?>
							<OPTION value=<?php echo $tab_emp[$i];?> ><?php echo $tab_emp2[$i][0];?></OPTION>
					<?php 	}	
						}?>
					</select>
				</td><td width="5%" height="35" bgcolor="#CCCCCC">
				</td><td width="20%" height="35" align="left" bgcolor="#CCCCCC">
					<input id="valid" name="valid" type="submit" onClick="valider()" value="Valider">
				</td></tr>
			</table>
			<?php
			}else{
				if(isset($_POST['emplacement'])){
					$emp=$_POST['emplacement'];
						echo "<script>alert(\"post $emp\");</script>" ;
				}else{
					$emp=$stock_emp;
					echo "<script>alert(\"session $emp\");</script>" ;
				}
				$res="";
				/*on enlève la quantité nécéssaire à la commande*/	
				for($i=0;$i<$nb_emp;$i++){
				echo "<script>alert(\"dans for $tab_emp[$i] -- $emp\");</script>" ;
					if(strcmp($tab_emp[$i],$emp)==0){
					echo "<script>alert(\"dans if\");</script>" ;
						$tab_emp2=explode("$*",$tab_emp[$i]);
						/*si le stock existe*/
						if($tab_emp2[0]!=""){
							/*si la quantité déplacée est supérieur à la quantité en stock on déplace uniquement ce que contient le stock*/
							if($quantite>$tab_emp2[1]){
								$quantite=$tab_emp2[1];
								if($quantite!='0'&&$quantite!=""){
									echo "<script>alert(\"La quantité désirée est indisponible en stock. Nouvelle quantité:'$quantite' \")</script>";
								}else{
									echo "<script>alert(\"Le stock est épuisé\")</script>";
								}
							}
							echo "<script>alert(\"modif\");</script>" ;
							/*on fait la modif de valeur*/
							$tab_emp2[1]=$tab_emp2[1]-$quantite;
							$tab_emp[$i]=$tab_emp2[0]."$*".$tab_emp2[1];
						}else{
							$quantite='0';
							echo "<script>alert(\"Stock inexistant\")</script>";
						}
					}
					if($i!=0){
						$res.="||";
					}
					$res.=$tab_emp[$i];
					echo "<script>alert(\"fin for $tab_emp[$i] -- $emp\");</script>" ;
				}
				if($quantite!='0'){
				/*on utilise la variable finreq creer au début*/
					if(isset($emp)){
						//echo "<script>alert(\"req: UPDATE article SET  $stock = '$res' WHERE $finreq\");</script>" ;
						$requete="UPDATE article SET  $stock = '$res' WHERE $finreq";
						ExecRequete ($requete, $connexion);
					}
					
					/*on référence le mouvement dans l'historique*/
					$ID_emp=$_SESSION['ID'];
					$id_article=$tab['ID_article'];
					$time=time();
					$quantite_gstock=0;
					$Emplacement_Gstock=$tab['Emplacement_Gstock'];
						$tmp_gstock=explode("||",$Emplacement_Gstock);
						$nb_gstock=count($tmp_gstock);
						$tab_gstock=array();
						for($i=0;$i<$nb_gstock;$i++){
							$tab_gstock[$i]=explode("$*",$tmp_gstock[$i]);
							if(isset($tab_gstock[$i][1])){
								$quantite_gstock+=$tab_gstock[$i][1];
							}
						}
					$quantite_web=0;
					$Emplacement_web=$tab['Emplacement_web'];
						$tmp_web=explode("||",$Emplacement_web);
						$nb_web=count($tmp_web);
						$tab_web=array();
						for($i=0;$i<$nb_web;$i++){
							$tab_web[$i]=explode("$*",$tmp_web[$i]);
							if(isset($tab_web[$i][1])){
								$quantite_web+=$tab_web[$i][1];
							}
						}
					$quantite_picking=0;
					$Emplacement_picking=$tab['Emplacement_picking'];
						$tmp_picking=explode("||",$Emplacement_picking);
						$nb_picking=count($tmp_picking);
						$tab_picking=array();
						for($i=0;$i<$nb_picking;$i++){
							$tab_picking[$i]=explode("$*",$tmp_picking[$i]);
							if(isset($tab_picking[$i][1])){
								$quantite_picking+=$tab_picking[$i][1];
							}
						}
					switch ($stock){
						case 'Emplacement_picking':
							$quantite_picking-=$quantite;
							break;
						case 'Emplacement_web':
							$quantite_web-=$quantite;
							break;
						case 'Emplacement_Gstock':
							$quantite_gstock-=$quantite;
							break;
					}
					/*7 car on déstock
					echo "<script>alert(\"insert histo\");</script>" ;*/
					$requete = "INSERT INTO historique values('','$time','7','$ID_emp','$quantite_picking','$quantite_web','$quantite_gstock','$id_article')";
					$resultat = ExecRequete ($requete, $connexion);
					
					/*on modifi le tableau des données saisie*/
					$tabS=array();
					$tabS[0]=$tab['Code_article'];
					$tabS[1]=$tab['Designation_A'];
					$tabS[2]=$tab_emp2[0];
					$tabS[3]=$quantite;
					$nb_saisie=count($_SESSION['tabSaisie']);
					$tab_saisie=$_SESSION['tabSaisie'];
					$tab_saisie[$nb_saisie]=$tabS;
					$_SESSION['tabSaisie']=$tab_saisie;
		
					/*if(!isset($_POST['code_barre'])){
						if(isset($_SESSION['code_barre']))$_SESSION['code_barre']="";
					}
					if(!isset($_POST['code_article'])){
						if(isset($_SESSION['article']))$_SESSION['article']="";
					}*/
				}
				echo "<script>document.form.action='prepa_commande.php';
							document.form.submit();
					</script>";
			}
			
		}else{/*si la requette est null, le code barre ou le code article ne correspond à aucun enregistrement*/
		echo "	<script>alert('La saisie ne correspond à aucun article en stock.');
							document.form.action='prepa_commande.php';
							document.form.submit();
					</script>";
		}
	?>
</form>	
<?php
	Deconnexion($connexion);
	}else{
	echo "<script language='Javascript'>
		document.location.href='autorisation.php';
		</script>";
	}
}else{
	echo "<script language='Javascript'>
		document.location.href='identification.php';
		</script>";
	}
?>
</body>
</html>


Pendant que j'y suis, si vous savez comment faire des scrolbarlorsqu'on insère du code dans ce forum, meric de me le faire savoir.
Merci de votre aide.
0
Tantor8 Messages postés 46 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 9 janvier 2009 2
22 mai 2008 à 14:51
Bon, pour résoudre mon problème j'ai finalement contourné le problème en ajoutant un test.

En effet si j'ai bien compris d'après ce que j'ai lu dans d'autres posts, IE interprète deux fois la page, et la deuxième fois j'ai des informations qui ne correspondent plus car une modification à déjà été faite. J'ai alors ajoute un if pour que la seconde fois (ne comportant pas tous les paramètres) ne change rien dans la base.

J'ai alors le fonctionnement que je cherchais, même si je n'ai pas vraiment trouvé de solution.

Si vous avez un problème similaire il serait bon de le faire savoir, merci

a+
0
rottweiler > Tantor8 Messages postés 46 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
11 nov. 2009 à 15:44
ca vient de ton formulaire et tout particulièrement une fonction onSubmit je supose, j'ai rencontré le même problème sous ie
0
rottweiler > Tantor8 Messages postés 46 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 9 janvier 2009
11 nov. 2009 à 16:04
vire ca c'est inutile puisqu etu utilise un formulaire avec un bouton submit

document.form.submit();

tu envois deux submit du coup !!
0
merci pour ces réponses!
ca ma débloquer et étant développer débutant c'est génial!
encore merci
0