Site qui fonctionne avec php 4.4.4. et pas sous 4.3.10

Eléphant du PHP | 271 Messages

21 juin 2007, 10:01

Bonjour,

Cas n°1 :
J'ai réalisé un site pour mon lycée et pour le tester j'ai utilisé mon hébergement perso. qui est chez Nuxit avec une version php 4.4.4. et register_globals à on.

Cas n°2 :
J'ai transféré l'ensemble du site sur le serveur académique (Education Nationale) qui supporte une version php 4.3.10 sous kwartz.0 et register_globals à off.

Ce qui ne va pas :
Dans le cas N°1 : ce type de lien fonctionne très bien mais pas dans le cas n°2
echo '<a href="index2.php?page=contact/forum.php&Numero=1&debut='.$debut2.'">'.$i.'</a>';
exemple du cas n°1 : http://www.qcmresto.fr/IDF2/index.php?p ... /forum.php
exemple du cas n°2 : http://www4.ac-lille.fr/~iledeflandre/i ... /forum.php

Dans le cas n°1 : le code javascript ci-dessous fonctionne très bien mais pas dans le cas n°2.
(ce code alerte le visiteur que son post est enregistré mais sera validé par l'administrateur du site)
<SCRIPT LANGUAGE="JavaScript">
function VerifForm()
{
	adresse = document.livre.email.value;
	var place = adresse.indexOf("@",1);
	var point = adresse.indexOf(".",place+3);

	if (livre.message2.value == "") 
	{
		alert('Veuillez indiquer votre message.'); 
		return false;
	}
	else
	{
		if (livre.pseudo.value == "") 
		{
			alert('Veuillez indiquer un pseudo.'); 
			return false;
		}
		else
		{
			if (adresse!="")
			{
				if ((place > -1)&&(adresse.length > point+2)&&(point > 1))
				{
					return true;
				}			
				else
				{
					alert('Votre adresse e-mail est incorrecte.'); 
					return false;
				}
			}
			else
			{
				return true;
			}			
		}
	}
}
</SCRIPT>
Est ce que quelqu'un peut m'expliquer et m'aider car là je suis un peu dépassé ?
Merci d'avance à tous.

Ci - dessous le code complet de la page :
<HTML>
<HEAD>
	<TITLE>Site Internet du Lycée Professionnel Ile de Flandre d'Armentières</TITLE>
<LINK rel=stylesheet type="text/css" href="style.css">
<style type="text/css">
<!--
#menu a {
display:inline;
color:#0033FF;
text-decoration:none;
}
-->
</style>
<SCRIPT LANGUAGE="JavaScript">
function VerifForm()
{
	adresse = document.livre.email.value;
	var place = adresse.indexOf("@",1);
	var point = adresse.indexOf(".",place+3);

	if (livre.message2.value == "") 
	{
		alert('Veuillez indiquer votre message.'); 
		return false;
	}
	else
	{
		if (livre.pseudo.value == "") 
		{
			alert('Veuillez indiquer un pseudo.'); 
			return false;
		}
		else
		{
			if (adresse!="")
			{
				if ((place > -1)&&(adresse.length > point+2)&&(point > 1))
				{
					return true;
				}			
				else
				{
					alert('Votre adresse e-mail est incorrecte.'); 
					return false;
				}
			}
			else
			{
				return true;
			}			
		}
	}
}
</SCRIPT>
</HEAD>

<BODY BGCOLOR="#FFFFFF">
<div id="menu">
<?
	require("admin/config.php");
	$mysql_link =  MYSQL_CONNECT("$localhost","$login","$mot") OR DIE("Unable to connect to database !!");
	@mysql_select_db($dbName ,$mysql_link ) or die( "Unable to select database ??");
	
	if ($Numero=="2")
	{
		$message2 = ereg_replace("(\r|\n){1,2}", "<br>", $message2);
		$dater=date("Y-m-d H:i:s");
		$req=mysql_query("INSERT INTO forum (dater,pseudo,mail,question,niveau,affiche) VALUES ('$dater','$pseudo','$email','$message2','1','N')");
?>
		<SCRIPT LANGUAGE="Javascript">
			alert ("Votre message a été sauvegardé dans le forum.\nIl s'affichera après validation de l'administrateur du site.");
		</SCRIPT>
<?
	}
?>

<TABLE CELLPADDING=0 CELLSPACING=0 WIDTH="100%" BORDER=0>
<TR>

	<TD WIDTH="100%" VALIGN=TOP>
		<TABLE CELLPADDING=0 CELLSPACING=0 WIDTH="100%" BORDER=0>
		<TR>
			<TD width="100%">
			<b><em><h3>Vous êtes sur le forum</h3></em></b><br>

			</TD>
		</TR>
		<TR>
			<TD COLSPAN=3>
				<TABLE CELLPADDING=10 CELLSPACING=0 WIDTH="100%" BORDER=1 BORDERCOLOR=#808080 style="border-collapse: collapse" ALIGN=MIDDLE>
				<TR>
				  <TD ALIGN=LEFT VALIGN=MIDDLE WIDTH=100%>
						<div align=justify>
						<font face="Arial" size=1 color=#000000>
