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 :

Affecter la valeur du retour d'une fonction javascript à une variable php


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Affecter la valeur du retour d'une fonction javascript à une variable php
    Bonjour,
    J'ai un code html affecté à la variable $html et je veux l'envoyer par un formulaire depuis page1.php à page2.php
    Avant, Je confrontais le souci d'envoyer un code html via un formulaire.
    j'ai posté hier mon problème dans le forum et j'ai eu la bonne solution. ici

    Le problème qui se pose maintenant est qu'en fait :
    <div id="partie1"> , <div id="partie2"> et <div id="partie3"> se sont des div dont le contenu est variable grâce à des fonctions Javascript-Ajax.

    Ainsi la variable $html envoyé via le formulaire n'est pas aussi dynamique , mais elle garde le contenu affecté dès la 1ère fois, et tout changement effectué sur les div ultérieurement par ajax n'est pas appliqué sur $html.

    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
     
     
    <?php
    // [...]
     
    $html = '<h2>I) Titre1 : </h2>
            <div id="partie1">C\'est la 1ère partie.</div>
            <h2>II) Titre2 : </h2>
            <div id="partie2">C\'est la 2ème partie.</div>
            <h2>III) Titre3 : </h2>
            <div id="partie3">C\'est la 3ème partie.</div>';
     
    ?>
    	<form method="post"  accept="text/html"  action="page2.php" >
    	<input type="hidden" name="code" value="<?php echo htmlspecialchars($html); ?>" />
    	<input type="submit" value="Afficher" />	
    	</form>
    <?php
    // [...]
    ?>
    J'ai eu l'idée de créer une fonction javascript comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function actualiseHTML()
    {
     
    	return document.getElementById("contenu").innerHTML;
     
    }
    Quant au code sur page1.php :

    ( J'y essaie d'appeler une fonction Javascript qui prend le contenu de la div "contenu" , j'espère que ma fonction javascript est correcte, puis lors du submit du formulaire j'appelle la fonction javascript et j'essaie d'affecter la valeur de retour à $html , puis j'envoie htmlspecialchars($html) comme valeur à l'id 'code' )

    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
     
    <div id="contenu">
    <?php
    // [...]
     
    $html = '<h2>I) Titre1 : </h2>
            <div id="partie1">C\'est la 1ère partie.</div>
            <h2>II) Titre2 : </h2>
            <div id="partie2">C\'est la 2ème partie.</div>
            <h2>III) Titre3 : </h2>
            <div id="partie3">C\'est la 3ème partie.</div>';
     
    ?>
     
    </div>
     
    	<form method="post"  accept="text/html"  action="page2.php" 
    onsubmit="
    	<?php 
                    $html='<script type="text/javascript"> actualiseHTML(); </script>' ;
            ?>
     
    >
    	<input type="hidden" name="code" value="<?php echo htmlspecialchars($html); ?>" />
    	<input type="submit" value="Afficher" />	
    	</form>
    Apparemment, mon code est faux au niveau de l'affectation de la valeur du retour de la fonction javascript dans une variable php.

    Aussi, eventuellement une autre erreur que la valeur de $html soit affectée à 'code' avant l'appel de actualiseHTML();

    Si vous avez une autre idée ou une correction à mon idée, j'en serai tellement reconnaissante!

    Je vous remercie d'avance pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon. A mon avis, c'est plus un problème de conception et de logique.
    - PHP est du coté serveur (donc avant affichage),
    - alors que javascript est du coté client (donc après affichage)

    sur le PRINCIPE (à tester, of course !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <div id="contenu">
    	<h2>I) Titre1 : </h2>
    	<div id="partie1">C'est la 1ère partie.</div>
    	<h2>II) Titre2 : </h2>
    	<div id="partie2">C'est la 2ème partie.</div>
    	<h2>III) Titre3 : </h2>
    	<div id="partie3">C'est la 3ème partie.</div>
    </div>
    Et en javascript :
    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
    function mettre_contenu_div_dans_input(){
    	document.getElementById("code").value = document.getElementById("contenu");
    }
    // initialisation
    window.onload=function(){
    	mettre_contenu_div_dans_input();
    }
    // dans les fonction de modification de #partie1, #partie2 ou #partie3
    function modifier_partiex(....)
    	[.......]
    	// actualisation du contenu
    	document.getElementById("divinvisible").innerHTML = nouveau_contenu_apres lodification;
    	// remplacement de la valeur de l'input
    	mettre_contenu_div_dans_input();
    }
    Dernière modification par Invité ; 06/05/2012 à 07h15.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Je pense que je me suis mal exprimée..
    Bon, plus explicitement, lors du click sur le submit du formulaire, je dois transmettre le contenu d'une div ( son code html ) à une autre page.

    J'ai essayé :

    <input type="hidden" name="code" value="<?php echo htmlspecialchars($html); ?>" />

    après avoir affecté le contenu de la div 'contenu' à $html ( voir dans mon code ).

    J'ai bien réussi que les trois parties ( les divs existant dans 'contenu' ) soient dynamique via des fonctions ajax... mais $html ne varie pas avec eux, après la 1ère affectation. et donc c'est le code html lors de l'affichage de page1.php qui se renvoie à page2.php via le formulaire.

    Donc, comment envoyer le contenu d'une div à une autre page via le formulaire et le récupérer par $_POST ?

    Merci encore

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par walking Voir le message
    après avoir affecté le contenu de la div 'contenu' à $html ( voir dans mon code ).
    [...]
    mais $html ne varie pas avec eux, après la 1ère affectation.
    C'est toi qui comprends mal : tu ne peux pas faire ça en javascript ! (car le PHP est coté serveur et le javascript coté client !)

    DONC :
    1/ la div "#contenu" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <div id="contenu">
    	<h2>I) Titre1 : </h2>
    	<div id="partie1">C'est la 1ère partie.</div>
    	<h2>II) Titre2 : </h2>
    	<div id="partie2">C'est la 2ème partie.</div>
    	<h2>III) Titre3 : </h2>
    	<div id="partie3">C'est la 3ème partie.</div>
    </div>
    2/ la 1ère affectation :
    - SOIT OPTION 1 : (comme tu fais déjà) tu mets le contenu de "#contenu" dans une variable $html,
    Et (avec l'OPTION 1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" id="idcode" name="code" value="<?php echo htmlspecialchars($html); ?>" />
    - SOIT OPTION 2 : directement en javascript avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    window.onload=function {
    document.getElementById("idcode").value = document.getElementById("contenu").innerHTML;
    }
    et (avec l'OPTION 2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" id="idcode" name="code" value="" />
    3/ Traitement javascript/ajax pour modifier dynamiquement les contenus de "#partie1", "#partie2", "#partie3"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [... ton code de traitement javascript/ajax ...]
    4/Il faut alors affecter la valeur de l'input directement en javascript :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    	document.getElementById("idcode").value = document.getElementById("contenu").innerHTML;
    Par contre, htmlspecialchars() n'existe pas en javascript.
    Il faut éventuellemnt créer une fonction javascript (trouvée ici):
    function js_htmlspecialchars(str) {
    if (typeof(str) == "string") {
    str = str.replace(/&/g, "&amp;"); /* must do &amp; first */
    str = str.replace(/"/g, "&quot;");
    str = str.replace(/'/g, "'");
    str = str.replace(/</g, "&lt;");
    str = str.replace(/>/g, "&gt;");
    }
    return str;
    }
    et donc :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    	document.getElementById("idcode").value = js_htmlspecialchars( document.getElementById("contenu").innerHTML );
    Dernière modification par Invité ; 06/05/2012 à 07h34.

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Récupérer la valeur d'une listbox dans une fonction javascript
    Par skyangel20 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/10/2007, 10h51
  3. Réponses: 3
    Dernier message: 16/01/2006, 16h02
  4. Réponses: 11
    Dernier message: 10/05/2004, 10h49
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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