Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1090 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Appel en Javascript avec paramètres vers Php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Appel en Javascript avec paramètres vers Php

n°1659746
francoisch​1
Posté le 18-12-2007 à 10:47:36  profilanswer
 

Bonjour
 
Je veux appeller une CSS en lui passant une variable calculée en Javascript par une fonction width().
 
Ce code n’appelle pas la CSS :

Code :
  1. En JS: document.write('<link rel="stylesheet"  href="style00.php?parm1=' + width() + '" media="screen" />');


et pourtant la valeur calculée par width existe et est correcte.
 
Ce code appelle correctement la CSS mais avec une valeur fixe :

Code :
  1. <link rel="stylesheet"  href="style00.php?parm1=1200" media="screen" />
  2. En JS: document.write('<link rel="stylesheet"  href="style00.php?parm1=1200" media="screen" />');


 
Conclusions:
- la CSS existe et peut être appellée
- l'appel ne fonctionne pas en passant la variable
 
Ai-je une erreur de syntaxe JS?
L’interpreteur JS de mon hébergeur est-il en cause ?
 
Merci par avance de vos suggestions et de votre aide.
 
Francois

mood
Publicité
Posté le 18-12-2007 à 10:47:36  profilanswer
 

n°1659879
nargy
Posté le 18-12-2007 à 13:19:29  profilanswer
 

olala!
 
Essaye:

Code :
  1. alert('<link rel="stylesheet"  href="style00.php?parm1=' + width() + '" media="screen" />');


Tu y verra mieux, je pense.
 
je dis "olala!" à cause de cette phrase:
"L’interpreteur JS de mon hébergeur est-il en cause ?"
Non, certainement pas puisque l'interpréteur JS est sur ton navigateur.
 
Enfin, tu calcule la largeur de l'écran en pixels, quand tu fait ça tu peux être sûr à 100% que ton site ne passera pas sur tous les médias. Il sera joli sur ton écran à toi qui a servi a testé le site. Fo utiliser les pourcentages, c'est à ça que ça sert.

n°1659880
olivthill
Posté le 18-12-2007 à 13:21:17  profilanswer
 

Cela devrait marcher, mais :
 
- Le nom de la fonction, "width", est mal choisi car il peut être confondu avec un mot réservé.
- Si la valeur retournée par la fonction est un nombre, alors il faut le convertir en chaine de caractères par String()

n°1659896
nargy
Posté le 18-12-2007 à 13:35:50  profilanswer
 

olivthill a écrit :

Cela devrait marcher, mais :
 
- Le nom de la fonction, "width", est mal choisi car il peut être confondu avec un mot réservé.
- Si la valeur retournée par la fonction est un nombre, alors il faut le convertir en chaine de caractères par String()


 
non non, c bon: 'mon ' + 1 + 'er site' -> 'mon 1er site'
par contre: 'mon ' + (1+1) + 'eme site' -> 'mon 2eme site'

n°1659901
francoisch​1
Posté le 18-12-2007 à 13:43:50  profilanswer
 

bonjour
 
J'ai essayé avec String() mais ça n'a rien changé.
 
D'ailleurs, j'ai déjà appellé du Php en lui passant des paramètres de cette manière, sans formater avec String() ou autre.
 
Par contre, l'appel était avec Href, jamais avec Link jusqu'ici.
 
Link aurait-il une limitation?
 
Francois

n°1659916
nargy
Posté le 18-12-2007 à 13:58:49  profilanswer
 

Comme l'indique olivthill, change le nom de la fonction 'width'.
Relis ton code attentivement, soit la fonction width que tu appelle n'est pas la bonne, soit elle retourne une valeur fixe. Poste le code de la fonction width.
Il n'y a pas de limitation particulière au tag Link.

n°1659918
nargy
Posté le 18-12-2007 à 14:05:17  profilanswer
 

Autre piste: ce peut être le script PHP qui ne tient pas compte de la valeur passée en paramètre...

n°1659923
francoisch​1
Posté le 18-12-2007 à 14:12:32  profilanswer
 

bonjour
 
Voila mon code JS:

Code :
  1. <script language="JavaScript" type="text/javascript">
  2. function widthtoto()
  3. {
  4. if (window.innerWidth)
  5.  {
  6.  widtha = window.innerWidth;
  7.  }
  8. else if (document.documentElement && document.documentElement.clientWidth)
  9.  {
  10.  widtha = document.documentElement.clientWidth;
  11.  }
  12. else if (document.body)
  13.  { 
  14.  widtha = document.body.clientWidth;
  15.  }
  16. return(widtha);
  17. }
  18. document.write('<link rel="stylesheet" href="style00.php?parm1=' + widthtoto() + '" media="screen" />');


 
Je récupère ça dans style00.php avec $_GET['parm1'].
 
Aussi, je teste ça en IE7; pourrait-il y avoir un pb de navigateur?
 
Francois

n°1660004
nargy
Posté le 18-12-2007 à 15:30:29  profilanswer
 

attends, je crois avoir pigé, ajoute:
type="text/css"
à la balise link, et dans le script php-css, ajoute un
header('content-type: text/css')
Enfin, vérifie que la balise <link> soit bien entre les balises <head> ... </head>.

n°1660078
francoisch​1
Posté le 18-12-2007 à 16:35:14  profilanswer
 

J'ai:
- ajouté type="text/css" dans le Link
- vérifié que j'avais bien header('content-type: text/css') dans style00.php
- le Link est bien dans le Head
 
mais ça ne fonctionne tjs pas.
 
Aïe.
 
Francois

mood
Publicité
Posté le 18-12-2007 à 16:35:14  profilanswer
 

n°1660093
francoisch​1
Posté le 18-12-2007 à 16:52:34  profilanswer
 

Je viens de faire un essai avec:  

Code :
  1. function widthtoto()
  2. {
  3. widtha = 1024;
  4. return(widtha);
  5. }

 
et ça a donné le résultat négatif habituel.  
 
Donc, même en éliminant un éventuel pb de calcul de la valeur, l'appel ne se fait pas correctement.  
 
Au besoin:  
- mon URL: http:cegvh1.free.fr/  
- la CSS: style00.php  
 
Merci de ton aide.  
 
Francois

n°1660105
nargy
Posté le 18-12-2007 à 17:03:15  profilanswer
 

Tu as une erreure dans ton script:
http://cegvh1.free.fr/style00.php?param1=1024
ça ne marchera donc pas.
 
En plus, quand je regarde les informations de la page, il est indiqué:
type: text/html
Pour éviter ça, ajoute:

Code :
  1. header('content-type: text/css');


tout au début du script PHP (lis la doc de cette fonction sur http://php.net/header ). Sinon, le navigateur traite ton style CSS comme une page html.
 
Edit: la fonction widthtoto semble fonctionner sous FF, pas testé sous d'autres navigateurs, mais à vue de nez c correct.


Message édité par nargy le 18-12-2007 à 17:04:59
n°1660117
francoisch​1
Posté le 18-12-2007 à 17:19:40  profilanswer
 

Les premières lignes de style00.php:

Code :
  1. <?php
  2. /* reprise en PHP des variables HTML */
  3. $width=$_GET['parm1'];
  4. $reducteur1 = 5;
  5. $widthimage = floor($width/$reducteur1);
  6. $reducteur2 = 3/2;
  7. $heightimage = floor($widthimage/$reducteur2);
  8. // source: http://sperling.com/examples/pcss/>
  9. header("Content-type: text/css" );
  10. $couleurfond = "#D5E9D7";
  11. ...
  12. ...


si ça peut être utile.
 
Francois

n°1660125
nargy
Posté le 18-12-2007 à 17:30:09  profilanswer
 

je viens de tester cette page:

Code :
  1. <html>
  2. <script>
  3. document.write('<link rel=stylesheet href="http://cegvh1.free.fr/style00.php?param1=1024">');
  4. </script>
  5. <body>
  6. Hello
  7. </body>
  8. </html>


et ça fonctionne.
 
Ce qu'il reste comme erreure provient de ton javascript, dans lequel tu y as mis des commentaires HTML <!-- --> un peu n'importe où.
Il faut faire comme ça pour HTML4Transitionnal avec un max de compatibilité:

Code :
  1. <script type="text/javascript" language="JavaScript">
  2. <!--
  3. // placer tout le code JS ici, sans commentaires HTML, se méfier aussi des chaines JS contenant des commentaires HTML comme par exemple la flèche '->' longue avec deux tirets
  4. // -->
  5. </script>


Message édité par nargy le 18-12-2007 à 17:31:59
n°1660142
francoisch​1
Posté le 18-12-2007 à 17:41:41  profilanswer
 

Oui, tout à fait juste, j'avais mis des commentaires erronés.
 
Avec cet appel et une valeur fixe produite par width, l'appel fonctionne, d'accord avec toi.
 
Maintenant, quand je remet le calcul de la valeur width, ça ne fonctionne plus.
 
J'ai la conviction que la valeur passée est nulle, faute pour le calcul d'avoir trouvé une valeur d'origine parmi les 3 prises en compte.
 
Aïe.
 
Francois

n°1660145
nargy
Posté le 18-12-2007 à 17:45:36  profilanswer
 

Pour vérifier cette hypothèse, utilise ce truc:

Code :
  1. window.alert('<link rel="stylesheet"  href="style00.php?parm1=' + widthtoto() + '" media="screen" />');


Celà fait apparaître une boîte d'alerte javascript avec un message dedans. Très pratique pour voir exactement ce que vaut une chaîne JS.
 
Edit: Ces lignes:

Code :
  1. if (window.innerWidth)
  2. {
  3. widtha = window.innerWidth;
  4. }


fonctionnent toujours avec les navigateurs compatibles DOM (IE6/7, moz/firefox entre autre).


Message édité par nargy le 18-12-2007 à 17:47:58
n°1660148
francoisch​1
Posté le 18-12-2007 à 17:49:59  profilanswer
 

Oui, j'avais mis un Alert, dans le Body, et la valeur produite par Width était correcte.
 
L'idée sur laquelle je suis là maintenant est que width() produit une valeur vide, faut d'avoir trouvé ses données de base de calcul (document.body, ...).
 
Si ça t'inspire.
 
Francois

n°1660153
nargy
Posté le 18-12-2007 à 17:56:40  profilanswer
 

Ok, il reste des commentaires HTML mal placés dans le JS.
Ha non, ça marche maintenant.
Tu peux ajouter en dessous du copyright un remerciement à forum.hardware.fr ;)