<?
	$req3=mysql_query("SELECT * FROM forum WHERE affiche LIKE 'O' AND niveau LIKE '1' ORDER BY dater DESC");
	$nbr3=mysql_numrows($req3);
	if ($nbr3=="0") 
	{ 
		echo "<FONT FACE=\"Arial\" SIZE=2 COLOR=#000000><b><center>Aucun message dans le forum</center></b>";
	}
	else
	{
		if ($debut+5<=$nbr3) { $fin=$debut+5; } else { $fin=$nbr3; }
		for ($i=$debut;$i+1<=$fin;$i++)
		{
			$pseudo = mysql_result($req3,$i+0,"pseudo");
			$mail = mysql_result($req3,$i+0,"mail");
			$question = mysql_result($req3,$i+0,"question");
			$dater = mysql_result($req3,$i+0,"dater");
			$dater2= substr($dater,8,2)."/".substr($dater,5,2)."/".substr($dater,0,4)." à ".substr($dater,11,8);	
			
			echo "<font size=2>$question</font><br>";

			if ($mail=="")
			{
				echo "<div align=right><i>$pseudo, le $dater2</i>";
			}
			else
			{
				echo "<div align=right><i><A HREF=\"MAILTO:$mail\">$pseudo</A>, le $dater2</i>";
			}
			echo "</div>";

			$req4=mysql_query("SELECT * FROM forum WHERE affiche LIKE 'O' AND niveau LIKE '2' AND dater LIKE '$dater'");
			$nbr4=mysql_numrows($req4);
			if ($nbr4!="0")
			{
				$question = mysql_result($req4,0,"question");
				
?>
				<br>
				<TABLE CELLPADDING=2 CELLSPACING=0 WIDTH="100%" BORDER=0 ALIGN=CENTER>
				<TR>
					<TD VALIGN=TOP ALIGN=LEFT WIDTH=100% HEIGHT=6 BGCOLOR=#EAFFEA>
						<div align=justify><font face=Arial size=2"><? echo "$question"; ?><br></font>
					</TD>
				</TR>
				</TABLE>

<? }
			
			echo "<br>";
			echo "<font color=#808080>";
			for ($j=1;$j<=270;$j++) { echo "·"; }
			echo "</font><br>";
		}
		
		$nbrpage=ceil($nbr3/5);
		echo "<FONT FACE=\"Arial\" SIZE=2 COLOR=#000000><center>";
		for ($i=1;$i<=$nbrpage;$i++)
		{
			$debut2=5*($i-1)+0;
			if ($debut2!=$debut)
			{
					echo '<a href="index2.php?page=contact/forum.php&Numero=1&debut='.$debut2.'">'.$i.'</a>';
			}
			else
			{
				echo "<b>$i</b>";
			}
			if ($i!=$nbrpage) { echo " | "; }
		}
		}
	
?>					
				</TD>
				</TR>
				</TABLE><br>

             

                <TABLE CELLPADDING=0 CELLSPACING=0 WIDTH="100%" BORDER=0>
		<TR>
			<TD WIDTH=200 ALIGN=LEFT VALIGN=MIDDLE BGCOLOR=#ffffff HEIGHT=22><b><em><blink><h3>Poster un message</h3></blink></em></b>

				<font face=Arial size=2 color=#000000>
			</TD>
			<TD WIDTH=10 ALIGN=LEFT VALIGN=MIDDLE HEIGHT=22>
				<font size=2>&nbsp;
			</TD>
		</TR>
		<TR>
			<TD COLSPAN=3>
				<TABLE CELLPADDING=10 CELLSPACING=0 WIDTH="100%" BORDER=0 BORDERCOLOR=#808080 style="border-collapse: collapse" ALIGN=MIDDLE>
				<TR>
					<TD ALIGN=CENTER VALIGN=MIDDLE>

						<FORM id="formulaire_de_contact" METHOD="POST" ACTION="index2.php?page=contact/forum.php" NAME="livre" onSubmit="return VerifForm()">
						<font size=2>Pour laisser un message dans le forum, remplissez le formulaire ci-dessous et validez.<br>
						Votre message apparaîtra dans le forum qu'après validation par l'administrateur du site.</font>
<?
						echo "<br><br><font face=Arial size=1 color=#808080>";
						for ($j=1;$j<=120;$j++) { echo "·"; }
