Comment encapsuler du Javascript dans du Php?

Fermé
francoisch Messages postés 258 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 16 février 2015 - 12 avril 2007 à 11:15
 Francoisch - 13 juin 2007 à 21:56
bonjour

J'ai qqes ligne de Js à exécuter en Php mais il doit me manquer qqechose, je n'y arrive pas.

Voici ce que je fais:
- je met tout le code Js dans une ligne echo(" ");
- à chaque " je met juste avant un \

Y a t il autre chose à faire?

En particulier, que faire avec les blancs du Js? les supprimer?

J'ai conscience de poser une question bateau mais, après de nombreuses recherches, je n'ai rien trouvé.

Par avance merci de votre aide.

F

20 réponses

bonjour

Oui, j'ai essayé de faire attention aux apostrophes et guillemets mais ça ne suffit manifestement pas.

Sinon, du Js dans du Php, ça marche, à ma connaissance.

Merci pour votre aide.

Francois
0
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
16 avril 2007 à 21:56
pourquoi n'essaies-tu pas un exemple très simple?
0
Oui, Serge, c'est une excellent idée.

En fait, j'y suis presque car mon code Js n'est pas bien gros:
[code]
echo("
<script type=\"text/javascript\">
<!-- debut
function resolution() {
document.location=\"<?php echo $_SERVER['PHP_SELF']; ?>?width=\"+screen.width+\"&height=\"+screen.height;
}
// fin -->
</script>
");
[/code]
code et ajouts Php y compris, comme tu le vois.

Ca ne fonctionne pas; je cherche le truc.

Merci de ton aide.

Francois
0
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
16 avril 2007 à 22:30
Mais là tu mets du php dans le javascript en plus, non? Essayes avec un javascript encore plus simple comme:
alert("Bonjour!");


Je ne crois pas que tu aies besoin de mettre phpecho dans le javascript, de toute façon.

Serge.
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
17 avril 2007 à 03:51
Tout à fait.

Tu ne dois pas mettre :

<?php echo $_SERVER['PHP_SELF']; ?>

Et oui tu est encore dans echo ! Don encore dans php !

il te faute mettre :

Avec echo
<?php


echo("
<script type=\"text/javascript\">
<!-- debut
function resolution() {
document.location=\"" . $_SERVER['PHP_SELF'] . "?width=\"+screen.width+\"&height=\"+screen.height;
}
// fin -->
</script>
"); 


?>

ou

Sans echo
<?php

//ici du code php

?>

<script type=\"text/javascript\">
<!-- debut
function resolution() {
document.location=\"<?php echo $_SERVER['PHP_SELF']; ?>?width=\"+screen.width+\"&height=\"+screen.height;
}
// fin -->
</script> 

<?php

//ici du code php

?>
0
francoisch > s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018
18 avril 2007 à 21:53
bonjour s.spark

Juste pour comprendre, la formule sans Echo ne doit pas me convenir car mon module est en Php pur, sans environnement Html (Head, Body).

Je ne me vois pas fermant le Php pour exécuter du Js, je crois que ça ne marcherait pas.

Si je suis dans le vrai, il me reste tjs la formule avec Echo.

Merci de ton aide, je vais reprendre ton code et tester.

Je te tiendrai au courant.

Francois
0
francoisch > s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018
18 avril 2007 à 22:05
bonsoir de nouveau

J'ai mis ensemble le code Js encapsulé que tu m'as corrigé avec un petit bout de code Php de test qui tente de récupérer les valeurs width et height; voici le tout:
[code]
<?php
echo(" <script type=\"text/javascript\"> <!-- debut function resolution() { document.location=\"" . $_SERVER['PHP_SELF'] . "?width=\"+screen.width+\"&height=\"+screen.height; } // fin --> </script> ");

if(!isset ($_GET['width']) and !isset ($_GET['height'])){
echo '<body onload="resolution();">';
}else{
echo '<body>';
echo 'Votre résolution est ' . $_GET['width'] . ' * ' . $_GET['height'];
}
?>
[/code]
mais la deuxième partie ne récupère pas les valeurs.

Merci de ton aide.

Francois
0

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

Posez votre question
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
18 avril 2007 à 22:11
Il y a du code javascript qui mesure la grandeur de la fenêtre aussi. Si ce n'est pas possible avec php.
0
Serge, merci de ta réponse

J'aurai du expliquer ce que je veux faire: récupérer en Php les dimensions de la fenêtre.

Comme ça n'existe pas en Php, je le fais en Js.

Simplement, comme j'en ai besoin en Php pur, je dois encapsuler, ce que j'essaie de faire.

En espérant que ça aide.

Si qqun a le code en Php pour faire ça, il est bienvenu.

Francois
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
18 avril 2007 à 22:48
Le Javascript est un langage coté client alors que le php est un langage coté serveur. Tu ne peux pas exécuter du javaisscript dans du php. Le javascript est obligatoirement dans la page avec l'html.

Tu peux en javascript écrire un cookies dans lequel tu mets les information sur la résolution de l'écran, puis en php lire le cookies (mais pour ca il faut recharger la page). Tu peux conditionner la page pour lire le cookies. Du genre si le cookie n'est pas présent on fait une redirection sur la page courante, là 1ème fois grace au javascript le cookie sera écrit et au 2ème appel de la page on lit le cookie.

Mais il faut prévoir que si la personne interdit l'écriture des cookies (c'est mon cas) que le script ne tourne pas en boucle. Même chose si le javascript est désativé (le cookies n'est jamais créé).

Maintenant je me demande à quoi ca peut bien servir de connaître la résolution des gens à par faire des statistiques.

0
bonjour s.spark et merci de ta réponse.

Pour le Php, quand on en met dans une page Html, il s'exécute en premier sur le serveur puis la page est ensuite exécutée sur le client, je crois.

Pourquoi cela ne marcherait-il pas de la même manière en Php pur, sans Html?

Je rate qqechose?

Connaitre la résolution de l'écran pour moi est important car j'en ai besoin pour dimensionner plusieurs fenêtres que je positionne entre elels et dans l'écran et que j'ouvre ensuite.

Là, si je taille mes fenêtres pour du 1280*1024 et qu'un client en 1024*768 affiche ça, ou l'inverse, le résultat ne sera pas beau.

Donc je cherche à obtenir les valeurs de width et height en Php.

Pour le cookie, aurais tu un exemple?

Par avance merci.

Francois
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
20 avril 2007 à 00:27
Le php n'ai jamais vu par le client, une fois que tu aura intégré se concept tu comprendra tous le reste.

Pour tes problème de width et height utilise des valeurs relatives, par exemple :

#menu {width: 20%;}
#container {width: 80%;}
#footer{width: 100%;}

0
francoisch > s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018
26 avril 2007 à 21:47
bonjour s.spark et merci de ta réponse.

Oui, ma compréhension est que le code Php est d'abord exécuté sur le serveur avant que la page soit transmise au Client et exécuté là.

Effectivement, le code Php n'est pas visible chez le Client.

Oui, maintenant que tu m'y fais penser, comme le Js est exécuté en dernier, il ne peut pas passer d'informations au Php qui aura alors déjà été exécuté.

Juste?

Merci.

Francois
0
Jacobéo Messages postés 304 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 28 août 2008 79 > s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018
26 avril 2007 à 22:33
Bonsoir à tous,

Je pense le contraire. Cela serait possible. Je dis "serait", car je ne connais rien dans ces deux langages, mais j'ai dans ma "doc" Les Cahiers du programmeur PHP cahier2 de Philippe Chaléat, un article page 58 (et suivantes) qui écrit ceci:

...La liste des valeurs va être générée selon le principe des listes que l'on génère sans filtre, à savoir que l'on génère du code JavaScript, interprêté par le navigateur pour formater la liste.

Le script PHP utilisé pour générer la liste, ..... A partir du résultat de cette requête, il génère le code JavaScript nécessaire pour formater la liste.

J'arrête ici, c'est trop à écrire. Ce livre est disponible aux Editions Yerolles sous le n°ISBN: 2-212-11089-8 Ph. Chaléat est ingénieur pour la société INFO-LOGIC et D. Charnay ingénieur au Centre de calcul à l' INPN-PP et directeur adjoint de la Communication Scientifique au CNRS.

https://www.editions-eyrolles.com/Livre/9782212110890/php-2-ateliers-web-professionnels-avec-php-mysql-et-javascript Voir Téléchargements "atelier10"
0
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
27 avril 2007 à 02:52
Faudrait savoir ce que François veut vraiment faire. Je ne vois pas l'idée de se servir d'une fonction javascript si la page n'est pas interactive.

De plus, je me demande si la résolution mesurée par le php n'est pas simplement la grandeur de l'écran du moniteur. Faut pas oublier que les gens ouvrent souvent des fenêtres plus petites que l'écran.
0
bonjour

Au départ, mon besoin:
récupérer dans une page Php la résolution de l'écran de chaque visiteur,
pour présenter la page de manière adaptée à chacun.

A ma connaissance:
- en Php, il n'existe pas de variable / fonction donnant les valeurs width et height
- par contre, ça existe en Js

Voila d'où je suis parti.

J'avais donc pensé à encapsuler un peu de code Js, qui fait juste ça, dans mon Php.

Apparement, ça ne fonctionne pas; je partage les avis donnés ci dessus.

Je cherche maintenant à faire sans ces deux valeurs.

Merci à tous de votre aide.

Francois
0
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
29 avril 2007 à 01:48
Ah, bon. Là, tout est clair.
Ce serait possible et plutôt facile de faire ce que tu dis avec une redirection de page, ou une retélécharge de la page. Le premier coup, un javascript mesure les variables hauteur et largeur de la page et appelle une page (ou la même page) avec les variables, que le php prends en charge le second coup.

Serge.
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
29 avril 2007 à 03:13
C'est exactement ce que j'ai dis plus haut, sauf que je préconise l'utilisation d'un cookies pour éviter d'avoir des page longues à charger avec des refresh systématique.
0
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47 > s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018
29 avril 2007 à 07:40
Oui. Des cookies seraient mieux. Quoique ma suggestion ne fait pas de pages longues et les refresh ne sont pas systématiques. Enfin, ça dépend toujours de ce qu'il voulait faire.
0
bonjour et merci de vos réponses.

A la réflexion, utiliser un cookie semble effectivement la bonne solution.

Je n'y connais rien en cookie mais je commence à me documenter; ça a l'air assez simple.

Donc, je prévois de:
- dans ma page Html, créer un cookie en Js avec les 2 valeurs width et height récupérées comme d'hab
- dans la page Php appellée par la page Html, lire le cookie

Ca vous parait bien? manque t il qqechose?

Par avance merci de votre aide.

Francois
0
bonjour

J'ai maintenant:
- une page Html qui crée deux cookies, pour width et height
- une page Php, appellée par la page Html, qui lit les deux cookies

Mais ça ne fonctionne, la page Php n'affiche les deux valeurs, qu'après un Refesh de la page Html.

Comment puis-je provoquer un Refesh automatiquement dans la page Html?

Par avance merci de votre aide, j'y suis presque.

Francois
0
Bussy14 Messages postés 45 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 4 avril 2013 5
30 avril 2007 à 23:59
Salut,

pour recharger ta fenetre automatiquement, c'est du javascript:
<script language="JavaScript">
    window.location.reload();
</script>


Enfin, en t'arrangeant pour éviter de la faire recharger à répétition.

- Thibaud -
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
1 mai 2007 à 00:27
En PHP ça donne ça :

<?php
//----------------------------------------------------------------------
// Si on avais écrit les cookies en PHP on aurrait fais comme ça :
setCookie("tonsite[width]", 1024, (time() + 31536000));
setCookie("tonsite[height]", 768, (time() + 31536000));
//----------------------------------------------------------------------
?>


Note : la le cookie est sous forme de tableau

<?php
// On récupère le lien de la page courente (attention sans les paramettres après "?")
$pagecourente = $_SERVER["SCRIPT_NAME"];


// On récupère les cookies de "tonsite"
$config = $_COOKIE["tonsite"];

// On supose que les cookies se nome tonsite[width] et tonsite[height]

// si les 2 cookies son vide on redirige vers la page courente, attention au boucle sans fin
if (empty($config[width]) AND empty($config[width]))
	{
		header("Location: $pagecourente");
	}
?>


Garde bien en tête que je Javascript et les cookies, ça se désactive. Prévois une configuration minimal par défaut si aucun choix automatique n'est faisable et éventuellement un message qui informe le visiteur que pour une navigation optimal les cookies /javascript doit être autorisé pour ce site.
0
francoisch Messages postés 258 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 16 février 2015 6
3 mai 2007 à 16:04
bonjour et merci de vos réponses.

J'ai commencé par utiliser la réponse de Thibaud.

Effectivement, en plaçant ce code dans ma page, elle n'arrive plus à se charger; comment faire pour que ce chargement ne soit fait qu'une seule fois?

Je vais essayer la réponse de s.spark.

Je vous tiendrai au courant.

Merci encore.

Francois
0
francoisch Messages postés 258 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 16 février 2015 6
3 mai 2007 à 18:53
bonjour

J'ai essayé ta réponse, s.spark, mais j'ai des erreurs, il doit me manquer des billes; voila:

J'ai fait deux pages:
- proto72.php
- dans Body, je met du Javascript pour obtenir width et height
- ensuite je met le code avec les 2 setcookie
- proto72a.php
- je met l'autre morceau de code

J'ai dû faire une / des erreurs car à l'exécution, j'ai des injures: Warning: Cannot modify header information - headers already sent by (output started at /mnt/141/sda/1/6/fcproto/proto72.php:7) in /mnt/141/sda/1/6/fcproto/proto72.php on line 17

Manifestement, Php n'aime pas qqechose.

En cherchant, je voyais une leçon Php qui dit que Setcookie doit être avant tout ordre Html; si c'est vrai, comment faire pour obtenir les valeurs de Width et Height à mettre dans le cookie?

Tu vois, il me manque des billes; je peux ajouter le code dans ce forum si ça peut aider mais je n'ai pas fait de fantaisie.

Merci par avance de ton aide.

Francois
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
4 mai 2007 à 22:22
Le code que je t'ai passé doit être placé tout en haut. Sans tes pages de code je ne peut rien dire.
0
francoisch Messages postés 258 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 16 février 2015 6
6 mai 2007 à 14:15
bonjour s.spark

Voici le premier de mes 2 modules, en entier:
[code]
<html>
<head>
</head>
<body>

<!-- initialiser les variables Width et Height -->
<script type="text/javascript" language="JavaScript">
<!--
var width = screen.width;
var height = screen.height;
//-->
</script>

<?php
//----------------------------------------------------------------------
// Si on avait écrit les cookies en PHP on aurrait fait comme ça :
setCookie("tonsite[width]", 1024, (time() + 31536000));
setCookie("tonsite[height]", 768, (time() + 31536000));
//----------------------------------------------------------------------
include ("proto72a.php");
?>

</body>
</html>
[/code]

et l'autre:
[code]
<?php

// On récupère le lien de la page courante (attention sans les paramettres après "?")
$pagecourante = $_SERVER["SCRIPT_NAME"];

// On récupère les cookies de "tonsite"
$config = $_COOKIE["tonsite"];

// On suppose que les cookies se nome tonsite[width] et tonsite[height]

// si les 2 cookies son vide on redirige vers la page courente, attention au boucle sans fin
if (empty($config[width]) AND empty($config[height]))
{
header("Location: $pagecourante");
}

echo $width."<br>";
echo $height."<br>";


?>
[/code]

Merci encore de ton aide.

Francois
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
9 mai 2007 à 14:06
Tu n'as pas retravaillé le code, ça ne peut pas fonctionne comme ça.

Le cookies doit être écrit en Javascript, le code PHP que je t'ai donné n'était là qu'a titre d'exemple.

RIEN ne doit être affiché avant une modification de header. Il donc c'est nomarl comme je te l'ai dis précédament que tu ai un message d'erreur.
Mais, mais, mais, ... l'utilisation de header("Location: $pagecourante"); est une erreur de ma par.

Il faut que redirige vers la page courent en Javascript :
si le cookies n'existe pas on le crée puis on redirige vers la page courante s'il existe fin du JS.

Donc au final PHP ne fera que lire le cookies et rien d'autre.
0
bonsoir s.spark

Tu avais compris que je n'avais pas compris; voici quelque chose de mieux, je crois, avec un petit travail supplémentaire:
------------------le premier module ---------------------------
<html>
<head>

<script type="text/javascript" language="JavaScript">
<!--
function EcrireCookie(nom, valeur)
{
var argv=EcrireCookie.arguments;
var argc=EcrireCookie.arguments.length;
var expires=(argc > 2) ? argv[2] : null;
var path=(argc > 3) ? argv[3] : null;
var domain=(argc > 4) ? argv[4] : null;
var secure=(argc > 5) ? argv[5] : false;
document.cookie=nom+"="+escape(valeur)+
((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
((path==null) ? "" : ("; path="+path))+
((domain==null) ? "" : ("; domain="+domain))+
((secure==true) ? "; secure" : "");
}
//-->
</script>

</head>
<body>

<p>Avant.</p>
<script type="text/javascript" language="JavaScript">
<!--
var width = screen.width;
var height = screen.height;
EcrireCookie("width", width);
EcrireCookie("height", height)
//-->
</script>

<?php
include ("proto72a.php");
?>

<p>Après.</p>

</body>
</html>
-------------------------------------------------------------------

------------------le deuxième module ---------------------------
<?php

echo "Avant2."."<br>";

$width= $_COOKIE["width"];
$height= $_COOKIE["height"];

echo "Width: ".$width."<br>";
echo "Height: ".$height."<br>";

echo "Après2."."<br>";

?>
-------------------------------------------------------------------

Tout ça m'affiche:
-------------------------------------------------------------------
Avant.

Avant2.
Width: 1280
Height: 1024
Après2.

Après
-------------------------------------------------------------------

C'est rustique mais ça a l'air de marcher; simplement, je ne prend pas en compte les cas d'erreur, que je ne connais pas d'ailleurs.

Quels commentaires as tu?

Par avance merci.

Francois
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618 > francoisch
19 mai 2007 à 14:48
Voilà une idée comme une autre (merci d'utiliser la balise code pour afficher du code) :

<html>
	<head>
	
		<script type="text/javascript" language="JavaScript">
			<!--
			function EcrireCookie(nom, valeur)
				{
					var argv=EcrireCookie.arguments;
					var argc=EcrireCookie.arguments.length;
					var expires=(argc > 2) ? argv[2] : null;
					var path=(argc > 3) ? argv[3] : null;
					var domain=(argc > 4) ? argv[4] : null;
					var secure=(argc > 5) ? argv[5] : false;
					document.cookie=nom+"="+escape(valeur)+
					((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
					((path==null) ? "" : ("; path="+path))+
					((domain==null) ? "" : ("; domain="+domain))+
					((secure==true) ? "; secure" : "");
				}
			//-->
		</script>
	
	</head>
		<body>
		
			<script type="text/javascript" language="JavaScript">
				<!--
				var width = screen.width;
				var height = screen.height;
				EcrireCookie("width", width);
				EcrireCookie("height", height)
				//-->
			</script>
			
			<?php include ("proto72a.php");	?>	
		
		</body>
</html>


proto72a.php
<?php
// On défini une taille par défaut
$width=800;
$height=600;

// si les 2 cookies existe on défini les variables
if (!empty($_COOKIE["width"]) AND !empty($_COOKIE["height"]))
{
	$width=$_COOKIE["width"];
	$height=$_COOKIE["height"];
} 

// Les variable on été défini
echo "Width : ".$width."<br>";
echo "Height : ".$height."<br>";
?> 


Pour compléter le code tu peux en Javascript faire une direction vers la page courante si les cookies n'existe pas.
Pour éviter que le script tourne en boucle si l'écriture des cookies est interdit tu dois tester si tu peut les écrire ou non.

Tu peux aussi mettre un noscript, si le Javascript est désactiver, tu peut conseiller de l'activer pour une utilisation optima de ton site.
<noscript>
	<p>Pour une utilisation optimal de notre site nous vous conseillons d'activer le Javascript</p>
</noscript>

0
bonjour

Juste une question: ces deux cookies, width et height, doivent avoir été écris sur mon disque dur.

Je ne les trouve pas, sur aucun disque.

Une idée?

Merci.

Francois
0
s.spark Messages postés 2485 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 618
19 mai 2007 à 14:51
Sous firefox on peut afficher les cookies via le menu outil.

Sinon je crois que Internet explorer les place là :

C:\Documents and Settings\[pseudo]\Cookies\
0
bonjour

J'ai été occupé ailleurs un moment mais je reviens en ligne pour vous remercier d'abord et dire que je vais mettre en oeuvre vos conseils.

Merrci donc de vos réponses.

Francois
0
L'exécution de code javascript ne devrait pas poser de problèmes.
Il faut cependant faire attention aux guillemets :

$codejavascript = '<script type="text/javascript">document.write("Bonjour");</script>';

echo $codejavascript;
-1
nassdak Messages postés 61 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 8 juin 2007 23
12 avril 2007 à 11:27
Salut!
C'est assez vague comme problème.
Mais ce qui est sûr, c'est que php est un langage côté serveur et javascript côté client. Donc je ne suis pas sûr que tu puisse faire ce que tu veux...
-1