8797 sujets

Développement web côté serveur, CMS

Bonjour à tous...

Je fait encore appel à votre savoir... Smiley murf
Voila jusqu'à hier tous allais bien... Et ce matin, en bas de mon formulaire apparait un ?>
Alors j'ai cherché dans mon code une erreur, j'ai fait la validation W3C (Il reste 8erreurs), j'ai lu pour savoir comment bien déclarer sont doctype (au cas ou) (D'ailleurs j'avais trouvé un lien périmé sur votre site mais j'ai pas réussi à remettre la main dessus. dsl).
Mais rien n'y fait... J'ai toujours cette déclaration de fin de code php qui apparaît...

Voici le lien vers mon site
Et le code de la page.



<?php
if ($_POST['action'] == 'submitted') {	// Si le formulaire a été soumis		

/*-------------INITIALISATION DES VARIABLES------------------------------*/

	

	$adress = "monadresse@bidule.fr";
	$nom = htmlspecialchars($_POST['nom']);		// On rend inoffensives les balises HTML que le visiteur a pu rentrer
	$email = htmlspecialchars($_POST['email']);		// On rend inoffensives les balises HTML que le visiteur a pu rentrer
	$message = htmlspecialchars($_POST['message']);		// On rend inoffensives les balises HTML que le visiteur a pu rentrer
	$webSite = htmlspecialchars($_POST['webSite']);		// On rend inoffensives les balises HTML que le visiteur a pu rentrer
	$option=$_POST['option'];

	$jour = date("d");
	$mois = date("m");
	$annee = date("Y");
	$heure = date("H");
	$minute = date("i");
	
	$sujet = "Erreur sur le site signalé par {$_POST['nom']}";
	$date = "Date: $jour/$mois/$annee\nHeure: $heure:$minute";
	$mess = "Nom: {$_POST['nom']}\nE-mail: {$_POST['email']}\nSite: {$_POST['webSite']}\n $date\n";
    $entete = "Return-Path: $adress\r\n";
	$entete .= "From:   ....<$adress>\n";
	
	$errmsg=array();//initialisation de la variable pour les messages d'erreurs
	

	/*-------------VÉRIFICATION COMPLÈTE DU FORMULAIRE------------------------------*/

	// On verifie le nom commence par une majuscule et ne comporte pas de numero
	if (!preg_match("#(^[A-ZÉÈÊ])\D[a-z]*(\D$)#", $nom))
		$errmsg[] = 'Votre nom doit commencer par une majuscule, ne peut comporter de numéro et doit avoir un minimum de trois lettres.';

	// On verifie la conformite de l'email
	if (strlen($email)>0) {
		if (!preg_match("#^[a-zA-Z0-9._-]+@[a-z0-9._-]{3,}\.[a-z]{2,4}$#" , $email))
			$errmsg[] = 'Votre adresse courriel n\'est pas valide. Veuillez la saisir correctement ou ne pas la saisir du tout car elle est optionnelle.';
	}
	//vérification d'une url dans le cas où l'utilisateur la saisisse.
	if(strlen($website)>0 && !preg_match("#^((http://)?)((w{3}\.)?)[a-z0-9_.-]{2,}\.[a-z]{2,4}(/?)$#",$webSite))
		$errmsg[] = 'Votre adresse de site internet est invalide. Veuillez la saisir correctement ou ne pas la saisir du tout car elle est optionnelle.';

	//si $option n'est pas vide
	if (!isset($option))
		$errmsg[] = 'Veuillez SVP me renseigner la page où se trouve l\'erreur.';
		
	//vérification du champ message
	if (strlen($message)<1)
		$errmsg[] = 'Je vous remercie de me laisser un message plus explicite afin de déterminer le problème.';
	
	//définition de la veleur de la ou les checkbox coché
	if (!empty($_POST['option'])) {
		$mess .= "Pages contenant l'erreur : "; 
		foreach ($_POST['option'] as $option){
		$mess .= "".$option." , "; 
		}
	}
	//initialisation de la fin des variables
	$mess .= "\n\n";
	$mess .= "Message: {$_POST['message']}\n";

	// Si on a pas d'erreur on teste l'envoie du mail
	if (empty($errmsg)){
		$etat="ok";
/*------------VÉRIFICATION DE l'ENVOI DU COURRIEL---------------------------------*/

		if ($etat="ok"){ // Le formulaire a été soumis et il n'y a pas d'erreurs, on envoi le mail et on le test.
		//Si le mail est bien envoyé
		if (@ mail($adress, $sujet, $mess, $entete)){
			header("Location:  http://www.pcvert.fr");
 
			exit;
		}else{
			echo('ECHEC : le courriel ne s\'est pas envoyé correctement');  //arrêt du script avec message d'erreur
		}}
	}
	else{
		$etat = "erreur"; // On initialise notre etat à erreur, il sera changé à "ok" si la vérification du formulaire est un succès, sinon il reste à erreur
	}
}else{
    $etat="attente"; // On passe donc dans l'état attente
}
if ($etat!="ok"){ // Le formulaire a été soumis mais il y a des erreurs (etat=erreur) OU le formulaire n'a pas été soumis (etat=attente)
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>pcvert.fr</title>
<?php include ("$chemin/include/head.inc.php");?>		
</head>
<body>
	<div id="pcvert"> <!-- Cadre générale-->
		<?php include ("$chemin/include/enTete.inc.php");?>

		<div id="partiCentrale"><!-- Insertion de la partie contenu-->
			<?php include ("$chemin/include/contenuDroite.inc.php");?>
			<div id="contenu">

			<!--MenuArbo -->
			<span  id="menuArbo"><? print "$menuArbo" ?></span>
			<!-- Fermeture MenuArbo -->
	
			<form id="erreur" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
				<fieldset>

					<legend class="texteGrasNoir">Signaler une erreur</legend>
					<input type="hidden" name="action" value="submitted"/>
					
					<p>	
					<label class="label1"> Nom* </label>
					<input type="text" name="nom" class="champTexteInput" value="<?php echo $nom;?>"/>
					</p>
					<p>
					<label class="label1"> Email </label>
					<input type="text" name="email" class="champTexteInput" value="<?php echo $email;?>"/>
					</p>
					<p>
					<label class="label1"> Site internet </label>
					<input type="text" name="webSite" class="champTexteInput" value="<?php echo $webSite;?>"/>
					</p>
	
					<span class="label2">Page où est l'erreur*</span>			
				<div id="checkboxCadre">
					<input class="checkbox" type="checkbox" name="option[]" value="Accueil"/><p class="label2a">Accueil</p>
					<input class="checkbox" type="checkbox" name="option[]" value="Signaler" /><p class="label2a">Signaler</p>
					<input class="checkbox" type="checkbox" name="option[]" value="Contact" /><p class="label2a">Contact</p>
					<input class="checkbox" type="checkbox" name="option[]" value="CV" /><p class="label2a">CV</p>
					<input class="checkbox" type="checkbox" name="option[]" value="Portfolio" /><p class="label2a">Portfolio</p>
				</div>
			
					<label class="label3"> Message* </label>
					<textarea class="textarea" name="message" rows="10" cols="30" ><?php echo $message;?></textarea>
			
					<p class="texteLegende"><br />
					<span class="floatRight">* Champs obligatoire</span>
					</p>
<?php
	// Cas où le formulaire a été soumis mais il y a des erreurs
	if (!empty($errmsg)){
	if ($etat = "erreur"){
		echo '<div><ul class="attentionFormulaire">';
		for($i=0,$nb_element=count($errmsg);$i<$nb_element;$i++)
		echo '<li> &nbsp;&nbsp;-&nbsp;&nbsp;'.$errmsg[$i]."</li>";	
		echo '</ul>';
		echo '</div>';
	}}?>

					<input class="bouton" type="submit" value="Envoyer" />
				</fieldset>
			</form>
		</div><!-- Fermeture de la partie contenu-->
			<?php include ("$chemin/include/footer.inc.php");?>
	</div><!-- Fermeture du cadre générale -->
</body>
</html>
<?php } ?>




Si quelqu'un pouvais éclairer ma lanterne sur ce point... Smiley smile
Merci
Bon dimanche
Modifié par Dim (26 Jun 2009 - 15:54)
Salut, as-tu bien vérifié que ce caractère ne vient pas d'une répétition dans l'un des includes ? Sinon c'est assez étrange la manière dont tu imbriques les éléments, notamment le
<?php } ?>
de la fin... Et “Copyright”, il faut mettre un “h” dedans Smiley cligne
Administrateur
Bonjour,

l'une de tes balises n'est pas <?php mais <? ... ?>.
Je ne connais pas la configuration de ton serveur mais mieux vaut éviter Smiley cligne

Ensuite - et tu aurais dû commencer par là en postant ici Smiley smile EDIT: et tu l'as fait et je t'ai mal lu, dsl Smiley bawling - ton code n'est pas valide d'après le validateur du W3C.
En sabrant dans ton code le PHP et le contenu (j'ai pu me tromper en allant trop vite Smiley confused ), j'obtiens cette structure:

<body>
	<div id="pcvert"> <!-- Cadre générale-->
		<div id="partiCentrale"><!-- Insertion de la partie contenu-->
			<div id="contenu">
		</div><!-- Fermeture de la partie contenu-->
	</div><!-- Fermeture du cadre générale -->
</body>
</html>


Problème: tu as beaucoup d'include() dont on peut voir le résultat en ligne mais nous n'avons pas accès à ces fichiers: à toi d'essayer de désactiver un par un les include et voir si cela a un effet ou non (enfin désactive-les tous en remplaçant
include(
par
//include(
déjà)

Autre signe, l'extension View Source Chart voit bien ce ?> terminal et comme elle utilise ce que le navigateur lui donne à afficher: un code invalide semble être pour moi le bon candidat ...
Modifié par Felipe (20 Jul 2008 - 15:51)
bon ben non j'ai plus rien à rajouter maintenant Smiley confus
Modifié par kzone (20 Jul 2008 - 15:57)
Modérateur
Salut Dim,

À mon humble avis, je pense que ta coquille viendrait du fichier footer.inc.php. Regarde si tu as bien ouverture de balise php et fermeture ou tout simplement deux fermetures.

Comme le dit Felipe, il est préférable de mettre <?php /*script php */ ?>. Les autres formes sont à proscrire tout simplement sauf peut être celle-ci :

<script language="php"> /*script php */ </script?>

Je peux te conseiller de lire ceci pour comprendre mieux ce type d'écriture.

Également, faire attention à l'indentation de ton code. Cela peut te jouer de sales tours. Smiley cligne

++

<<<EDIT
En regardant vite fait ton site, j'ai vu une coquille dans le menu. Le mot dessin n'a pas d'accent. J'ai bien saisi que tu voulais affirmer l'accent mais ce n'est pas la peine Smiley lol
EDIT;
Modifié par Nolem (20 Jul 2008 - 21:22)
Merci à tous pour vos réponses...
Pour faire dans l'ordre inverse...

Nolem (toujours la pour aider ça fait plaisir Smiley biggrin )
J'ai regardé de prêt mon code du footer et je n'ai rien trouvé qui puisse vraiment poser problème. Cependant si tu pouvais y jeter un œil d'expert le voici...


<!--Footer -->
<div id="footer">
<p>Copyright: <a href="http://test.pcvert.fr"><span class="texteLiens">www.pcvert.fr</span></a> - Juillet 2008 - Tous Droits R&eacute;serv&eacute;s <br />
<a href="<?php print $chemin;?>/index.php"><span class="texteLiens">Accueil</span></a>&nbsp;|&nbsp;<a href="<?php print $chemin;?>/cv/index.php"><span class="texteLiens">CV</span></a>&nbsp;|&nbsp;<a href="<?php print $chemin;?>/portfolio/index.php"><span class="texteLiens">Portfolio</span></a>&nbsp;|&nbsp;<a href="<?php print $chemin;?>/liens/index.php"><span class="texteLiens">Liens</span></a>&nbsp;|&nbsp;<a href="<?php print $chemin;?>/contact/index.php"><span class="texteLiens">Contact</span></a>&nbsp;|&nbsp;<a href="<?php print $chemin;?>/livreDOr/index.php"><span class="texteLiens">Livre d'or</span></a> <br />
Valid: <a href="http://validator.w3.org/check?uri=referer"><span class="texteLiens">xhtml</span></a>&nbsp;|&nbsp;
<a href="  http://jigsaw.w3.org/css-validator/check/referer"><span  class="texteLiens">css2.1</span></a>&nbsp;|&nbsp;decoupe et mise en page xhtml 1.0 stict / css 2.1
</p>
</div>
<!--Fermeture footer -->


Pour l'indentation je ne vois pas trop ce qui peut poser des problèmes... Peut être as tu encore un lien intéressant sur le sujet... Smiley smile

Enfin pour ce qui est de mettre <?php /*script php */ ?> en général c'est ce que je fait (mais je reste un novice en la matière donc les erreurs sont possible)
Pour finir merci pour m'avoir signaler l'accent de trop sur dessin.. Malheureusement le français n'est pas mon point fort... Smiley confused

Kzone,
merci pour ta réponse très instructive... Smiley cligne

Felipe,
effectivement mon code n'est pas valide w3c (d'ailleurs j'ai pas encore trouvé comment résoudre ces petites erreurs...)
Pour ce qui est de la structure tu est pas trop loin de la vérité...

<html>
<head>
<title> Titre de la page </title>
include du head pour ne pas à avoir à le retaper dans chaqu'une de mes pages
</head>
<body>
<div id="enTete">
include de l'entete
</div>
<div id="pcvert"> <!-- Cadre générale-->
	<div id="partiCentrale"><!-- Insertion de la partie contenu-->
            <div id="contenuDroit">
            le contenu droit en include avec rubriques, contact, news et photo du mois. Pour le moment il n'y as que du html de dans...
            <div>
		<div id="contenu">
ici je met tous mon contenu
		</div><!-- Fermeture de la partie contenu-->
         <div id="footer">
	 </div>
</div><!-- Fermeture du cadre générale -->
</body>
</html>



Pour ce qui est des include cela pose un problème qu'il y en ai beaucoup???
4 c'est pas beaucoup si?

Sinon je ne pense pas que le problème vienne de mes includes puisqu'ils sont aussi inclu dans ma page d'accueil qui elle ne présente pas de ?> ...
Enfin, effectivement je pense comme toi... L'erreur viens d'
a écrit :
un code invalide semble être pour moi le bon candidat ...

Mais je ne trouve malheureusement pas l'erreur...

montoumes,
Je ne comprend pas
a écrit :
as-tu bien vérifié que ce caractère ne vient pas d'une répétition dans l'un des includes ?

Et je voulais savoir en quoi m'as façon d'imbriquer est-elle étrange? Si on peut faire mieux je veux bien savoir... Smiley smile
Enfin, merci pour le h de copyright.

Je crois avoir répondu à tous le monde et avoir fait où vérifié ce que chacun as dit mais sans résultat... Smiley decu
Merci à tous et si vous avez d'autre idées... je suis preneur.

EDIT
Effectivement contrairement à ce que je pensais, l'erreur ne viens pas de mon contenu mais plutôt de mon index car j'ai supprimé tous mon code contenu, donc juste trois lettres... en effectivement il y avait un doublons de fermeture dans mon index... dsl d'avoir posté pour si peut... et si voyant... Smiley rolleyes
Cependant je veux bien vaux réponse sur mes quelques questions que je vous aient posé... Smiley biggrin
Encore merci à tous...
Modifié par Dim (20 Jul 2008 - 23:30)
Modérateur
Salut Dim Smiley smile ,

Je suis heureux que tu as trouvé solution à ton problème.

Arf, je n'ai malheureusement pas de lien en ce qui concerne l'indentation du code.

En gros, tu as deux formes. À toi de choisir celle qui te convient. Quand tu en choisi une, essai de te tenir à cette forme.

1ère forme :

//declaration de variable toujours aligner
$a=1;
$b=1;
//etc.

// conditionnelle ou fonction ou class :
function ma_fonction($parametre)
{
   //instructions indentés
   //conditionnelle indentée :
   if($a>1)
   {
       return true;
   }
}



2e forme :


function ma_fonction($parametre){
   //instructions indentés
   //conditionnelle indentée :
   if($a>1){
       return true;
   }
}



Personnellement je préfère la seconde. C'est juste une histoire de goût et quand j'ai appréhendé l'action script.

++
Merci Nolem pour l'information Smiley smile
Pour ma part j'avais commence avec la premiere version. Depuis la premiere fois ou j'ai demande de l'aide ici et que tu m'as gentillement repondu Smiley cligne , j'ai choisi la seconde... Donc effectivement il doit y avoir deux style d'indentation dans mon code.. Mais a force de le retoucher pour des broutilles il n'y en aura plus qu'une... Smiley langue

See you et merci