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

PHP & Base de données Discussion :

Comment stocker les résultats d'un enregistrement dans des variables? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut Comment stocker les résultats d'un enregistrement dans des variables?
    Bonsoir mes amis,

    Pourriez-vous s'il vous plaît m'aider à voir clair dans ce code ?

    Les données provenant de la table ne vont pas s'afficher au même endroit. Il y a un endroit spécifique pour chaque donnée. Exemple si total d'enrégistrement est 4, alors il existe $variable1, $variable2, $variable3, $variable4. le premier enrégistrement sera stocké dans la $variable1 le deuxième enrégistrement dans $variable2 ainsi de suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $requete = "SELECT * FROM batiments ORDER BY ID ASC"
    $req = mysql_query($requete);
    $total =  mysql_num_rows($req);
    while ($myRow = mysql_fetch_assoc($req))
    {
    //Je coince là
    }
    D'avance je vous remercie beaucoup pour votre gentillesse

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut utiliser un tableau et non des variables avec un numéro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $requete = "SELECT * FROM batiments ORDER BY ID ASC"
    $req = mysql_query($requete);
    while ($myRow = mysql_fetch_assoc($req))
    {
    $variable[] = $myRow['ton_champ'];
    }

  3. #3
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Wawoo, merci beaucoup
    Si j'ai bien compris, pour récupérer la variable1 donc premier enrégistrement, je dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div id="batiment1">$variable[0]</div>
    encore merci

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Plus exactement comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="batiment1"><?php echo $variable[0]['ton_champ']; ?></div>
    Mais vu qu'il y aura plusieurs lignes, le faire via une boucle est plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    foreach ($variable as $donnee) {
    ?
    <div id="batiment1"><?php echo $donnee['ton_champ']; ?></div>
    <?php
    }
    ?>

  5. #5
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Merci beaucoup pour ta réponse qui m'a bcp aidé.
    Quant à ton deuxième exemple, il ne pourra malheureusement pas être adapté à ce que je souhaite faire, comme expliqué plus haut. J'ai besoin des variables1, 2, etc car je dois pouvoir les utiliser après séparément. Donc pas de boucles possibles. Mais pas de souci : il n'y aura pas plus de 10 bâtiments.

    Encore merci

  6. #6
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Bonjour, je reviens vers pour ce même code. J'ai fait une petite fonction qui me donne cette erreur :
    Fatal error: Cannot use [] for reading in C:\wamp\www\monsite\public\fonctions\php\site.php on line 547
    voici ma fonction :
    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
    function batiments($app_ref, $app_lang)
    {
    if($app_ref != 0){
    $req = "SELECT * FROM batiments WHERE ref='$app_ref' AND lang='$app_lang' ORDER BY position ASC";
    $sql = mysql_query($req) or die(mysql_error());
    while($myRow = mysql_fetch_assoc($sql))
    {
    $app_tableau[] = $myRow['contenu'];
    }
    }//fin de if
     
    else
    {
    $app_tableau[] = '';
    }
    return $app_tableau[];
    }//fin de la fonction
    Voici l'utilisation dans la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    batiments('567', 'fr');
     
    <div id="leftcolumn-bottom"><?php echo $app_tableau[0]['contenu']; ?></div>
    D'avance je vous remercie beaucoup

  7. #7
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Points : 148
    Points
    148
    Par défaut
    Fatal error: Cannot use [] for reading in C:\wamp\www\monsite\public\fonctions\php\site.php on line 547
    Quelle est la ligne 547 ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    suprime [] du return et essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $app_tableau;

  9. #9
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Merci pour ta réponse. Ce que tu me proposes m'enlèves l'erreur mais ne m'affiche aucune réponse. Il y a pourtant des infos qu'elle doit afficher.
    Je pense qu'il y a quelque chose à fare avec le tableau mais quoi?

    d'avance merci pour vos suggestions.

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Il me semble t'avoir donné la solution.
    Ta fonction retourne un tableau $app_tableau (s'il n'y a pas d'erreur), et pour accéder aux éléments soit tu utilise directement les indices, soit en faisant une boucle (genre foreach).

    Mais il y a au moins 2 autres trucs indispensable à connaitre (hormis le echo), c'est var_dump() et print_r().
    Donc quand tu ne sait pas trop, et soit :
    echo $une_variable
    Si c'est un tableau : print_r($un_tableau)
    Ou alors, et là ça fonctionne quelque soit le type (variable, tableau, objet) : var_dump($app_tableau)

    Avec ça tu as moyen de vérifier ce que ça contient, et par conséquent comment l'exploiter.

    Si un var_dump() ne renvoie rien, alors c'est qu'il y a une erreur en amont, du coup faut l'appliquer sur un autre élément pour voir, et comprendre ce qui ne va pas.
    Bref ... du débuggage.

    Tu sais tout maintenant.

  11. #11
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Merci de m'avoir éclairé
    J'ai testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($app_tableau);
    Et ça me retourne NULL.
    Je ne suis pas très avancé. Tu as une idée?

  12. #12
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Bon je suis un peu avancé.
    J'ai enlevé la fonction et ai écrit directement le code dans la page comme ceci :
    et là, ça marche donc ma fonction avait un problème.
    Donc dans mon code, lorsque je fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($app_tableau);
    J'ai les deux enrégistrement qui s'affichent, mais avec l'information suivante :
    array(2) { [0]=> string(391) "
    Mais quand je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $app_tableau[0]['contenu']
    Au lieu que cela m'affiche le premier enrégistrement, ça m'affiche ceci : D'avance je vous remercie pour votre aide

  13. #13
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Lorsque tu as fais le var_dump() et constaté qu'il était vide, il ne fallait pas "casser" ton code, la fonction, mais prospecter dans cette fonction, sinon tu change trop la situation.
    Faut y aller mollo dans le débuggage.

    Donc comme c'est ta fonction qui s'occupe à récupérer les données, on voit qu'il y a une boucle (un while) et c'est le (futur) tableau $app_tableau qui va les stocker à chaque tour de boucle.
    Donc il aurait fallut faire un var_dump($app_tableau) juste après la boucle.
    Et là tu aurais visualisé un problème.

    Normalement on devrait constater ceci : $app_tableau[] = $myRow['contenu'];
    Ceci n'est pas correcte car ce n'est QUE le champ "contenu" qui sera stocké et non pas tous les champs.
    Faut voir quand même si c'est réellement ce que tu souhaite obtenir.

    Faudrait peut être faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $app_tableau[] = $myRow;
    Donc fait essai comme ceci dans ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while($myRow = mysql_fetch_assoc($sql)) {
        $app_tableau[] = $myRow['contenu'];
    }
    // On vérifie (provisoirement) ce qu'il contient
    var_dump($app_tableau);
    // Un print_r() peut être suffisant aussi pour vérifier :
    print_r($app_tableau);

  14. #14
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Merci pour ta réponse.
    Il y a que le champ contenu que je cherche à récupérer.
    J'ai fait le var_dump($app_tableau) après le while.
    Voici le résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    array(1) { [0]=> string(391) "Mon texte 1"}
    array(2) { [0]=> string(391) "Mon texte 1"}
    effectivement j'ai 2 enrégistrements. Mon texte 1, Mon texte 2
    Là je suis coincé.

  15. #15
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    effectivement j'ai 2 enrégistrements. Mon texte 1, Mon texte 2
    Là je suis coincé.
    Et pourquoi donc ?

    Est-ce le fait qu'il y en a 2, alors que tu t'attends à en avoir qu'1, ou 3, voir plus ?
    Est-ce que le comment accéder aux 2 éléments, ou à l'un des 2 ?
    Ou autre ?

    Faut expliquer qu'est ce qui te bloque.


    Aussi, si le but est d'obtenir le contenu d'un seul champ, il faudrait éviter de faire un SELECT * (pour tous les champs) mais préciser juste celui concerné :
    SELECT contenu FROM ... etc ...
    De même que si les données attendues ne sont pas bonnes, c'est peut être la requête qui ne va pas. Faut voir.

  16. #16
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Merci
    Non j'ai que deux enrégistrements.
    Cependant :
    1. La valeur retournée par la fonction après le test suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($app_tableau);
    donne NULL .
    Or le test fait directement dans la fonction avant le return, donne les deux enrégitrements. Donc comme je le disais déjà, il y a quelque chose qui cloche dans la façon de retourner le tableau.
    2. Ce que je cherche à faire $app_tableau[0]['contenu']; mais quelque soit ce que je fais me donne toujours NULL.
    Ce n'est pas au niveau de la base de données. Je pense que c'est l'exploitation du tableau qui me pose de problème.

    D'avance merci

  17. #17
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Avait tu corrigé le code de ta fonction sur ce point, comme on te l'a suggéré ?

    Je le remet au cas où (avec quelques correctifs) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function batiments($app_ref, $app_lang) {
        $app_tableau = array();
        if ($app_ref != 0) {
            $req = "SELECT contenu FROM batiments WHERE ref='$app_ref' AND lang='$app_lang' ORDER BY position ASC";
            $sql = mysql_query($req) or die(mysql_error());
            while($myRow = mysql_fetch_assoc($sql)) {
                $app_tableau[] = $myRow['contenu'];
            }
        }//fin de if
        //
        return $app_tableau;
    }//fin de la fonction

  18. #18
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Oui très cher ami, j'ai fait exactement ceci :
    Voici la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE `batiments` (
      `ID` int(11) NOT NULL auto_increment,
      `ref` int(4) NOT NULL,
      `lang` char(2) collate utf8_unicode_ci NOT NULL,
      `contenu` text collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`ID`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
     
    -- Contenu de la table `batiments`
    INSERT INTO `batiments` (`ID`, `ref`, `lang`, `contenu`) VALUES 
    (1, 2010, 'fr', 'Mon texte 1'),
    (2, 2010, 'fr', 'Mon texte 2');
    Voici la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function batiments($app_ref, $app_lang) {
        $app_tableau = array();
        if ($app_ref != 0) {
            $req = "SELECT contenu FROM batiments WHERE ref='$app_ref' AND lang='$app_lang' ORDER BY ID ASC";
            $sql = mysql_query($req) or die(mysql_error());
            while($myRow = mysql_fetch_assoc($sql)) {
                $app_tableau[] = $myRow['contenu'];
            }
        }//fin de if
        //
        return $app_tableau;
    }//fin de la fonction
    Voici l'appel de la fonction dans la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    batiments(2010, 'fr');
    echo '<br /><br />Mon résultat dans le bloc 1 : ';
    var_dump($app_tableau[0]['contenu']);
    et voici ce qui est affiché :
    Mon résultat dans le bloc 1 : NULL

  19. #19
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($app_tableau[0]['contenu']);
    Mais non.
    Pour constater ce que cont TOUT ton tableau faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($app_tableau);
    tout simplement.
    Et là cette fonction renvoie la structure du tableau et son contenu.
    C'est fait pour t'aider à comprendre, et savoir comment le manipuler, accéder à ses éléments.


    Dans ton cas on t'avait proposé 2 façons de construire ton tableau :
    Soit 1 dimension, soit 2 dimensions.
    En 2 dimension c'était :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($myRow = mysql_fetch_assoc($sql)) {
        $app_tableau[] = $myRow;
    }
    Qui pour le manipuler : echo $app_tableau[0]['contenu'];


    Mais comme tu as précisé que tu souhaitais que cette fonction retourne unique 1 seul champ (contenu), du coup un tableau à 2 dimensions devient inutile, 1 seule dimension suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($myRow = mysql_fetch_assoc($sql)) {
        $app_tableau[] = $myRow['contenu'];
    }
    Qui pour le manipuler : echo $app_tableau[0];

    C'est soit l'un, soit l'autre.


    Si la manipulation des des tableaux te semble abstraite, alors il faudrait chercher des tutos sur ce point.
    En tout cas, il est impossible de faire quoi que ce soit sans avoir recourt aux tableaux (à 1, 2, 3 voir 4 dimensions).
    Il te faut combler ce manque à mon sens.

  20. #20
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Oui effectivement, tu m'as bien cerné mon ami. Je ne sais pas encore utilisé les tableaux. Il me reste tableaux et expressions régulières à apprendre.
    J'ai modifier le code de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    batiments(2010, 'fr');
    echo '<br /><br />Mon résultat dans le bloc 1 : ';
    echo $app_tableau[0];
    Voici ce qui s'affiche
    Mon résultat dans le bloc 1 :
    Donc rien ne s'affiche. Par contre si je fais la même chose dans la fonction juste après le while pour voir, alors ça m'affiche la bonne réponse.
    Donc je continue à penser qu'il y a un problème avec le retour de cette fonction. En tout cas, je sui très près du but. Qu'est ce qui cloche dans le retour de ma fonction?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Récupérer les résultats d'une requête dans des variables
    Par christophebolmontcha dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/05/2014, 10h14
  2. Copier les résultats d'un find dans des variables
    Par Geoffrey49000 dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 11/08/2011, 16h44
  3. Réponses: 14
    Dernier message: 28/04/2007, 12h25
  4. Réponses: 11
    Dernier message: 18/07/2006, 13h53
  5. Réponses: 3
    Dernier message: 04/07/2006, 16h34

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