8722 sujets

Développement web côté serveur, CMS

Bonjour à tous,
j'ai un soucis de création des cookies cw_lang avec mon code multi langue en php.
ce code marche bien en version 7 du php en local (mon ordinateur), mais quand je le met en ligne la création de cookie cw_lang ?
Ainsi, je viens vers vous pour soumettre mon code, si quelqu'un pourra m'aider à résoudre ce soucis. je suis bloqué Smiley fache
NB: mon domaine a été configurer maintenant en php 7.
Ci jonit mon code php:

<?php 
// Suite_langue page php
//	header("Cache-Control: no-cache"); //vider le cache
	$default_lang = 'fr'; //langue par défaut
	$dir_lang = './langues/'; //répertoire des fichiers langues
	$extension = '.php'; //extension des fichiers langue
	
	/*
	 * liste des fichiers langue disponibles
	 * s'assurer que chacun de ces fichiers existe bien dans
	 * le répertoire
	*/
	$languages = array('en', 'es', 'fr');
	$lang = '';
	
	/*
	 * si le paramètre "lang" est défini dans l'url et s'il existe dans la liste
	 * $lang prend la valeur de $_GET['lang']
	 */
	if (isset($_GET['cw_lang']) AND in_array($_GET['cw_lang'], $languages)) {
		$lang = $_GET['cw_lang'];
	}
	
	/*
	 * sinon vérifier prendre la valeur du cookie $_COOKIE['lang'] (s'il est défini)
	 */
	else if (isset($_COOKIE['cw_lang']) AND in_array($_COOKIE['cw_lang'], $languages)) {
		$lang = $_COOKIE['cw_lang'];
	}
	
	/*
	 * sauver la valeur de $lang dans le cookie $_COOKIE['lang']
	 */
	if (!empty($lang)) {
	    setcookie('cw_lang', $lang);
	}
	/*
	 * quelque soit la langue d'affichage sélectionnée
	 * inclure le fichier langue par défaut pour ne manquer
	 * aucune variable 
	 */
	include($dir_lang . $default_lang . $extension);
	
	/*
	 * seulement après, vérifier que le fichier langue
	 * défini dans $lang existe et l'inclure
	 */
	if (!empty($lang) && is_file($dir_lang. $lang . $extension)) {
		include($dir_lang . $lang . $extension);
	}
?>
Modérateur
Bonjour,

Je n'ai pas bien saisie si vous aviez des difficulté à créer le cookie en lui-même ou simplement à le rendre persistant. Si vous vous sentez affecté par cette seconde hypothèse, cela ne m'apparaît en rien anormal.

En effet - et le fait que vous tourniez en version 7 ou en 5.5 n'importe pas en ce cas - vous définissez votre cookie cw_lang sans aucun timestamp (date d'expiration).

Or, si on s'en réfère au manuel sur setcookie(), il est clairement indiqué
Php.net a écrit :
expire
Le temps après lequel le cookie expire. [...]
Si vous ne spécifiez pas ce paramètre ou s'il vaut 0, le cookie expirera à la fin de la session (lorsque le navigateur sera fermé).


C'est bien de ceci dont il s'agit ?


Edit: en l'état votre cookie se nommera cw_lang et non lang comme vous l'avez émargé.
Modifié par Greg_Lumiere (03 Aug 2018 - 12:19)