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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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()

+ 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