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

jQuery Discussion :

Transmettre Tableau de PHP a Javascript


Sujet :

jQuery

  1. #1
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut Transmettre Tableau de PHP a Javascript
    Bonjour à tous.
    Voilà mon problème:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $connection = call_bdd();
    $reponse = $connection->prepare('SELECT '.$prefix_option."_".$sufix_option.' FROM table_'.$sufix_option.' WHERE ID_'.$sufix_option.' = "'.$_SESSION['ID_compte'].'"');
    $reponse->execute();
     
    $cle=0;	
    echo "<script type='text/javascript'>";	
    while ($array_select = $reponse->fetch())
    {
     	echo 'alert('.$array_select[$cle].');';	
     	$cle++;	
    }
    echo "</script>";
     
    $reponse->closeCursor();

    Pourquoi le premier alert() affiche la valeur qu'il est censé afficher, alors que les suivent affichent undefined?
    Et comment faire du coup pour afficher toutes mes données?
    Merci du coup de main.

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Code php : 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
    <?php 
    $connection = call_bdd();
    $reponse = $connection->prepare('SELECT '.$prefix_option."_".$sufix_option.' FROM table_'.$sufix_option.' WHERE ID_'.$sufix_option.' = "'.$_SESSION['ID_compte'].'"');
    $reponse->execute();
     
    $cle=0;	
    $result = array();
    while ($array_select = $reponse->fetch())
    {
     	array_push ($result, $array_select[$cle]);	
     	$cle++;	
    }
     
    $reponse->closeCursor();?><script type="text/javascript">
      scriptData = <?php echo json_encode($result ); ?>;
    </script>
    echo "</script>";
    dans le javascript statique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (var i in scriptData){
      alert(var);
    }
    ce que je ne comprends pas c'est pourquoi tu lit la colonne 0 du premier enregistrement
    la colonne 1 du deuxième
    la colonne 2 du troisième
    etc.
    A+JYT

  3. #3
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    En fait voila ce qu'il y a derrière le code que j'ai donné:
    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 F_planete()
    {
     
      	$.post("php.php", { function_post: "select_bdd", prefix_post: "nom", sufix_post: "prenom"}, 
    	function(data)
    	{ 
    		$(".ajout_js").html(data);
    	  	$("#prenom_1").attr("value", js_tableau[0]);
    	  	$("#prenom_2").attr("value", js_tableau[1]);
    	  	$("#prenom_3").attr("value", js_tableau[2]);
    	  	$("#prenom_4").attr("value", js_tableau[3]);
    	  	$("#prenom_5").attr("value", js_tableau[4]);
     
    	}); 	
    }
    Dans php.php il y a ça:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(isset($_POST["function_post"]) AND $_POST["function_post"] == "select_bdd")
    {
    	select_bdd($_POST["prefix_post"], $_POST["sufix_post"]);
    }

    Mon code ce trouve dans la fonction select_bdd().
    Pour tester mon code, je préfère utiliser un alert() qui sera greffer dans le HTML avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(".ajout_js").html(data);
    En faite la finalité c'est de faire un truc du genre:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     while ($array_select = $reponse->fetch())
    {
     	$php_tableau = $array_select[$prefix_option."_".$sufix_option];
     	echo 'js_tableau['.$cle.'] = '.$php_tableau.';';	
     	$cle++;	
    }

    Ce qui évidement ne marche pas.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'SELECT '.$prefix_option."_".$sufix_option.' ....
    Ici, seul le champ '.$prefix_option."_".$sufix_option.' est demandé dans la requête.
    De fait, seul $array_select[0] a une valeur.

    Au lieu de faire des énigmes à tiroirs, explique-nous clairement ta démarche, et le résultat que tu souhaites obtenir.

    A priori, je dirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <script type="text/javascript">	
    <?php
    $connection = call_bdd();
    $reponse = $connection->prepare('SELECT '.$prefix_option."_".$sufix_option.' FROM table_'.$sufix_option.' WHERE ID_'.$sufix_option.' = "'.$_SESSION['ID_compte'].'"');
    $reponse->execute();
    echo 'var js_tableau = new array('.$reponse->rowCount().');';
    $cle=0;
    while ($array_select = $reponse->fetch())
    {
     	echo 'js_tableau['.$cle.'] = \''.$array_select[0].'\';';	// ne pas oublier d'encadrer la valeur avec des \'
     	$cle++;
    }
    ?>
    </script>
    Dernière modification par Invité ; 03/09/2013 à 09h35.

  5. #5
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Code php : 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
    <?php 
    $connection = call_bdd();
    $reponse = $connection->prepare('SELECT '.$prefix_option."_".$sufix_option.' FROM table_'.$sufix_option.' WHERE ID_'.$sufix_option.' = "'.$_SESSION['ID_compte'].'"');
    $reponse->execute();
     
    //$cle=0;	ne ser à rien on prend toujour la colonne 0 pour tous les enregistrement vu que la requête ne retourne qu'une seule clonne
    $result = array();
    while ($array_select = $reponse->fetch())
    {
     	array_push ($result, $array_select[0]);//$array_select[$cle] il n'y a qu'une colonne
     	//$cle++;	
    }
     
    $reponse->closeCursor();?><script type="text/javascript">
      scriptData = <?php echo json_encode($result ); ?>;
    </script>
    echo "</script>";

  6. #6
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,
    ...
    Code php : 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
     
    <?php
    $connection = call_bdd();
    $reponse = $connection->prepare('SELECT '.$prefix_option."_".$sufix_option.' FROM table_'.$sufix_option.' WHERE ID_'.$sufix_option.' = "'.$_SESSION['ID_compte'].'"');
    $reponse->execute();
    //ça ne sert à rien il suffit de généré le tableau en php
    //echo 'var js_tableau = new array('.$reponse->rowCount().');';
    $php_array = new array();
    //on n'a aucun indice à gérer avec un push
    //$cle=0;
    while ($array_select = $reponse->fetch())
    {
     	//pourquoi se compliquer la vie avec des \' alors qu'une simple affectation à un tableau suffit ?
     	//echo 'js_tableau['.$cle.'] = \''.$array_select[0].'\';';	// ne pas oublier d'encadrer la valeur avec des \'
            array_push ($php_array , $array_select[0]);
     	//$cle++;
    }
    // on a le tableau en php il suffit 'en faire un tableau js sans ' \' " ou quoi que se soit.
    // de plus on as séparé le travail php de l'affichage dans la page
    // avant cette ligne aucun écho n'a été nécessaire. tout la génération se résume à une ligne.
    ?><script type="text/javascript">
     var js_tableau = <?php echo json_encode($php_array); ?>;
    </script>
    le tableau javascript est créé par le moteur js en une seule passe et non par ajouts d'élément.

    pour faire simple ton javascript produit est du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var js_tableau = new array(5);
    js_tableau[0] = '45';
    js_tableau[1] = '12';
    js_tableau[2] = 'test';
    js_tableau[3] = 'toto';
    js_tableau[4] = 'true';
    alors qu'en passant par passant par un tableau php on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var js_tableau = [45, 12, "tetst", "toto", true];
    non seulement le code php est plus simple mais le js généré l'est aussi et en plus il respecte les type de données php
    ainsi dans mon exemple 45 et 12 reste des entier test et toto des string et true un booleen.

    A+JYT

  7. #7
    Invité
    Invité(e)
    Par défaut
    @sekaijin
    Oui, j'ai lu (et compris) ton code.
    Il est en effet plus optimisé (et moins de lignes écrites dans le code source final)

    J'apprends tous les jours ! Et je retiens ta méthode.
    C'est aussi un des intérêts de DVP.

    N.B. Je ne suis pas assez familier de json_encode()

  8. #8
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    json_encode est la fonction à connaitre dès qu'on veut passer quelque chose de php à js

    un tableau comme dans cette discussion

    une hashMap php (tableau associatif) donnera un objet JS
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var obj = <? echo json_encode(array(
        "foo" => "bar",
        "bar" => "foo",
    ));?>;
    va donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var obj = {"foo":"bar", "bar":"foo"};
    pour un objet php pareil
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    class Test
    {
        public $foo = "bar"; 
        public $bar = "foo"; 
    }?>var obj = <? echo json_encode(new Test());?>;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var obj = {"__className": "Test", "foo":"bar", "bar":"foo"};
    avec à on peut quasiment tout faire.
    personnellement je ne définis qu'une seule variable JS qui est un objet contenant tout ce que mon php doit transmettre.

    en php je fait un tableau associatif chaque membre contient un élément de la réponse
    je transmet ainsi des booléen des number des string des array et des objet.

    javascript n'a plus qu'à choisir le membre à utiliser.
    (j'y mets même les message d'erreur en débug)

    A+JYT

  9. #9
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    Je viens de tester vos codes, merci pour le coup de pouce mais je n'arrive pas a les faire fonctionner.
    Sekaijin, je ne peut pas encoder comme tu me l'as conseillée parce que je ne recharge "jamais" ma page... Il me faut intégrer le code avec du javascript et du coup je ne sais pas ou mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    json_encode($php_array)
    Il faudrait que je le présente un peut comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "<script type='text/javascript'>";
    echo "var js_tableau = ".json_encode($php_array);
    echo "</script>";
    Pour le rappel, le code est injecter avec "voir plus haut":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(".ajout_js").html(data);
    Merci.

  10. #10
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    si c'est un appel dynamique pourquoi ne pas utiliser ajax ?

  11. #11
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    Tout simplement parce que je n'y connais rien.
    Il me semblais en faire un substitue équivalent, mais d'après toi je me trompe?
    Si c'est le cas je le serai bientôt parce que je vais me renseigner là-dessus mais en attendant je voudrai faire marcher ce code. (Si c'est possible) Et je le simplifierai plus tard.
    Temps que je ne comprend pas je ressent une frustration.

    Merci en tout cas pour l'info.

  12. #12
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    j'ai vu que tu utilise JQuery
    Il y a bien longtemps que j'ai abandonné cette librairie
    Je ne maitrise plus très bien la syntaxe
    mais le principe est le suivant
    tu définie une fonction que tu associé à ton appel Ajax
    tu exécute ton appel (en mode POST ou GET au choix)
    et lorsque la réponse arrive ta fonction est exécuté
    elle reçois comme paramètre les données reçues.
    un exemple trouvé dans le forum
    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
    jQuery(document).ready(function() {    
                $.ajax({
                        type: "POST",
                        url : "traitement.php",
                        dataType: 'json',
                        success:function(data){
                            //ici data est une hashmap
                            $.each(data, function(key, value){
                            alert(key+"--"+value);
                            });
                        },
                        error: function(jqXHR, textStatus, errorThrown){
                        	alert(textStatus);
                        	alert(errorThrown);
                        }
                });
            });
    pour que cela fonctionne il suffit que ton serveur fasse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <? header('Content-type: application/json');
     echo json_encode($resulat);?>
    $resultat est un tableau ou un objet php contenant les données.
    A+JYT
    PS: te te conseille de poster te question JQuery sur le forum JQuery

  13. #13
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    Je me suis tres mal exprimé. Le sujet s'appel Transmettre Tableau de PHP a Javascript mais je commence en parlent d'un alert().

    -alert() n'est qu'un test, on s'en fiche.
    -Le vrai objectif et de passer la valeur de $php_tableau à js_tableau.
    -J'ai fait des test, JQuery et SQL marchent parfaitement.

    Je peut même avec ce code, récupérer la valeur d'une variable PHP en Javascript pour l'injecter par exemple dans la valeur d'un input.
    Ce qui me pose problème c'est passer la valeur de $php_tableau à js_tableau avec les contraintes que que j'ai donné, c'est a dire, écrire le Javascript uniquement dans un echo.

    Pour le coup, Ajax c'est peut-être bien si le principe est de communiquer directement de Javascript a SQL, sinon je ne vois pas en quoi cela règle mon problème.

  14. #14
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    C'est bon, j'ai trouver:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    echo "<script type='text/javascript'>";
    echo 'js_tableau = new Array();';
    foreach($reponse as $cle=>$array_select)
    {
         echo 'js_tableau['.$cle.'] = "'.$array_select[0].'";';
    }
    echo "</script>";

    Merci du coup de main. Ca m'a mis sur la voie.

  15. #15

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tableau entre PHP et JavaScript
    Par kaninama dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/05/2008, 10h32
  2. Réponses: 5
    Dernier message: 02/08/2006, 17h05
  3. [PHP-JS] Transferer tableau php a javascript
    Par stephane92400 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 12/07/2006, 14h05
  4. Réponses: 8
    Dernier message: 30/04/2006, 15h42
  5. Recuperer un tableau php dans javascript
    Par 17mounir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/08/2005, 09h07

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