8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Après changement de pc (l'ancien tournait sous Windows XP SP3, Easyphp 2 ... (je n'en dispose déjà plus); le nouveau tourne sous Windows Vista Premium, Easyphp 3.0, Apache 2.2.11, PHP 5.2.8, PHPMyAdmin 3.1.1 et MySQL 5.1.30), je constate que ma petite page web initiale, inchangée, qui permettait simplement au visiteur de choisir une des deux langues disponibles, dont vous trouverez le code ci-dessous et qui fonctionnait à merveille sur mon pc précédent ne fonctionne désormais plus. (Ouille!, comme l'on dit ici à Bruxelles).

En particulier, l'instruction PHP if(isset($_COOKIE['language'])) restitue(rait) toujours 'false' (au contraire de l'instuction if(isset($_GET['language'])) employée dans ce même script et qui fonctionne bien), ce qui empêche la parution immédiate de la page suivante (Agora_F1 ou Agora_D1) dès nouvel appel de cette page initiale. Pourtant, je constate dans C:\Users\Jo\AppData\Roaming\Microsoft\Windows\Cookies que le cookie jo@127.0.0[1].txt est créé au bon moment (dès sélection d'une des deux langues) et son contenu est correct (language
F
127.0.0.1/AGORA/
1536
2945869056
30072189
921057856
29998764
*). Serait-ce une question de droit ? Même résultat en cas de désactivation de mon User Account Control ...

Suivant la formule consacrée, je remercie d'avance (ardemment même) celui qui pourra m'aider.


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

<?php
	$folder = array('D','F');
	if(isset($_GET['language']) && $_GET['language'] == '*'){  // Cookie deletion.
		setcookie('language');
	}
	else if(isset($_GET['language']) && in_array($_GET['language'], $folder, true)) {  // Language selection. 
		setcookie('language', $_GET['language'], time() + 365 * 24 * 3600);
		//header('location:  http://www.miele.be');   /redirection.
		header('location: /AGORA/Agora_'.$_GET['language'].'1.php');
		exit;
	}
	/// else if(isset($_COOKIE['language'])) echo $_COOKIE['language'];
	else if(isset($_COOKIE['language']) && in_array($_COOKIE['language'], $folder, true)) {  // Cookie test.
		//header('location:  http://www.siemens.be');   /redirection.
		//echo $_COOKIE['language'];
		header('location: /AGORA/Agora_'.$_COOKIE['language'].'1.php');
		exit;
	}
	/// else echo "!!!!!";
?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<title>AGORA+</title>
		<link rel="stylesheet" media="screen, projection" type="text/css" id="css" href="\AGORA\Agora.css"></link>
	</head>
	<body>
		<p class="center"><span class="AgoraLabelFont1"><span class="blue">AGORA</span><span class="red">+</span></span> Belgium</p>
		<p class="center">
			Select your language:
			<a href="/AGORA/index.php?language=F">Fran&ccedil;ais</a>
			<a href="/AGORA/index.php?language=D">Nederlands</a>
		</p>
		<!-- <p class="center"> Page 0 </p> -->
	</body>
</html>

Modifié par JoVD (14 Jul 2009 - 15:39)
Salut,

il y a au moins une erreur : setcookie (tout comme header ou session_start) doit être utilisé avant toute sortie html et donc avant le doctype. Smiley cligne
Bonjour Heyoan,
J'ai descendu la 1e ligne ('Doctype ... ') entre mes blocs PHP et HTML sans davantage de succès. Merci quand même.
Jo.
Alors c'est certainement une question de paramétrage : tu pourrais déjà faire un test après que le cookie ait été créé en faisant un simple :
print_r($_COOKIE);
histoire d'être sûr...