n°1660155
francoisch​1
Posté le 18-12-2007 à 17:58:28  profilanswer
 

Mon problème est si difficile à identifier / corriger que je mettrai un remerciement à tous ceux, comme toi, qui y auront contribué.
 
Merci encore de tes efforts, même si ça ne fonctionne pas encore.
 
Francois

n°1660160
nargy
Posté le 18-12-2007 à 18:10:42  profilanswer
 

Bah il y avait deux problèmes différents en fait: le type text/css et les commentaires dans le JS. Tu devrais t'en sortir maintenant. Bonne continuation.

n°1660163
francoisch​1
Posté le 18-12-2007 à 18:13:55  profilanswer
 

Oui, j'espère, j'ai tjs une valeur vide pour document.body.
 
Merci de ton aide.
 
Francois

n°1660186
francoisch​1
Posté le 18-12-2007 à 18:58:51  profilanswer
 

Et pourquoi pas appeler ma CSS deux fois, une fois dans le Head pour tout ce qui est fixe et une autre fois, juste après le Body, pour tout ce qui est variable?
 
J'ai essayé, ça a bonne mine.
 
Qu'en penses tu?
 
Francois

n°1660197
nargy
Posté le 18-12-2007 à 19:25:57  profilanswer
 

Ce serait surtout une bonne idée de séparer le CSS statique de la page et le CSS dynamique.
Le tag Link se mets toujours dans le head. Idem pour les définitions de style et les scripts JS. Même si les navigateurs sont souples avec cette norme.
 
Or document.body est en effet non défini au moment du chargement du HEAD de la page.
 
Le compromis possible: ajouter un tag 'style' (minimaliste) juste au début de body.

n°1660204
francoisch​1
Posté le 18-12-2007 à 19:40:50  profilanswer
 

J'adhère absolument à ce que tu dis, tellement que je vais le faire.
 
Merci de ton aide.
 
Francois

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Appel en Javascript avec paramètres vers Php

 

Sujets relatifs
[RESOLU] Integration variable dans un chemin javascriptPHP et MySQL
[RESOLU]Afficher le poids des fichiers listés automatiquement en PHPPHP :Récupération d'une donnée à l'aide d'une requête
peut on séparer les chiffres d'un nombre en PHP ?[PHP][DOM] balises select non envoyé au serveur
Javascript compatible IE 7[PHP] Avis sur formulaire et session
[PHP](AJAX) - Pb Caractères spéciaux (apostrophe) ..euh RESOLU en faitEnregistrer les paramètres d'un fichier de configuration
Plus de sujets relatifs à : Appel en Javascript avec paramètres vers Php


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR