11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour

J’ai du code Javascript qui fonctionne, très bien, dans une page Php et qui contient / utilise la variable ctrligne.

J’ai besoin, plus loin dans mon Php, de la valeur de cette variable ctrligne.

En reprenant ce que j’ai trouvé de mieux dans les forums, j’ajoute ce code :

<?php
if (isset($_GET['ctrligne']) == false)
	{
	echo "<script type=\"text/javascript\">\n";
	echo "  location.href=\"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}"."&ctrligne=\" + ctrligne;\n";
	echo "</script>\n";
	exit();
	}
?>

Ce code fonctionne, je l’ai testé séparément.

Cet ajout, après ma fonction JS, en supprime les effets, ce qui est évidemment le problème.

En gros, les deux codes fonctionnent très bien mais, mis ensemble, ça ne fonctionne plus.

Au besoin, le code généré donne :
<script type="text/javascript">
location.href="/autre/personnebureautique.php?repertoire=martinot&espace=esp1&ctrligne=" + ctrligne;
</script>

Merci par avance de votre aide.

Francois
Prudence Hortense... sachant que TOUS les internautes réels ou virtuels (machines) visitant tes pages auront accès à ce que renvoie PHP, mais qu'UNE INFIME minorité n'aura pas accès à la var JS demande-toi ce qu'il adviendra de ces visiteurs (et à quel genre de bug/erreur/prob ils seront confrontés) avant de te lancer là-dedans.
Salut Francoisch,

Je comprend pas des masse ta question.. Déjà dans
a écrit :
J’ai besoin, plus loin dans mon Php, de la valeur de cette variable ctrligne.
je dit non Smiley lol . Comme tu l'as mentionner, PHP va générer du code (html et javascript), qui sera interprété après par ton browser web.. donc ton browser ne voit jamais le php.. Ce point étant plus claire, si quelque part dans ton code tu fais un :

<script type="text/javascript">
   function toto() {
       ctrligne = <?php echo('ma valeur'); ?>;
   }
</script>


Ta variable ctrlinge contiendra la valeur fournie par php.. le problème va être que ta variable ctrligne ne sera connue que de la function toto() (problème de context de variable).

Par contre si tu as un bout de code genre :


<script type="text/javascript">
   function toto() {
       return <?php echo('ma valeur'); ?>;
   }

var ctrligne = toto();
</script>


Là tu as des chances de pouvoir réutiliser ta variable dans un javascript plus loin.. mais pas dans un php plus loin, car il n'y a tout simplement pas de php plus loin Smiley cligne

edit :

Après si tout souhaite envoyer une variable javascriupt à une page php, ta méthode d'utiliser le location.href sur la page php est juste.. mais sa me semble bizarre comme fonctionnement... surtout si le visiteur désactive le javascript (je sais personne le fait, mais certain navigateur pour handicapé ne tienne pas compte du javascript
Smiley rolleyes )
Modifié par Mikerob (10 Feb 2009 - 20:03)
Tes remarques sont tout à fait fondées, le Php est interprété avant le JS.

Simplement, à force de reherches dans des forums, j'ai trouvé ce code que je ne saurai expliquer.

Je l'ai testé seul et il marche:

<?php
if (isset($_GET['ctrligne']) == false)
	{
	// passage des variables de dimensions
	// (préservation de la requête d'origine
	//   -- les variables par méthode POST doivent être traitées différemment)

	echo "<script type=\"text/javascript\">\n";
	echo "  location.href=\"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}"
            . "&ctrligne=\" + 3;\n";
	echo "</script>\n";
	exit();
	}
echo "ctrligne: ".$_GET['ctrligne']."<br>";	
?>

Essaie le au besoin.

Mais je n'arrive pas à le faire fonctionner avec mon code principal.

Francois
S'il ny a que ça, je peux t'expliquer ce bout de code.

if (isset($_GET['ctrligne']) == false)


Au chargement de la page ce code test si la variable ctrligne n'a pas été envoyée dans l'url (de cette manière : http://www.monsite.com?ctrligne=10)

Donc quand tu appel t'as page www.monsite.com, on rentre bien dans le if, vu que ctrligne n'existe pas.

Le code javascript à l'intérieur permet d'effectuer une redirection (loction.href), et la partie php permet de récupérer l'URL courante.
La partie
&ctrligne=\" + 3;\n";
permet donc d'envoyer le parametre ctrligne=3 dans l'URL...

Donc en gros tu vas charger 2x ta page pour pouvoir transmettre en javascript la valeur de ctrligne dans l'url..

Enfin bon, si "après" tu as à nouveau besoin en php de cette valeur, tu la trouvera dans $_GET['ctrligne']. Sinon si tu en a besoin en javascript tu peux modifier le code que tu as déjà de la manière suivante :


if (isset($_GET['ctrligne']) == false) {
   echo "<script type=\"text/javascript\">\n";
   echo "  location.href=\"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}". "&ctrligne=\" + 3;\n";
   echo "</script>\n";
   exit();
} else {
   echo "<script type=\"text/javascript\">var ctrligne=" + $_GET['ctrligne'] + "</script>\n";
}
echo "ctrligne: ".$_GET['ctrligne']."<br>";	

?>

<script text=*test/javascript">
   alert('ctrligne = ' + ctrligne);
</script>

Modifié par Mikerob (10 Feb 2009 - 22:28)
Merci de tes explications.

Je réfléchirai là-dessus demain car, ce soir, j'ai la tête comme une coucourde.

Je me demandais quand même si mon problème ne venait pas de l'URL de ma page qui comporte déjà deux paramètres issus de l'appel à cette page:
location.href="/autre/personnebureautique.php?repertoire=martinot&espace=esp1&ctrligne=" + ctrligne;

Le paramètre ctrligne s'ajoute derrière ces deux là avec sa valeur; est ce un problème?

Devrais je retailler l'Url pour faire disparaître les deux premiers paramètres et ne laisser que ctrligne?

Francois
Non, tu n'as pas besoin de retravailler l'URL.

La valeur ?${_SERVER['QUERY_STRING']} permet de tenir compte des paramêtres existant, donc tout se passera normalement. $_GET['ctrligne'] est capable de récupérer la valeur de ctrligne, peut importe sa position dans l'URL. D'ailleurs si tu fais un echo ( $_GET['repertoire']); , tu auras la valeur martinot (dans le cas de ton exemple d'url Smiley cligne ).
Modifié par Mikerob (10 Feb 2009 - 22:43)
OK, je vais me remettre au travail et essayer de trouver où est mon problème maintenant que je suis sûr de la bonne technique de la solution.

Merci et à bientôt.

Francois
Le fait de modifier location.href déclenche le rechargement de la page. Tel que tu l'as indiqué, le code rechargera immédiatement la page.