Récupération d'une résolution php/javascript

Résolu/Fermé
YoshK
Messages postés
26
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
16 mars 2011
- 14 oct. 2009 à 12:25
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
- 15 oct. 2009 à 10:19
Bonjour, je rencontre un problème pour détecter la résolution de l'utilisateur via javascript et la transférer dans une variable PHP:

Je pensai que cela allez suffire:
<?php $size = echo '<script language=\"JavaScript\">screen.width</script>'; ?>

Mais une erreur m' est retourné, pour précision j'utilise la variable $size pour permettre l'adaptation de mes images (bannière, menu, ...) à la résolution de l'utilisateur via d'autres variables:

<?php
if ($size <= 900)
{
$banniere = 800;
$menu = 'P';
}
else ($size >= 1300)
{
$banniere = 1280;
$menu = 'G';
}
else
{
$banniere = 1024;
$menu = 'M';
}
?>

Merci d'avoir prit la peine de lire mon problème !

6 réponses

kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
856
14 oct. 2009 à 13:24
Bonjour,

Attention, le PHP est une langage qui s'exécute coté serveur, alors que le javascript s'exécute coté client.
Conclusion, dans ton code, ce qui est mis dans ta variable PHP n'est pas la résultante de ton code javascript, mais ton code lui même (sous forme de texte)

L'erreur affiché est donc plutôt logique et normale. Tu ne peux pas procéder de cette façon.

Ce qu'il faut faire :
Gérer des fichiers CSS différent, que tu charge en fonction de la résolution détectée.

Par exemple, tu as fais 3 fichiers CSS dans lesquels tu as définie 3 classes de style, une pour chaque style de bannière / menu (il faut donc que tu traduise $bannière et $menu sous forme de propriété CSS)
Ensuite, avant de chargé ta page PHP courante, tu vas exécuter le code javascript qui permet de détecter la résolution, et en fonction de la résolution (toujours en code javascript donc), tu vas charger le fichier CSS correspondant.

C'est une manière comme une autre de le faire.
0
YoshK
Messages postés
26
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
16 mars 2011

14 oct. 2009 à 15:01
Merci pour ton aide, une fois posé le problème était effectivement évident. J'ai cependant trouvé une solution autre, l'utilisation d'une page supplémentaire contenant un formulaire caché pour transmettre la résolution de l'utilisateur:

<body onload="document.formRes.resolution.value = screen.width; document.formRes.submit();">
<p style="text-align:center">Vous allez être redirigé dans quelques secondes...<br/>
si la redirection automatique ne fonctionne pas cliquez <a href="accueil.php">ici</a></p>
<form method="post" action="accueil.php" name="formRes">
	<input type="hidden" name="resolution">
</form>
</body>


récupéré par la suite sur la page principale du site:

$size = $_POST['resolution'];


la redirection est en réalité instantanée mais on prévoit le cas ou le serveur serait saturé...
0
YoshK
Messages postés
26
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
16 mars 2011

14 oct. 2009 à 15:42
J'ai cependant un autre problème, la résolution est enregistré dans une variable de session pour être effective sur toute les pages de mon site web.

Voila la nouvelle allure de mon include PHP:

<?php
                if ( isset($_POST['resolution']))
			$_SESSION['resolution'] = $_POST['resolution'];
			
		if ($_SESSION['resolution'] <= 900)
		{
			$banniere = 800;
			$menu = 'P';
		}
		else if ($_SESSION['resolution'] >= 1200)
		{
			$banniere = 1280;
			$menu = 'G';
		}
		else
		{
			$banniere = 1024;
			$menu = 'M';
		}
	?>


Le problème est que lorsque j'accède à une nouvelle page du site, j'obtiens un jolie message d'erreur:
"Notice: Undefined index: resolution in C:\...\monInclude.php on line 21"
la ligne 21 correspondant au début de mon "if"...
0
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
856
14 oct. 2009 à 16:59
Est-ce que tu as bien l'instruction 'session_start()' au début de toutes tes pages PHP ?

Peux-tu mettre le code entier (pour l'accueil)?

Au pire, essai de mettre l'identifiant dans ton champ caché (sur ta page intermédiaire) (<input type='hidden' id='resolution' name='resolution' ... />)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
YoshK
Messages postés
26
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
16 mars 2011

15 oct. 2009 à 08:14
Excellente analyse kij ! C' étais un test ;)

C'est clair et net je suis malade... J'ai oublié d'inclure le fichier qui comporte les fonction php de connexion a la BDD et... Le "session_start" :s

Encore merci à vous deux !
0
kij_82
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
856
15 oct. 2009 à 10:19
Je sais bien que je suis skyzo, mais tu peux te contenter de ne remercier qu'un seul moi ;)

Bon courage pour la suite.
0