?>
						</font><div align=justify>
						<font face="Arial" size=1 color=#000000>
						L'administrateur du site est susceptible de supprimer, préalablement à sa diffusion, toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site ou qui serait contraire à la loi.
						Vous disposez d'un droit d'accès, de modification, de rectification et de suppression des données vous concernant (art. 34 de la loi Informatique et Libertés" du 6 janvier 1978). Vous pouvez, à tout moment, demander que vos contributions à ce livre d'or soient supprimées en contactant l'<a class=bleu HREF="MAILTO:[email protected]">administrateur du site</a>).
<?
						echo "</div><font face=Arial size=1 color=#808080>";
						for ($j=1;$j<=120;$j++) { echo "·"; }
?>
						</font><br>
						
						<div>
						<label for="nom">Pseudo*</label>
						<INPUT TYPE="TEXT" id="nom" NAME="pseudo" VALUE="">
						</div>
						<div>
						<label for="email">Votre adresse E.mail</label>
						 <INPUT TYPE="TEXT" id="email" NAME="email" VALUE="">
				  </div>
						 <div>
						 <label for="sujet">Votre message*</label>
						<TEXTAREA NAME="message2"></TEXTAREA>
						</div>
						<INPUT TYPE="HIDDEN" NAME="Numero" VALUE="2"><INPUT TYPE="HIDDEN" NAME="debut" VALUE="<? echo "$debut"; ?>">
						<div>
						<input type="reset" id="reset" name="Submit" value="Tout effacer">  
						<input type="submit" id="submit" name="Submit" value="Envoyer">
						</div>
											
	
						<br><font size=1>*</font> : Champs obligatoires.
						</FORM>
					</TD>
				</TR>
			  </TABLE>
			</TD>
		</TR>
		</TABLE>

	</TD>
	<TD>&nbsp;</TD>
</TR>
</TABLE>

</div>
</BODY>
</HTML>
Patience et obstination sont des qualités !

Eléphant du PHP | 51 Messages

21 juin 2007, 10:07

je suis pas pro PHP mais si j'ai bien lu ton code PHP certaine boucle ne sont pas fermer et ecrit <?php?> au lieu de <??>
Il y a ceux qui pensent, Il y a ceux qui croient et Il y a ceux qui doutent. Je pense que je crois que je doute. :-k
Image

ViPHP
ViPHP | 1996 Messages

21 juin 2007, 10:19

Question bête : Javascript étant un langage côté client, est-il activé côté client ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 271 Messages

21 juin 2007, 10:32

Le javascript est bien activé chez moi.

Après essai <? ou <?PHP les 2 fonctionnent. Par contre indique moi les boucles qui ne sont par fermées svp.
si se sont celles - ci
for ($j=1;$j<=270;$j++) { echo "·"; }
elles réalisent les pointillés de séparation entre les messages.
Patience et obstination sont des qualités !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2007, 10:48

Qu'est ce qui ne fonctionne pas ? Je n'arrive pas à accéder ni à l'une ni à l'autre des url... regarde et montre nous le code source généré pour comparer :)

Le code php du lien est plutôt basique, il s'agit d'afficher une chaine et ne devrait pas poser de problème, même si tu descendais sur php 1 ;) Quant au javascript il n'a effectivement pas de lien avec le serveur.. une fois encore il faudrait voir le code source généré...

Quant aux boucles non fermées, tu aurais des messages d'erreur en masse si c'était le cas :)
En revanche il est effectivement préférable d'utiliser <?php plutot que les short open tags :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 271 Messages

21 juin 2007, 11:10

En ce qui concerne les URL : cas n°1 où tout fonctionne : http://www.qcmresto.fr/IDF2/index.html puis bouton " contact " et lien "forum" ( essaie d'aller à la page 2 pour voir les autres messages) puis plus bas poste un message; Tu verras l'alerte du javascript.

Cas n°2 ou rien ne fonctionne : http://www4.ac-lille.fr/~iledeflandre/ puis bouton " contact " et lien "forum" ( essaie d'aller à la page 2 pour voir les autres messages, tu restes à la page 1) puis plus bas poste un message; aucun message d'alerte et rien dans ma zone administrative pour valider.

Merci de m'aider..
Patience et obstination sont des qualités !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juin 2007, 11:44

C'est effectivement le register_global qui doit poser soucis... Tu utilises les variables $debut ou $Numero sans préciser d'où elles proviennent (get, post, etc.) :)

Si tu ajoutes dans ton script la commande error_reporting(E_ALL) tu devrais voir apparaitre une plétore de message d'alerte pour te dire que les variables que tu utilises n'ont pas été déclarées...

La solution propre serait donc d'utiliser $_GET['debut'] au lieu de $debut, etc.

La solution un peu plus bourrin mais beaucoup plus rapide, est de récupérer au début de ton code ce qui est en get et en post et de créer les variables qui vont bien :
foreach ($_GET as $key => $val) { // pour chaque couple clé > valeur
  $$key = $val; // déclare une variable ${nom de la clé} et lui affecte la valeur
}
foreach ($_POST as $key => $val) { // idem pour post
  $$key = $val;
}
C'est un peu moins sécurisé, mais des le moment où tu te limites à ces deux variables (et que tu ne le fais pas sur $_SESSION, $_COOKIE...) les risques sont franchement très limité. Si les données envoyées par l'internautes sont bien testées, qu'il les envoi en get ou en post, on s'en fiche un peu :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 271 Messages

21 juin 2007, 15:26

Connaissant mal la clef Foreach, J'ai voulu remplacer $key et $val et bien sûr ça ne fonctionnait pas. Après un lecture rapide de la boucle dans une revue qui traite des boucles (for, while et foreach, j'ai compris.

Merci encore.
Patience et obstination sont des qualités !