Problème de passage de variables IE

Bonjour à toute la communauté,
Alors, j’ai un problème qui apparait sous IE mais pas sous FF, vous me direz classique tout le monde le sait. Mais c’est assez surprenant et j’avoue ne pas bien comprendre pourquoi, d’où ce sujet.

J’ai un premier fichier creation_article.php (formulaire de saisi) et un second creation.php (insert des données dans ma base Mysql).

fichier creation_article.php :


<fieldset><legend>Fiche article</legend>
	<div><form method=post action="creation.php">
		<table border="0" cellspacing="0">
		<?php
					
			$cadre1= "couleur1";
			$cadre2= "couleur2";
			echo '	<tr class='.$cadre1.'><td class="border_svpho_saisi">Code article</td><td class="border_svpho_saisi"> '.$list["A1ART"].'</td></tr>
					<tr class='.$cadre2.'><td class="border_svpho_saisi">Fournisseur</td><td class="border_svpho_saisi"> '.$list["A1FRS"].'</td></tr>
					<tr class='.$cadre1.'><td class="border_svpho_saisi">Grp/Fam</td><td class="border_svpho_saisi"> '.$list["A1FAM"].'</td></tr>
					<tr class='.$cadre2.'><td class="border_svpho_saisi">Libelle</td><td class="border_svpho_saisi"> '.$list["A1LIB"].'</td></tr>
					<tr><td>Responsable</td>
						<td><select name="rep">
							echo '</select>
						</td>
					</tr>
					<tr><td><label for="charte">Charte</label></td><td><input type=text id="charte" name=charte maxlength="60" size="60"></td></tr>
					<tr><td><label for="pack">Packaging</label></td><td><input type=text id="pack" name=pack maxlength="60" size="60"></td></tr>
					<tr><td><label for="des">Designation MEP (max 60 caract&egrave;res)</label></td><td><input type=text id="des" name=design maxlength="60" size="60"></td></tr>
					<tr><td><label for="sel1">Dead Line</label></td><td><input type=text id="sel1" name=deadli><img src="../images/calendrier.png" onclick="return showCalendar(\'sel1\', \'%d/%m/%Y\', \'24\', true);" title="Calendrier"/><img src="../images/reset.png" onclick="effacerDateAll()" title="Effacer date" /></td></tr>
					<tr><td colspan=2><input type=submit value="Enregistrer" onClick="return verifCreaArticle()"><input type=reset value="Effacer"><input type=button value="Fermer" onClick="self.close()"></td></tr>
					<input type=hidden name="art" value="'.$list["A1ART"].'">
					<input type=hidden name="gfa" value="'.$list["A1FAM"].'">
					<input type=hidden name="lib" value="'.$list["A1LIB"].'">
					<input type="hidden" name="fourn" value="'.$list["A1FRS"].'">
					';
		?>
		</table>
	</form></div>
</fieldset>

Fichier creation.php


if (isset($_POST["art"]) && $_POST["art"] != "")$art =  trim(htmlspecialchars(addslashes($_POST["art"]))); else $art = '';
if (isset($_POST["rep"]) && $_POST["rep"] != "") $rep = trim(htmlspecialchars(addslashes($_POST["rep"]))); else $rep = '';
if (isset($_POST["charte"]) && $_POST["charte"] != "") $charte = trim(htmlspecialchars(addslashes($_POST["charte"]))); else $charte = '';
if (isset($_POST["pack"]) && $_POST["pack"] != "") $pack = trim(htmlspecialchars(addslashes($_POST["pack"]))); else $pack = '';
if (isset($_POST["design"]) && $_POST["design"] != "") $design = trim(htmlspecialchars(addslashes($_POST["design"]))); else $design = '';
if (isset($_POST["deadli"]) && $_POST["deadli"] != "") $deadli = trim(htmlspecialchars(addslashes($_POST["deadli"]))); else $deadli = '01/01/2009';
if (isset($_POST["gfa"]) && $_POST["gfa"] != "") $gfa = trim(htmlspecialchars(addslashes($_POST["gfa"]))); else $gfa = '';
if (isset($_POST["lib"]) && $_POST["lib"] != "") $lib = trim(htmlspecialchars(addslashes($_POST["lib"]))); else $lib = '';
 $fourn = $_POST["fourn"]; //else $frs = ''; force la variable post dans la variables fourn sans aucun test d'existence.
	
$file_mysql = "../connexion/connexion_mysql.inc.php";
if (file_exists($file_mysql)) include($file_mysql);
require "../fonctions/fonction.php";
	
$sql_rech = "SELECT ART_ID FROM svpho_art WHERE ART_ID = '".$art."'";
$rep_sql_rech = mysql_db_query($db, $sql_rech) or die ("La requête n'est pas valide : ".$sql_creation.". L22<br>");
if (mysql_num_rows($rep_sql_rech) == 0)
{
	//insertion dans la table de suivi photos article.
	$sql_creation = "INSERT INTO `svpho_art` (ART_ID, ART_FRS, ART_GFA, ART_LIB, ART_REP, ART_CHT, ART_DES, ART_PCK, ART_ETA, ART_DLI, ART_IMP, ART_IPP, ART_IZT, ART_IAS, ART_TOT) VALUES ('".$art."', '".$fourn."', '".$gfa."', '".$lib."', '".$rep."', '".$charte."', '".$design."', '".$pack."', '00','".date_mydb($deadli)."', '', '', '', '', '')"; //echo $sql_creation; exit;
		
	$rep_sql_creation = mysql_db_query($db, $sql_creation) or die ("La requête n'est pas valide : ".$sql_creation.". L27<br>");
		
	
	echo '<script>window.opener.location.reload(true); 
	self.close();</script>';
}
	
else echo "l'article <font color=red>".$art."</font> existe d&eacute;j&agrave; dans la base de donn&eacute;es. <input type=button value=\"Fermer\" onClick=\"self.close()\" name=\"button\">";

Certaines lignes ont été enlevées, mais elles n’étaient pas utiles à la compréhension du problèmes.

Le problème est que sous FF j’ai ma variable fourn : <input type=“hidden” name=“fourn” value="’.$list[“A1FRS”].’"> qui passe bien et est bien reçue dans le fichier creation.php, mais sous IE la variable n’existe pas et donc n’est pas définie.
Résultat j’ai ma requête qui passe bien sous FF mais pas sous IE car le champ qui recoit la variable fourn est un “int” non initialiser et donc le script s’arrête.
Même fichiers, même environnement, même base et 2 résultats différents.

affichage requête sous FF :

INSERT INTO svpho_art (ART_ID, ART_FRS, ART_GFA, ART_LIB, ART_REP, ART_CHT, ART_DES, ART_PCK, ART_ETA, ART_DLI, ART_IMP, ART_IPP, ART_IZT, ART_IAS, ART_TOT) VALUES (‘104328203’, ‘104’, ‘BAT’, ‘VERRE A EAU X3’, ‘2’, ‘’, ‘’, ‘’, ‘00’,‘2009-01-01’, ‘’, ‘’, ‘’, ‘’, ‘’)

affichage requête sous IE :
Notice: Undefined index: fourn in C:\Program Files\EasyPHP 3.0\www\jja_dev\suivi_photos\creation.php on line 15
INSERT INTO svpho_art (ART_ID, ART_FRS, ART_GFA, ART_LIB, ART_REP, ART_CHT, ART_DES, ART_PCK, ART_ETA, ART_DLI, ART_IMP, ART_IPP, ART_IZT, ART_IAS, ART_TOT) VALUES (‘104328203’, ‘’, ‘BAT’, ‘VERRE A EAU X3’, ‘2’, ‘’, ‘’, ‘’, ‘00’,‘2009-01-01’, ‘’, ‘’, ‘’, ‘’, ‘’)

Quelqu’un sait pourquoi ça fait ça?

Cordialment cycyand1.

La seule remarque que j’ai, c’est que dans le input de fourn tu as mis des guillements à type=“hidden” et pas aux autres. Alors ca vient sans doute de là. Mais après, pourquoi et comment, ca … :stuck_out_tongue:

Cela ne change rien, en principe IE sait gérer ça.

Fait un var_dump($_POST); dans IE & Fx et file nous le bousin.

De plus pense à protéger tes variables avec mysql_real_escape_string.
Edité le 21/04/2009 à 20:41

@emilienP : le problème ne vient pas de la j’ai testé aussi cette solution mais j’avais toujours le même résultat. C’est juste une non-régularité dans la rédaction de mon code. (Pas bien ;))

@sans nom : je vais tester cette option “var_dump($_POST)” et vérifier si la variable existe bien. Et merci pour “mysql_real_escape_string” :slight_smile: ça va renforcer la protection de mes bases bien que la plupart de mes variables sont dans des “select”.

Solution alternative:
Sinon ce problème peut se solutionner en faisant tout simplement un include du second fichier à savoir creation.php ou une copie du code dans le premier fichier en enlevant les lignes plus nécessaires. Mais bon je trouverai bien pourquoi ce problème est apparu.

Cordialement cycyand1.

Si ça marche sous Fx, c’est que c’est un problème client. IE fait un truc que Fx ne fait pas (ou l’inverse).

Tu fais quoi niveau JS? Tu crées pas les champs dynamiquement?

Avec l’“include” ça marche avec les 2 navigateurs, je n’ai plus de soucis de ce côté là et l’ennui c’est que le problème initial n’en est pas plus résolu.

Niveau JS, aucune vérification n’est faite dans ce fichier donc pas de JS.

Pour les champs dynamiques, si j’ai compris ce que tu me demandes. les 4 premiers champs proviennent d’une première requête odbc dont la donnée qui est défectueuse. Pourtant, elle s’affiche bien dans la fenêtre avant l’insertion dans la table. d’où mon problème.

affichage dans la fenetre :

<tr class='.$cadre2.'><td class="border_svpho_saisi">Fournisseur</td><td class="border_svpho_saisi"> '.$list["A1FRS"].'</td></tr>

envoi de la donnée par la methode “post” :

<tr class='.$cadre2.'><td class="border_svpho_saisi">Fournisseur</td><td class="border_svpho_saisi"> '.$list["A1FRS"].'</td></tr>

les variables sont les même $list[“A1FRS”].

Cdlt Cycyand1

Salut,

Est ce que tu peux coller :

  1. le code source du formulaire html généré … sous ie par exemple
  2. la fonction verifCreaArticle

Il y a peut etre dans ta fonction JS du code qui doit faire l’objet d’un hack ie.

Merci

Bonjour la communauté,
désolé pour le retard mais j’étais très occupé.
bref voici le code de la fonction verifCreaArticle :

function verifCreaArticle()
{
	if (document.getElementById('article').value == '' && document.getElementById('frs').value == '' && document.getElementById('gfa').checked == '' && document.getElementById('lib').checked == '' )
	{
		alert ('Veuillez remplir au moins un champ pour lancer la recherche.');
		//document.formulaire.nom.focus();
		return false;
	}
}

Pour le code source IE, je le posterai ce midi.