8722 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,


Pouvez-vous m'aider ?
Il y a un truc qui "foire" avec mon header !
Les messages sont bien envoyés ($resultat1=true);

php ne veut apparemment pas interpréter mes variables ($langue) et le changement de répertoire, à la racine du site) !

Afin d'être le plus complet possible,
je me permets de mettre tout le code en tête de ma page php.

Pouvez-vous m'aider ?
Un grand merci d'avance.
A l'aide.

<?php
	session_start();
	ob_start();
	$langue="ZH-HK";
	$address="g@c.com";
	$reptravail="http://www.c.com.hk";
	$php="../appointment00";
	$rubrique="appointment";
	date_default_timezone_set('Europe/Brussels');
	$datum = date("D, d M Y H:i:s");
	$travaux="";

	if (isset($_GET['ok']) && !empty($_GET['ok'])) {
		$ok=$_GET['ok'];
	} else {
		$ok=0;
	}

	$swerror=0;
	if ($ok==9) {
		$_POST['title']="";
		$_POST['firstname']="";
		$_POST['name']="";
		$_POST['email']="";
		$_POST['subject']="";
		$_POST['topic']="";
		$_POST['message']="";
		$_POST['cond10']="";
		$_POST['cond20']="";
		$_POST['cond30']="";
		$_POST['phone10']="";
		$_POST['phone11']="";
		$_POST['phone20']="";
		$_POST['phone21']="";
		$ok=0;
	}
	
	$phtitle = array ("", "&#20808;&#29983;", "&#22899;&#22763;", "&#22826;&#22826;");
	$phsubject = array ("", "&#35201;&#27714;&#22238;&#35206;&#38651;&#35441;", "&#35201;&#27714;&#38928;&#32004;", "&#32034;&#21462;&#36039;&#26009;", "&#21512;&#20316;&#22821;&#20276;", "&#20659;&#25773;&#23186;&#20171;", "&#25307;&#32856;", "&#20854;&#20182;");
	$phphone11 = array ("", "&#26089;&#19978;", "&#27491;&#21320;", "&#19979;&#21320;", "&#20621;&#26202;");
	$phphone21 = array ("", "&#26089;&#19978;", "&#27491;&#21320;", "&#19979;&#21320;", "&#20621;&#26202;");

	if ($ok==1) {
		$title = trim($_POST['title']);
		$firstname = trim($_POST['firstname']);
		$name = trim($_POST['name']);
		$email = trim($_POST['email']);
		$subject = trim($_POST['subject']);
		$topic = trim($_POST['topic']);
		$message = trim($_POST['message']);
		$cond10 = trim($_POST['cond10']);
		$cond20 = trim($_POST['cond20']);
		$cond30 = trim($_POST['cond30']);
		$phone10 = trim($_POST['phone10']);
		$phone11 = trim($_POST['phone11']);
		$phone20 = trim($_POST['phone20']);
		$phone21 = trim($_POST['phone21']);
		$name=strtoupper(strtolower($name));
		$firstname=ucwords(strtolower($firstname));
		if ((strlen($firstname)>0) AND (strlen($name)>0)
			AND (strlen($subject)>0) AND (strlen($topic)>0)
			AND (strlen($message)>0)) {
				if (strlen($email)>0) {
					$atom = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';
					$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';		   
					$regex = '/^'.$atom.'+'.'(\.'.$atom.'+)*'.'@'.'('.$domain .'{1,63}\.)+'.$domain.'{2,63}$/i'; 
					if (preg_match($regex, $email)) {
					} else {
						$swerror=1;
					}
				}
				$prop="";
				if (($cond10!="")) {
					if ($phone10=="" OR $phone11==0) {
						$swerror=1;
					} else {
						$prop.="&#24744;&#24076;&#26395;&#25105;&#20497;&#22238;&#35206;&#38651;&#35441;<br>".$phphone11[$phone11]." (".$phone10.")<br><br>";
					}
				}
				if (($cond20!="")) {
					if ($phone20=="" OR $phone21==0) {
						$swerror=1;
					} else {
						$prop.="&#24744;&#24076;&#26395;&#38928;&#32004;&#21443;&#35264;&#23637;&#35261;&#24307;<br>&#24744;&#24076;&#26395;&#25105;&#20497;&#30340;&#33268;&#38651;&#26178;&#38291;&#28858;<br>".$phphone21[$phone21]." (".$phone20.")<br><br>";
					}
				}
				if ($cond30!="") {
					$prop.="&#24744;&#24076;&#26395;&#29554;&#24471; Celinni &#30340;&#29305;&#21029;&#20778;&#24800;<br><br>";
				}
				if ($swerror==0) {
					$texte1="&#38928;&#32004;&#35566;&#35426;<br>"
					  ."&#20027;&#26088;&#65306; ".$phsubject[$subject]."<br>"
					  ."&#20027;&#38988;&#65306;".$topic."<br>"
					  ."&#24744;&#30340;&#25552;&#21839;&#65306;<br>"
					  ."<span style='font-weight: bold;'>".$message."</span><br><br><br><br>"			
					  .$prop."<br><br>"	
					  ."&#20197;&#19979;&#26159;&#24744;&#30331;&#35352;&#30340;&#32879;&#32097;&#36039;&#26009;&#65306;<br>"
					  .$phtitle[$title]." ".$firstname." ".$name."<br>"
					  ."&#38651;&#37109;&#65306;".$email."<br><br>";
					$destinataire1 = $address;
					$objet1 = "C - &#38928;&#32004;&#35566;&#35426;";
					$msg1="<html><head>";
					$msg1.="<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>";
					$msg1.="<meta name = 'reply-to' content = '".$address."'/>";
					$msg1.="<meta name = 'author' content = 'c'/>";
					$msg1.="<meta name = 'description' content = 'appointment'/>";
					$msg1.="<meta name = 'keywords' content = ''/>";
					$msg1.="<title>c.com - &#38928;&#32004;</title>";
					$msg1.="</head>";
					$msg1.="<body style='font-family:'Trebuchet MS', Arial, Helvetica, sans-serif;'>";
					$msg1.="<table border='2' bordercolor='#72acc2' cellspacing='0' cellpadding='0' width='592' height='500' align='center' rules='none'>";
					$msg1.="<tr><td width='140'></td><td width='70'></td><td width='378'></td></tr>";
					$msg1.="<tr height='100'><td colspan='2' valign='top' style='padding-left:4px;'><a href='".$reptravail."' border='0'><img src='".$reptravail."/logos/c.gif' width='155' height='65' alt='www.c.com' border='0'></a></td><td valign='top' style='padding-right:5px; text-align:right;'>".$datum."</td></tr>";
					$msg1.="<tr height='40' bgcolor='#72acc2'><td colspan='3' style='font-size:30px; color:#ffffff; padding-right:20px; text-align:right;'>&#38928;&#32004;&#35566;&#35426;</td></tr>";
					$msg1.="<tr height='350' style='font-size:14px; line-height:14px;'><td valign='bottom' style='text-align:left; padding-left:5px; padding-bottom:6px;'>&#32879;&#32097;&#26041;&#27861;&#65306;<br><a href='mailto:".$address."'>".$address."</a><br>&#38651;&#35441;&#65306;<br>(+852) 61347500</td><td colspan='2' valign='top' style='text-align:left; padding-left:30px; padding-top:100px;'>".$texte1."</td></tr>";
					$msg1.="</table>";
					$msg1.="</body>";
					$msg1.="</html>";
					$entete = "From: ".$address." \n";
					$entete .= "Reply-To: ".$address." \n";
					$entete .= "Content-Type: text/html; charset=UTF-8\n";
					$entete .= "Content-Disposition: inline\n";
					$entete .= "Content-Transfer-Encoding:8bit\n";
					$entete .= "MIME-Version:1.0\n";
					$entete .= "Date: $datum\n";
					$entete .= "X-Mailer [langue]HP/" . phpversion();
					$resultat1 = mail($destinataire1,$objet1,$msg1,$entete);
					
					$texte2="&#38928;&#32004;&#35566;&#35426;<br>"
						."&#20027;&#26088;&#65306;".$phsubject[$subject]."<br>"
						."&#20027;&#38988;&#65306;".$topic."<br>"
						."&#24744;&#30340;&#25552;&#21839;&#65306;<br>"
						."<span style='font-weight: bold;'>".$message."</span><br><br><br><br>"
						.$prop."<br><br>" ."&#20197;&#19979;&#26159;&#24744;&#30331;&#35352;&#30340;&#32879;&#32097;&#36039;&#26009;&#65306;<br>"
						.$phtitle[$title]." ".$firstname." ".$name."<br>" ."&#38651;&#37109;&#65306;".$email."<br><br>";
					$destinataire2 = $email;
					$objet2 = "C - &#38928;&#32004;&#35566;&#35426;";
					$msg2="<html><head>";
					$msg2.="<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>";
					$msg2.="<meta name = 'reply-to' content = '".$address."'/>";
					$msg2.="<meta name = 'author' content = 'c'/>";
					$msg2.="<meta name = 'description' content = 'appointment'/>";
					$msg2.="<meta name = 'keywords' content = ''/>";
					$msg2.="<title>c.com - &#38928;&#32004;</title>";
					$msg2.="</head>";
					$msg2.="<body style='font-family:'Trebuchet MS', Arial, Helvetica, sans-serif;'>";
					$msg2.="<table border='2' bordercolor='#72acc2' cellspacing='0' cellpadding='0' width='592' height='500' align='center' rules='none'>";
					$msg2.="<tr><td width='140'></td><td width='70'></td><td width='378'></td></tr>";
					$msg2.="<tr height='100'><td colspan='2' valign='top' style='padding-left:4px;'><a href='".$reptravail."' border='0'><img src='".$reptravail."/logos/celinnimail155x65.gif' width='155' height='65' alt='www.celinni.com' border='0'></a></td><td valign='top' style='padding-right:5px; text-align:right;'>".$datum."</td></tr>"; $msg2.="<tr height='40' bgcolor='#72acc2'><td colspan='3' style='font-size:30px; color:#ffffff; padding-right:20px; text-align:right;'>&#38928;&#32004;&#35566;&#35426;</td></tr>";
					$msg2.="<tr height='350' style='font-size:14px; line-height:14px;'><td valign='bottom' style='text-align:left; padding-left:5px; padding-bottom:6px;'>&#32879;&#32097;&#26041;&#27861;&#65306;<br><a href='mailto:".$address."'>".$address."</a><br>&#38651;&#35441;&#65306;<br>(+852) 61347500</td><td colspan='2' valign='top' style='text-align:left; padding-left:30px; padding-top:100px;'>".$texte1."</td></tr>";
					$msg2.="</table>";
					$msg2.="</body>";
					$msg2.="</html>";
					$entete = "From: ".$address." \n";
					$entete .= "Reply-To: ".$address." \n";
					$entete .= "Content-Type: text/html; charset=UTF-8\n";
					$entete .= "Content-Disposition: inline\n";
					$entete .= "Content-Transfer-Encoding:8bit\n";
					$entete .= "MIME-Version:1.0\n";
					$entete .= "Date: $datum\n";
					$entete .= "X-Mailer [langue]HP/" . phpversion();
					$resultat2 = mail($destinataire2,$objet2,$msg2,$entete);
					if ($resultat1 == true) {
						header('Location: ../'.$langue.'/appointment01.php?to=1');
						exit;
					} else {
						header('Location: ../'.$langue.'/appointment01.php?to=0');
						exit;
					}
				}
		}
	}
	
	ob_end_flush();
?>

Modifié par jytest (06 Dec 2012 - 18:41)
Salut normalement $langue devrait valoir ce que tu as définis au début.

Que te donnerais ce bout de code :

if ($resultat1 == true) {
	//header('Location: ../'.$langue.'/appointment01.php?to=1');
	var_dump($langue);
	echo 'header(\'Location: ../'.$langue.'/appointment01.php?to=1\');';
	exit;
}


A remplacer au niveau de la boucle existante bien entendu !

EDIT: Correction du point-virgule manquant à l'"echo";
Modifié par Super_baloo8 (04 Dec 2012 - 21:34)
Merci pour ton passage.

Avec ton code (légèrement corrigé) :
					if ($resultat1 == true) {
						//header('Location: ../'.$langue.'/appointment01.php?to=1');
						var_dump($langue);
						echo 'header(\'Location: ../'.$langue.'/appointment01.php?to=1\');';
						exit;
					}


Voici la réponse :
string(5) "ZH-HK" header('Location: ../ZH-HK/appointment01.php?to=1');


Alors, mais pourquoi cela ne va pas ?
Modifié par jytest (04 Dec 2012 - 21:33)
Donc $langue est bien définis comme prévu, pas de problème ?

P.S: Qu'as tu corrigés dans le code, si ce n'est l'indentation (qui sur le forum n'est pas vraiment faisable) ?

Edit: pour la modification du code, j'avais oublié un point-virgule, au temps pour moi !
Modifié par Super_baloo8 (04 Dec 2012 - 21:32)
Rien du tout !
php ne veut pas effectuer le header !
Pourquoi ?
As-tu une idée ?

Car $langue est bien bon !
Et il n'y a pas d'echo avant le header !
Je désespère !
Je fais exactement ce qui est est proposé dans ce post.
J'utilise :
ob_start();
header("Location: ../ZH-HK/appointment01.php");
ob_end_flush();

Et dans mon cas,
je ne souhaite pas que php poursuive le script,
je veux qu'il passe la main définitivement au contenu du header !
Donc mon "exit" est nécessaire !

L'erreur est donc dans le header,
qui est purement et simplement oublié par le compilateur !!!

As-tu une autre piste ?
Modifié par jytest (04 Dec 2012 - 21:49)
NON, supprime ce exit et tu verras bien...

Je vais argumenter quand même un petit peu.

Tu lance ton tampon de sortie, donc aucune entête HTTP ne peux être envoyer.

Tu fait ta tabouille et tu arrête ton script avec ton exit.

Sympa, mais, toujours aucune entête HTTP renvoyé => page blanche.

Par contre, si tu supprime ton exit, le code continu, parfait, il va enfin rencontrer le libérateur qui va arrêter le tampon, et délivrer la fameuse entête HTTP "Location" qui redirigera le navigateur vers une autre page.

Si tu souhaites vraiment que ton script s'arrête là, juste après ton header, arrête ton tampon de sortie, et ça fonctionnera, mais en même temps, ça ne sers à rien vu ton code, car rien n'est exécuté après, et même si après l'arrêt du tampon, tu aurais du code, tu as lancé un header, donc aucun code après l'arrêt du tampon ne pourra être exécuté.

P.S: le code montré n'a pas de exit ...
Modifié par Super_baloo8 (04 Dec 2012 - 21:58)
Par avis de conscience,
j'ai supprimé les exit après les header...

Et alors, le programme continue sur la même page en cours,
à savoir, celle du formulaire.

Ceci confirme au passage
que le header est purement et simplement ignoré par php !

Pourquoi ?
Modifié par jytest (06 Dec 2012 - 18:02)
Alors, rajouter ce petit bout de code avant ton ob_end_flush(); et dis moi ce qu'il répond :

if(headers_sent()) { echo 'Headers already sent, too late'; } 


Pour moi, il y a un header qui est déjà renvoyé quelque part pour que ça ne fonctionne pas.
Voici la réponse :
Headers already sent, too late

Euh...
normal, faudrait pas mettre ce truc avant mon header à moi ?

Je l'ai donc mis avant mes header !
et j'ai en réponse...
Headers already sent, too late

Bizarre !!!
Je n'ai pas encore envoyé de header avant, pourtant !!!

Que faire ?

As-tu une idée ?
Modifié par jytest (04 Dec 2012 - 22:17)
Aurais tu un espace qui traine avant l'ouverture de <?php ?

Est-tu sur de n'avoir aucun echo qui traine nul part ?

De manière générale, il faut faire très attention aux include/require qui peuvent inclure un fichier avec un caractère invisible (qui génère donc une entête), ou un echo, qui génère la même chose Smiley cligne

As toi de joué, car avec le code que j'ai sous la main, il n'y a pas de problème.
avant <?php, je n'ai rien !
Je n'ai aucun echo avant mon header !
Je n'ai aucun include/require avant mon header !

... Je désespère !!!
A l'aide !
Modifié par jytest (06 Dec 2012 - 18:04)
Il y a un retour chariot en tout début de page avant le doctype !

P.S: c'est du chinois pour moi tout ça ... Smiley biggol Smiley biggol Smiley biggol
Modifié par Super_baloo8 (04 Dec 2012 - 22:33)
Le retour chariot est après le ?>
... donc pas de problème ! Normalement !

Je confirme ce truc c'est du chinois
pour moi... (ici, pour ta culture, du chinois de HongKong, du cantonese" !

Mais pour mon problème,
tu peux me préciser où est ton retour chariot ?
Modifié par jytest (04 Dec 2012 - 22:44)
Regarde le premier fichier de ton code, ou soit, le premier fichier inclus (include/require), et regarde les biens, ce retour chariot doit bien être quelque part, il ne s'invite pas tout seul !
D'accord, mais j'ai pas de require ni d'include !
Nulle part dans la page internet !
Je cherche où ?

Une idée, svp !
Merci d'avance !
Modifié par jytest (05 Dec 2012 - 10:07)
Après des tests et des tests et des tests et des tests et des tests et des tests,
je me rends compte que c'est $langue qui ne peut pas être différent de "EN",
Poiur info, "EN" est la langue par défaut du site.

Voici la structure du site (car il y a 3 langues):
<racine>
..appointment00.php (qui envoie vers appointment00.php de la langue choisie ou par défaut)
..et les autres pages internet
..EN
....appointment00.php
....et les autres pages internet
..ZH-CN
....appointment00.php
....et les autres pages internet
..ZH-HK
....appointment00.php
....et les autres pages internet
..php
....langue.php
Modifié par jytest (06 Dec 2012 - 18:03)
Pages :