Script générant du JS => accès à $_GET de la page appelante ?

Script générant du JS => accès à $_GET de la page appelante ? - PHP - Programmation

Marsh Posté le 05-03-2012 à 16:08:05    

Salut tout le monde,
 
J'ai une page blabalbla.html?pid=xxx qui contient le code
<script language="JavaScript" src="js/confirm.php"></script>
 
Et dans confirm.php j'ai besoin d'accéder à la valeur de $pid. Est-ce que j'ai un moyen de le faire ? En plus la config de mon serveur m'empêche de faire des tests :-( Je n'arrive pas à lister les valeurs dans $_ENV et même dans $GLOBALS...
 
Merci pour vos lumières !
@+, Sophie

Reply

Marsh Posté le 05-03-2012 à 16:08:05   

Reply

Marsh Posté le 05-03-2012 à 17:21:19    

Que contient le fichier "confirm.php" ?
 
Si ça contient du code PHP, alors ça ne va pas, car ce n'est pas cohérent avec la balise <script language="JavaScript" ... et car le PHP tourne sur le serveur, alors que le javascript tourne sur le poste client.
Si ça contient du code Javascript, alors ça va, car c'est cohérent avec la balise <script language="JavaScript" ...
 
Du côté du serveur, en PHP, les paramètres Get sont disponibles  dans $_GET
 
Du côté du client, en Javascript, les paramètres Get peuvent être obtenus en découpant l'URL.
Par exemple avec la fonction :

   function getParamValue (sURL, Param, Default)  
    {
         //  Extracts and returns the parameter value from the URL for the specified parameter.
         //  If the parameter does not occur is the URL, the default value is returned.
         //  This function is not Case-sensitive.
         var sURLUpper = sURL.toUpperCase() + "&";
         Param = Param.toUpperCase();
         if (!Default) Default="";
     
         var Pos = sURLUpper.indexOf (Param + "=" );
         if (Pos==-1) return Default;
         Pos = Pos + Param.length + 1;
         return sURL.substring (Pos, sURLUpper.indexOf("&", Pos));
    }


 
Edit : Ou avec :

function GetParam(name)
{
  var start=location.search.indexOf("?"+name+"=" );
  if (start<0) start=location.search.indexOf("&"+name+"=" );
  if (start<0) return '';
  start += name.length+2;
  var end=location.search.indexOf("&",start)-1;
  if (end<0) end=location.search.length;
  var result=location.search.substring(start,end);
  var result='';
  for(var i=start;i<=end;i++) {
    var c=location.search.charAt(i);
    result=result+(c=='+'?' ':c);
  }
  return unescape(result);
}


Message édité par olivthill le 05-03-2012 à 17:24:00
Reply

Marsh Posté le 05-03-2012 à 19:13:32    

confirm.php contient du PHP qui imprime du JS, des traitements de données et des lignes echo "document.write('blablabla');\n";
Je maîtrise assez bien la différence entre PHP et JS en fait... :-)
 
Et ce dont j'ai besoin, c'est bien d'avoir dans les données PHP le contenu de l'URL de la page qui inclut le JS. Donc pas dans $_GET puisque pas possible d'avoir directement l'appel à confirm.php?pid=xxx
 
Des idées ?

Message cité 1 fois
Message édité par sophievm le 05-03-2012 à 19:18:54
Reply

Marsh Posté le 06-03-2012 à 00:22:57    

Ben tu passes ce Pid dans l'appel à ton script.
 
Ce que je ne comprend pas c'est ton besoin de générer du JS depuis PHP.
 
Tu aurais codé un webservice avec ensuite fait un petit bout de code ajax ça aurait été bien plus propre.


---------------
Blablaté par Harko
Reply

Marsh Posté le 06-03-2012 à 00:53:49    

Je n'ai pas accès à l'appel du script.
Mon besoin c'est comme si je mettais du PHP dans WordPress.
Et j'parle pas ajax :-(

Reply

Marsh Posté le 06-03-2012 à 10:35:23    

sophievm a écrit :

confirm.php contient du PHP ...

Alors, ça ne peut pas marcher.
Donc, stop, on ne va pas plus loin, ça ne sert à rien.
 
Le src est résolu sur le poste client, pas sur le serveur.
 
C'est la confusion habituelle des débutants.
Il y a une partie serveur, et une partie client. Elles sont différentes.
On ne peut pas faire tourner du PHP sur le poste client (sauf exception, par exemple, si ce poste client est aussi un serveur, ce qui arrive parfois en développement, mais ce qui est exceptionnel).
Et inversement, on ne peut pas faire tourner de javascript sur le poste serveur (sauf exception).
 

Reply

Marsh Posté le 06-03-2012 à 12:27:18    

Du haut de son expertise, @olivthill an conclu que j'étais une débutante... [soupir]
Donc j'explique : quand on a une page HTML sur laquelle on ne peut pas exécuter de PHP (par exemple si on utilise un CMS correctement sécurisé) il y a une possibilité : on inclut un script JS, qui en fait est du PHP, qui fait les traitements dont on a besoin sur le serveur, et qui à coup de echo "document.write('blabla');\n"; écrit ce qu'on veut. Miracle !
Mais peut-être que le problème particulier que j'ai n'a pas de solution, en tout cas visiblement ma manip est trop difficile à comprendre pour le "vétéran" que tu es ;-)
Merci de n'avoir pas essayé de m'aider

Reply

Marsh Posté le 06-03-2012 à 13:39:58    

Mon idée : créer dynamiquement un tag <script>.
 
En gros, le principe : tu as un petit bout de javascript qui va récupérer les paramètres qui t'intéressent dans l'url, et tu utilises ensuite cette info pour créer le tag <script> qui ira chercher ton confirm.php, en ajoutant les paramètres.
 
Comme je ne suis pas sûr d'être très clair :

Code :
  1. var pid = ... // tu récupères ton paramètre via window.location
  2. var s = document.createElement("script" )
  3. s.src = "js/confirm.php?pid=" + pid
  4. document.documentElement.appendChild(s)

Reply

Marsh Posté le 06-03-2012 à 17:42:41    

Code :
  1. <script type="text/javascript" src="js/confirm.php?pid="<?php echo $_GET['pid']?>"></script>


 
sophievm, tu vois la simplicité de ce morceau de code, donc oui tu es une débutante.


---------------
Blablaté par Harko
Reply

Marsh Posté le 06-03-2012 à 19:16:05    

@Riokmij Tu as compris ce que je veux faire, toi au moins ! Je vais tester ton code mais il y a de bonne chances pour que ça fonctionne :-)
 
@Gatsu35 T'as déjà essayé ce "bout de code" dans une page WP, juste comme ça pour qu'on rigole ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed