IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Javascript et PHP] IFrame ou pas


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut [Javascript et PHP] IFrame ou pas
    bonjour à tous, voila je viens du forum PHP et ils m'ont de passer par chez vous hi hi hi... trève de galigeades ...

    voila je voudrais interpréter du javascript avant de mettre les valeurs obtenues dans un fichier (ecriture en php)... on m'a dit que ce serait peut etre possible avec une IFrame.

    Lien de mon post [Forum PHP]

    Les problèmes posés sont :

    Citation Envoyé par Fladnag
    je l'ai jamais fait, mais je pense qu'on peux changer la source d'une iframe avec javascript, donc charger une page php dedans, donc générer (avec php) du code javascript dans l'iframe en question qui va aller donner son resultat a la frame parente.

    2 problemes techiques a résoudre donc :
    * Changer l'url dans une iframe en javascript (de taille 0)
    * Communiquer en javascript entre une iframe et sa page parente
    Merci de me donner un coup de pouce ..

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Salut,

    Je ne comprend pas l'interêt d'une telle manipulation..

    Pourquoi vouloir charger un JavaScript différent, en fonction d'un code PHP ? Ne peux-tu pas directement décider du code JavaScript à afficher sur la page en question, directement en PHP, avant d'afficher la page ?

    Sinon, tu peux changer la location d'un iframe, en faisant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <iframe id="maIframe"></iframe>
     
    <script language="JavaScript">
    document.getElementById('maIframe').src = 'http://www.google.fr';
    </script>
    Ensuite, pour récupérer un script qui serait sur cette page, ça va être plus sioux, le mieux serait de modifier un objet sur la page appellante à partir de la page chargée dans ton iframe, en rajoutant par exemple une fonction au prototype de cet objet.

    Mais avant de rentrer dans des détails techniques complexes, pourrions nous nous assurer que tu ne peux pas gérer cela en amont, directement en PHP ?

    A+

  3. #3
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    Alors voila, je pense que je n'ai peut être pas été assez clair ...

    Ce que je veux faire, c'est des statistiques des personnes qui visite mon site.
    certaines informations je peux les récupérer avec PHP et d'autre non, comme par exemple le system d'exploitation du client. Toutes ces informations je les enregistre dans un fichier "log.txt" et ceci en PHP. Je veux donc que cette récolte d'information reste transparente pour le client. Comme je l'ai dit dans le forum PHP, je pensais à un system de de fenetre invisible qui s'ouvre et qui se ferme (pour pouvoir interpréter le javascript). Mais il est vrai que les popups aujourd'hui sont pratiquement toujours bloquées. C'est pourquoi Fladnag me parlait d'IFrame, il est vrai que je n'ai toujours pas bien assimilé sa possible solution.

    Si vous avez d'autre idées, vous êtes les bienvenus

  4. #4
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Salut,

    Je comprend mieux ton problème Désolé je n'ai pas regardé le thread que tu mettais en lien, car je pensais avoir suffisament d'infos ici.

    L'Iframe est une bonne solution, mais je pense qu'il y a un moyen plus simple de faire cela : lors de la première visite de l'internaute sur ton site, il n'a pas de session.

    Tu testes donc ( en php ) si il a une session

    si il n'en a pas; inclure dans le head une fonction de recolte d'informations, qui viendra alimenter un formulaire invisible, en méthode POST. Puis, à la fin de cette fonction, faire un submit() de ce formulaire invisible, qui aura comme "target" l'Iframe. De plus, la page php en target, non seulement récupèrerait ces infos issuent de JavaScript, mais en plus les aggrémenterais d'infos PHP.

    si il a une session valide en court, ne pas inclure la fonction, ne le formulaire invisible, ni le iframe.

    Et voila, le tour est joué Qu'en penses-tu ? A+

  5. #5
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    C pas bête, je pense meme que c une bonne solution
    par contre qu'est ce que tu entends par :
    Tu testes donc (en php) si il a une session
    Je me fait nue variable PHP pour savoir si le client est passé ou pas c ça ...
    je pense que j'ai compris, je me penche dessus ce midi ...

  6. #6
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Oui, par exemple un $_SESSION['isInformationRetrieved']

    ( tu remarqueras ma tendance à faire dans l'anglo-saxon; c'est uniquement parce que je trouve que ça fait plus classe dans des programmes qui intègrent des "for" "while" et autre "if" )

    A+

  7. #7
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    Ca donnerais un truc comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <?php 
    session_start();
    ?>
    <script type="text/javascript">
    function js ....
     
    </script>
    <?php if (!isset($_SESSION['isInformationRetrieved'])){ ?>
    	<form method="post" action="script_stat.php" name="formStat" target="iframe_script">
    		<input id="id_platforme" type="hidden" name="platforme" value="javascript:document.write(getPlatform());" />
    		<input id="id_navigateur" type="hidden" name="navigateur" value="javascript:document.write(getNavigator());" />
    		<input id="id_plugins" type="hidden" name="plugins" value="javascript:document.write(getPlugins());" />
    	</form>
     
    	<iframe src="script_stat.php" name="iframe_script"/>
    <?php
            $_SESSION['isInformationRetrieved']="ok";
            }
    else
            {
            // déja traité on fait rien 
            }
    ?>
     le reste de ma page ...
     <?php if (!isset($_SESSION['isInformationRetrieved'])){ ?>
     	<script type="text/javascript">document.form.submit();</script>
     <?php } ?>
    je suis pas sur du submit a la fin...

  8. #8
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    Voila j'ai bien essayé de faire quelque chose mais rien ne veut fonctionner ... :s

    voila mon code dema page principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    <html>
    	<head>
    		<title>Liberty-sources</title>
    		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    		<link href="style.css" rel="stylesheet" type="text/css" />
    		<script type="text/javascript">
    		function getPlatform()
    			{
    			var OSName="Unknown OS";
    			if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
    			if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
    			if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
    			if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";
     
    			var pForme = document.formStat.getElementById['id_platforme'];
    			pForme.value = OSName;
    			}
     
    		function getPlugins()
    			{
    			var plug = new Array();
    			var plugTxt="";
    			if (navigator.plugins.length != 0)
    				{
    				plug[0]="";
    				var j=1;
    				var i=0;
     
    				do
    				{
    				if (navigator.plugins[i].name != plug[j-1])
    						{
    						plug[j]=navigator.plugins[i].name;
    						if (i!=0) j++;
    						}	
    				i++;
    				}
    				while (i < navigator.plugins.length);
     
    				for(var i=0; i < plug.length; i++)
    					{
    					if (i == (plug.length-1))
    						plugTxt+=plug[i];
    					else
    						plugTxt+=plug[i]+"\n\r";
    					}
    				}
    			var pIn = document.formStat.getElementById['id_plugins'];
    			pIn.value = "Plugins : "+i+" "+plugTxt;
    			}
     
    		function getNavigator()
    			{
    			var nav = document.formStat.getElementById['id_navigateur'];
    			nav.value = navigator.userAgent;
    			}	
     
    		function valide()
    			{
    			getPlatform();
    			getPlugins();
    			getNavigator();
    			alert ('toto');
    			document.formStat.submit();
    			}
    		</script>
    	</head>
    <?php 
    $onload="";
    if (!isset($_SESSION['isInformationRetrieved'])){ $onload="onload=\"javascript:valide();\""; $_SESSION['isInformationRetrieved']="ok";}?>
    <body<?php echo $onload; ?>>
    	<form method="post" action="script_stat.php" name="formStat" target="iframe_script">
    		<input id="id_platforme" type="hidden" name="platforme" value="toto">
    		<input id="id_navigateur" type="text" name="navigateur" value="">
    		<input id="id_plugins" type="hidden" name="plugins" value="">
    	</form>
    	<a href="javascript:valide();">lien</a>
    	<iframe name="iframe_script" width="50" height="50"></iframe><br />
     
     le reste de ma page ...
    et voila le code de ma page "script_stat.php" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?
    echo "Platforme : ".$_POST['platforme'];
     
    if (isset($_POST['platforme']))
    	{
    	$file = fopen("log.txt","a");
    	fputs($file,"super c marche Platform : ".$_POST['platforme']." \n\r");
    	fclose($file);
    	}
    else
    	{
    	$file = fopen("log.txt","a");
    	fputs($file,"Pas de variable formulaire \n\r");
    	fclose($file);
    	}
     
    ?>
    pour le moment c'est juste pour faire des tests mais ça fonctionne pas ... disont que j'ai réussi a écrire "Pas de variable formulaire" dans le fichier de log mais c'est tout.

    quelques petites choses ne vont pas et je ne sais pas pourquoi.

    - D'abord l'iframe s'affiche dans ma page alors que je veux qu'elle soit invisible.
    - ensuite je ne suis pas sur de moi pour la syntaxe :

    var pIn = document.formStat.getElementById['id_plugins'];
    ou
    var pIn = document.getElementById['id_plugins'];
    ou
    var pIn = document.getElementById('id_plugins');
    voila si je pouvais avoir un petit coup de pouce, merci bien :p

  9. #9
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    Voila mon nouveau code, avec ceci ça fonctionne, par contre il me reste quelques problèmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    .....
    <body>
    	<form method="post" action="script_stat.php" name="formStat" target="iframe_script" onSubmit="javascript:valide();">
    		<input id="id_platforme" type="hidden" name="platforme" value="toto">
    		<input id="id_navigateur" type="text" name="navigateur" value="">
    		<input id="id_plugins" type="hidden" name="plugins" value="">
    	</form>
    	<?php if (!isset($_SESSION['isInformationRetrieved'])){ ?>
    		<script>setTimeout('envoie()',2)</script>
    	<?php $_SESSION['isInformationRetrieved']="ok";} ?>
    	<iframe name="iframe_script" width="0" height="0"></iframe><br />
     
     le reste de ma page ...
    Je ne sais pas comment rendre l'iframe transparente.
    La syntaxe pour poster le formulaire me plait pas trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script>setTimeout('envoie()',2)</script>
    j'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript">envoie();</script>
    mais ça ne fonctionne pas.

    merci de m'éclairer ...

  10. #10
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    'soir

    Ca ne résoudra peut etre pas ton problème mais dans ta balise script il faut rajouter le langage...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" language="javascript">envoie();</script>
    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  11. #11
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    en effet ça ne résoud pas le problème j'avais vu ça et je l'ai changé mais rien ... c'est toujours pareil... je trouve ça un peu bizar qu'avec un timeout ça fonctionne et que sans non ... :s

  12. #12
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    ta méthode "envoie" n'est pas encore déclarée au momment de l'appel

  13. #13
    Membre éclairé Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Par défaut
    ah bah si puisqu'elle est dans mon head au dessus du body

  14. #14
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Et bien alors c'est qu'un objet ou une fonction dont ta fonction a besoin n'existe pas enocre.... Cela peut être aussi bien du HTML que je JavaScript...

    Que contient ta fonction ? Peux-tu donner le HTML généré (source dans le navigateur) ?

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/04/2010, 19h35
  2. [svg+xhtml+javascript+dom+php] L'élément dom créé n'existe pas
    Par Lcf.vs dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/01/2010, 15h08
  3. Javascript dans un echo PHP de fonctionne pas
    Par Ed la poignee dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2009, 16h31
  4. [AJAX] code en javascript et php qui fonctionne sous FF et pas sous IE
    Par witch dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/01/2008, 12h13
  5. [PHP-JS] Marche pas avec le Javascript?
    Par MinsK dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2006, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo