[php] probleme compatibilité IE/FF/S/M/GC/O

Résolu
Bonjour tout le monde,
comme le titre ne l'indique pas forcement,
j'ai un probleme de compatibilité certes mais avec
6 navigateurs donc Internet Explorer, FireFox, Safari,
Maxthon, Goggle Chrome et Opera.

personnellement je me sers d'opera comme vous pourrez le constatez en bas ...
j'essaie de coder un site mais il ne marche parfaitement qu'avec opera 9, IE7 et maxthon 2
et j'ai juste un probleme de passage de variables apparement avec les autres.

un formulaire passe plusieurs variables d'une page A a une page B, puis C, puis D, etc ...
tout marche avec les 3 premiers navigateurs mais l'operation s'arrete dès la premiere page avec les autres.

en fait c'est un test a la page B qui verifie si tous les champs venant de la page A sont complets (peu importe le contenu) et qui, si ils le sont, affiche une phrase de confirmation.
si ils ne le sont pas tous, il affiche une phrase disant que les infos ne pas completes.
et enfin si il n'y a aucun champs rempli, il n'affiche rien.

je vous met une partie de mon code pour ceux qui ne voient pas ce que je veux dire :

- Page A contenant les infos et les envoyant vers la page B par formulaire

echo '  
<tr><td colspan="2" align="center"><form method="post" action="pageB.php"><br /></td></tr>

<tr><td colspan="2" align="center">Adresse de livraison différente </td></tr>