Si le tableau est vide il faudra chercher la dans la doc. Smiley cligne
Modifié par Heyoan (17 Apr 2009 - 10:20)
Rebonjour Heyoan,
L'insertion de 'print_r($_COOKIE);' après 'setcookie('language', $_GET['language'], ...' me donne 'Array ( Smiley language => F )', conformément à mon affirmation d'hier suivant laquelle le cookie était bien créé.
Toujours pas moyen de comprendre qu'un nouvel appel de cette page (index.php) ne passe par 'else if(isset($_COOKIE['language']) ...', comme auparavant.
Merci pour ton aide. Jo.
Je ne doutais pas que le cookie soit créé mais que pour une raison ou une autre il ne soit pas récupéré dans $_COOKIE. Smiley cligne

Du coup je ne vois pas...

Il faudrait donc debugger... par exemple :
<?php
	$folder = array('D','F');
	// Test1
	if(isset($_GET['language']) && $_GET['language'] == '*'){  // Cookie deletion.
		setcookie('language');
		echo '<p>le Test1 est vérifié</p>';
	}
	// Test2
	else if(isset($_GET['language']) && in_array($_GET['language'], $folder, true)) {  // Language selection. 
		setcookie('language', $_GET['language'], time() + 365 * 24 * 3600);
		echo '<p>le Test2 est vérifié</p>';
	}
	// Test3
	else if(isset($_COOKIE['language']) && in_array($_COOKIE['language'], $folder, true)) {  // Cookie test.
		echo '<p>le Test3 est vérifié</p>';
	}

// Debug
echo '<p>$_GET contient :</p>';
echo '<pre>';
print_r($_GET);
echo '</pre>';
echo '<p>$_COOKIE contient :</p>';
echo '<pre>';
print_r($_COOKIE);
echo '</pre>';
?>

Modifié par Heyoan (17 Apr 2009 - 17:12)
Bonjour Heyoan,
après moultes essais,je viens de poser le problème à EasyPHP (easyphp-abonnement@club.voila.fr vu que ) dans les termes suivants:

Bonjour,

Depuis mon passage à EasyPHP 3.0 et Vista, la sélection de la petite page initiale (index.php) d'un projet de site web dont vous trouverez le code source ci-dessous et qui fonctionnait parfaitement en EasyPHP 2 ne fonctionne plus correctement. Elle propose uniquement le choix entre le français (F) ou le néerlandais (D) en cas d'absence du cookie 'language' ou directement la page suivante (Agora_F1 ou Agora_D1) en cas de présence de ce cookie chez le client. J'emploie toujours le même navigateur IE7.



Au premier appel de la page, on sélectionne une langue (par exemple le Français), ce qui a pour effet de générer directement le cookie jo@127.0.0[1].txt contenant 'languageF.....' en C:\Users\Jo\AppData\Roaming\Microsoft\Windows\Cookies (et non en C:\Users\Jo\Cookies comme je le lisais encore hier dans plusieurs forums). A l'appel suivant de cette page index.php, le débogage (présent dans le code)(print_r($_COOKIE)) restitue erronément 'Array()' en lignes 3 et 26, mettant ainsi en évidence une carence de lecture du cookie qui a pour effet de présenter à nouveau la page initiale (choix de langues) au lieu de la page Agora_F1. Après sélection de l'autre langue (Néerlandais), print_r($_COOKIE) de la ligne 3 restitue correctement 'Array(['language']=>F)', le cookie n'ayant pas encore été mis à jour, mais à la ligne 26, après passage correct par le bloc 'else if(isset($_GET['language']) ...' et exécution attendue des lignes 10 (setcookie('language', $_GET['language'], ...) et 11 (echo 'Le Test2 est vérifié. ';), print_r($_COOKIE) restitue erronément toujours 'Array(['language']=>F)', alors que le cookie a été mis à jour. La variable $_GET fonctionne par contre toujours correctement.

Seriez-vous au courant de ce poblème ? Désirez-vous une traduction de ce mel en Anglais ? Merci pour votre aide.

Bien à vous, Joseph Van Damme.

<?php
$folder = array('D','F');
echo '$_COOKIE contient : '; print_r($_COOKIE); echo '. ';
//echo $_COOKIE['language'];
if(isset($_GET['language']) && $_GET['language'] == '*'){ // Cookie deletion.
setcookie('language');
echo 'Le Test1 est vérifié. ';
}
else if(isset($_GET['language']) && in_array($_GET['language'], $folder, true)) { // Language selection.
setcookie('language', $_GET['language'], time() + 365 * 24 * 3600);
echo 'Le Test2 est vérifié. ';
//print_r($_COOKIE);
//header('location: /AGORA/Agora_'.$_GET['language'].'1.php');
//exit;
}
// else if(isset($_COOKIE['language'])) echo $_COOKIE['language'];
//else if(!isset($_COOKIE['language'])) echo '$_COOKIE['language']) not set !';
else if(isset($_COOKIE['language']) && in_array($_COOKIE['language'], $folder, true)) { // Cookie test.
echo 'Le Test3 est vérifié. ';
//echo $_COOKIE['language'];
//header('location: /AGORA/Agora_'.$_COOKIE['language'].'1.php');
//exit;
}
// else echo "!!!!!";
// Debug:
echo '$_GET contient : '; print_r($_GET); echo '; $_COOKIE contient : '; print_r($_COOKIE); echo '. ';
?>

<!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="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>AGORA+</title>
<link rel="stylesheet" media="screen, projection" type="text/css" id="css" href="\AGORA\Agora.css"></link>
</head>
<body>
<p class="center"><span class="AgoraLabelFont1"><span class="blue">AGORA</span><span class="red">+</span></span> Belgium</p>
<p class="center">
Select your language:
<a href="/AGORA/index.php?language=F">Fran&ccedil;ais</a>
<a href="/AGORA/index.php?language=D">Nederlands</a>
</p>
<!-- <p class="center"> Page 0 </p> -->
</body>
</html>

Merci encore pour ton aide. Jo.
Bonjour à tous,

Un chouette gars que je resalue en passant vient de me résoudre ce problème d'un coup de baguette magique ! Vista connaîtrait certains problèmes de droits dans son répertoire C:\Users\... . En déplaçant mon application web du répertoire C:\Users\Jo\Documents\Mes sites web\ vers un nouveau répertoire (C:\weblocal\sites\), plus le moindre problème.
Qu'on se le dise ! (Pour ma part, on peut clore cette question). Merci encore à tous. JoVD.
JoVD a écrit :
Pour ma part, on peut clore cette question
Alors il ne te reste plus qu'à éditer ton premier post et à passer ton sujet en [Résolu]. Smiley cligne