<tr><td colspan="2" align="center"> <i>(tous les champs sont obligatoires, sauf le complément d\'adresse)</i> <br /><br /></td></tr>

<tr><td colspan="2" align="center">M. &nbsp;<input type="radio" name="liv_civ" value="M"> Mme. &nbsp;<input type="radio" name="liv_civ" value="Mme"> Mlle. &nbsp;<input type="radio" name="liv_civ" value="Mlle"></td></tr>

<tr><td colspan="2" align="center">Nom : <input type="text" name="liv_nom">&nbsp; Prénom : <input type="text" name="liv_pnom"></td></tr>

<tr><td colspan="2" align="center">Adresse : <input type="text" name="liv_adr"> &nbsp; Complément d\'adresse : <input type="text" name="liv_adc" size="15"></td></tr>

<tr><td colspan="2" align="center">Code postal : <input type="text" name="liv_cp"> &nbsp; Ville : &nbsp; <input type="text" name="liv_ville"></td></tr>

<tr>
<td align="left"><br /><a href="panier.php"><img name="continuer" SRC="images/navigation/retour-out.jpg" onmouseover=this.src="images/navigation/retour-in.jpg" onmouseout=this.src="images/navigation/retour-out.jpg" border="0" alt="Retour" onclick="panier.php"/></a></td>

<td align="right"><br /><a href="livraison.php" ><input type="image" name="continuer" SRC="images/navigation/continuer-out.jpg" onmouseover=this.src="images/navigation/continuer-in.jpg" onmouseout=this.src="images/navigation/continuer-out.jpg" border="0" alt="Continuer" onclick="livraison.php"/></a></td>
</tr>
</form>
</table>';


- Page B recevant les infos de la Page A et verifiant les champs et affichant une phrase en conséquence :

	$liv_civ = $_POST['liv_civ'];
	$liv_nom = 	$_POST['liv_nom'];
	$liv_pnom = $_POST['liv_pnom'];
	$liv_adr = 	$_POST['liv_adr'];
	$liv_cp = $_POST['liv_cp'];
	$liv_ville = $_POST['liv_ville'];
	$liv_adc = $_POST['liv_adc'];

// code html et php \\
?>

<?php // test et affichage \\
if (empty($liv_civ) && empty($liv_nom) && empty($liv_pnom) && empty($liv_adr) && empty($liv_cp) && empty($liv_ville))
{}
else 
if (!empty($liv_civ) && !empty($liv_nom) && !empty($liv_pnom) && !empty($liv_adr) && !empty($liv_cp) && !empty($liv_ville)) 
echo '<tr><td align="center" colspan="2"> <font color="red"><i>Adresse de livraison alternative prise en compte.</i></font></td></tr>';

else echo '<tr><td align="center" colspan="2"><font color="red"><i> Il manque des informations pour l\'adresse de livraison alternative,<br />l\'adresse de livraison sera donc la m&ecirc;me que celle de facturation.</i></font></td></tr>';
?>


et normalement ca se repete sur 3-4 pages mais avec firefox, safari et gchrome ca s'arrete au premier passage de variables et je ne comprends pas pourquoi.

merci d'avance de votre aide
Configuration: Windows XP
Opera 9.64

17 réponses

  1. Bon, à mon avis, c'est là qu'il y a un soucis :
    <a href="livraison.php" ><input type="image" name="continuer" SRC="images/navigation/continuer-out.jpg" onmouseover=this.src="images/navigation/continuer-in.jpg" onmouseout=this.src="images/navigation/continuer-out.jpg" border="0" alt="Continuer" onclick="livraison.php"/></a>


    Si tu mets ce genre de chose à la place ?
    <button type="submit" name="continuer" style="border-style:none; background-color:inherit; padding:0px;"><img src="images/navigation/continuer-out.jpg" onmouseover='this.src="images/navigation/continuer-in.jpg"' onmouseout='this.src="images/navigation/continuer-out.jpg"' title="continuer" alt="continuer" /></button>
    1
    1. les onmouseover et onmouseout, c'est pas sur l'image mais sur le bouton :)

      exemple :

      <button type="submit" onmouseover='document.getElementById("limage").src="images/navigation/continuer-in.jpg"' onmouseout='document.getElementById("limage").src="images/navigation/continuer-out.jpg"' name="continuer" style="border-style:none; background-color:inherit; padding:0px;">
      <img src='images/navigation/continuer-out.jpg' id='limage' />
      </button>
      1
      1. Bonjour,

        Normalement, une balise TABLE ne peut pas contenir de balise FORM.
        Certains navigateurs sont permissifs, et l'interprètent bien. D'autres s'en tiennent aux règles. Du coup, ton formulaire qui se termine de cette façon : "</tr></form></table>" n'est pas valide pour certains navigateurs.
        Il faudrait sortir le <form> du <table> : "</tr></table></form>".

        Voir aussi à l'ouverture de ces balises, dont tu n'as pas donné le code, s'il faut aussi inverser. Normalement, <form> s'ouvre avant <table>.

        Xavier
        0
        1. salut, merci de ta reponse mais le probleme persiste.
          j'ai fais comme tu m'as conseillé et j'ai sorti les balises form
          de la <table> mais rien ne change.

          y aurait il des regles particulieres a respecter concernant les formulaires
          sous chrome safari et firefox ?
          0
          1. A priori non.
            Tu peux donner le code source complet de ta dernière version ?
            0
            1. bien sur, voila ce qui se trouve entre les balises <body> :

              <?php 
              
              
              	if(isset($_SESSION['code']))
              	{
              	
              	echo '	<form method="post" action="livraison.php"><table align="center" border="0">
              					<!--<tr><td>Poids total : '.$_SESSION['poids'].'g &nbsp; / &nbsp; Montant total : '.$_SESSION['montant'].'&euro;</td></tr>-->
              			<!-- si il y a au moins une erreur, on affiche la liste en haut du formulaire -->';
              					
              echo '					<tr><td align="center" colspan="2" class="titre"><font color="white"><h2>Etape 2 : Vos informations personnelles</h2></font></td></tr>
              					<tr>
              						<td colspan="2" align="center"><br />Votre adresse de facturation : </td>
              					</tr>
              					<tr><td colspan="2" align="center"><font color="red"> <i>(par défaut, l\'adresse de livraison sera celle de facturation) </i></font><br /><br /></td></tr>
              					<tr>
              						<td colspan="2" align="center">Nom et Pr&eacute;nom : &nbsp;';
              								if($_SESSION['civ'] == "M") {echo 'M.';} 
              								
              								if($_SESSION['civ'] == "Mme") {echo 'Mme.';} 
              								
              								if($_SESSION['civ'] == "Mlle") {echo 'Mlle.';}
              			echo	'	
              						'.$_SESSION['nom'].' &nbsp;
              						'.$_SESSION['prenom'].'
              						</td>
              					</tr>
              					
              					<tr>
              						<td colspan="2" align="center">Adresse : &nbsp;'.$_SESSION['adr1'].'</td>
              					</tr>';
              					
              			if(isset($_SESSION['adr2']))
              			{			
              			echo '	<tr>
              						<td colspan="2" align="center">Compl&eacute;ment d\'adresse : &nbsp;'.$_SESSION['adr2'].'</td>
              					</tr>';
              			}
              			echo '	<tr>
              						<td colspan="2" align="center">Code Postal et Ville : &nbsp;'.$_SESSION['cpostal'].' &nbsp;
              						'.$_SESSION['ville'].'</td>
              					</tr>';
              					
              			if(!empty($_SESSION['telf']))
              			{ 
              			echo '	<tr>
              						<td colspan="2" align="center">Numéro de téléphone fixe : '.$_SESSION['telf'].'</td>
              					</tr>';
              			}
              			
              			if(!empty($_SESSION['telp']))
              			{ 
              			echo '	<tr>
              						<td colspan="2" align="center">Numéro de téléphone portable : '.$_SESSION['telp'].'</td>
              					</tr>';
              			}
              		echo '  <tr><td colspan="2" align="center"><br /></td></tr>
              				<tr><td colspan="2" align="center">Adresse de livraison différente </td></tr>
              				<tr><td colspan="2" align="center"> <i>(tous les champs sont obligatoires, sauf le complément d\'adresse)</i> <br /><br /></td></tr>
              				<tr><td colspan="2" align="center">M. &nbsp;<input type="radio" name="liv_civ" value="M"> Mme. &nbsp;<input type="radio" name="liv_civ" value="Mme"> Mlle. &nbsp;<input type="radio" name="liv_civ" value="Mlle"></td></tr>
              				<tr><td colspan="2" align="center">Nom : <input type="text" name="liv_nom">&nbsp; Prénom : <input type="text" name="liv_pnom"></td></tr>
              				<tr><td colspan="2" align="center">Adresse : <input type="text" name="liv_adr"> &nbsp; Complément d\'adresse : <input type="text" name="liv_adc" size="15"></td></tr>
              				<tr><td colspan="2" align="center">Code postal : <input type="text" name="liv_cp"> &nbsp; Ville : &nbsp; <input type="text" name="liv_ville"></td></tr>
              				<tr>
              					<td align="left"><br /><a href="panier.php"><img name="continuer" SRC="images/navigation/retour-out.jpg" onmouseover=this.src="images/navigation/retour-in.jpg" onmouseout=this.src="images/navigation/retour-out.jpg" border="0" alt="Retour" onclick="panier.php"/></a></td>
              					<td align="right"><br /><a href="livraison.php" ><input type="image" name="continuer" SRC="images/navigation/continuer-out.jpg" onmouseover=this.src="images/navigation/continuer-in.jpg" onmouseout=this.src="images/navigation/continuer-out.jpg" border="0" alt="Continuer" onclick="livraison.php"/></a></td>
              				</tr>
              				
              				</table></form>';
              	}
              	else 
              	echo 	'<table border="1" align="center">
              				<tr>
              					<td>
              						<table>
              							<tr>
              								<td><h3 align=center><font color="black">Si vous n\' êtes pas encore client(e), <br />vous pouvez vous inscrire <a href="inscription.php" style="color:#A91101;">ICI</a></font></h3></td>
              							</tr>
              						</table>
              					</td>
              					<td><h3 align=center><font color="black">Sinon si vous êtes déjà inscrit(e), <br>veuillez vous identifiez à coté --></font></h3></td>
              				</tr>
              			</table>';
              ?>
              0
              1. merci mais ca ne fonctionne toujours pas,
                serait-ce a cause du this.src où je ne met pas de quote ni de guillemets ?
                j'ai testé avec les guillemets ca fais rien, pour les quote je ne sais
                pas comment faire la concatenation avec un echo ' ';

                en tout cas encore merci de ton aide
                0
                1. probleme toujours pas resolu ...

                  si quelqu'un a une idée je suis preneur, merci
                  0
                  1. Est-ce que W3C ne fait pas en sorte à ce que les erreurs qu'il trouve, c'est pour que le site s'adapte sur toutes les plateformes ?
                    0
                    1. Toutes... Non parce que certains navigateurs (IE pour ne citer que lui) ne respectent pas obligatoirement les standars, mais la plupart oui.
                      Essaye de passer le code html de des pages de ton site au validateur http://validator.w3.org/ et de corriger ce qui ne respecte pas les standards...
                      0
                      1. un grand merci jeangilles ca marche parfaitement :)
                        merci a toi aussi Reivax962, mais c'est bizarre que ta solution, qui ressemble
                        a celle de jeangilles, ne fonctionnait pas ...

                        et en ce qui concerne heryu, deja je ne comprends pas ta phrase
                        et en plus w3c ne m'a jamais aidé a part a remplacer mes align=center par align="center" ...

                        en tout cas merci de votre aide a tous
                        0
                        1. et en plus w3c ne m'a jamais aidé a part a remplacer mes align=center par align="center"

                          ben si, justement, ca te permet d'être sur que ton codemarche sur tous les navigateurs sans avoir forcément besoin de tester sur tous ! (enfin pour la partie HTML et CSS tout du moins)
                          et c'a marchera aussi normalement, sauf gros bouleversement, sur les prochaines versions des navigateurs si les normes sont correctement respectées
                          0
                          1. ouais d'accord mais si c'est juste des oublis de guillemets ca va pas
                            empecher le site de fonctionner quoi.

                            au fait Archeus01, d'apres w3c justement, sur la page en ligne (donc non corrigée puisque je travaille en local)
                            j'ai seulement 14 erreurs du type "center" ou <br> au lieu de <br />, que j'ai corrigé dans la nouvelle
                            version donc ...
                            0
                            1. hum ...

                              c'est encore moi et oui :)

                              le code de jeangilles marche parfaitement, sauf que dans IE et Maxthon ca me fait un vilain
                              bouton gris plus grand que mon image avec mon image par dessus ...

                              j'aimerais savoir si ce serait possible de rendre transparent uniquement le bouton
                              en arriere plan et laisser l'image par dessus visible,
                              j'ai testé opacity:0.0; filter:alpha(opacity=0); mais ca rend la case completement transparente ...

                              désolé de vous embeter encore une fois ;)

                              au cas ou vous vous demandez oui j'ai chercher dans le forum et dans google, apres si je suis aveugle c'est pas ma faute hein :)
                              0
                              1. je me repond moi meme lol :)

                                j'ai resolu tout le probleme finalement, et c'etait une erreur quelque peu invisible
                                etant donné que vous etes passé a coté :) :)

                                l'erreur venait du lien a href associé au bouton, fallait tout simplement
                                enlever le a href et maintenant ca marche sans button type submit ...

                                je met le code du bouton au cas ou :

                                <td align="right"><br /><input type="image" name="continuer" SRC="images/navigation/continuer-out.jpg" onmouseover=this.src="images/navigation/continuer-in.jpg" onmouseout=this.src="images/navigation/continuer-out.jpg" border="0" alt="Continuer" onclick="livraison.php"/></td>

                                c'est juste ma ligne de code du debut mais sans <a href="paiement.php"> </a> c'est tout

                                merci de votre aide les gars
                                0