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 :

Des noms de variables dans une boucle


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut Des noms de variables dans une boucle
    Bonjour, voici mon problème : dans une base de donnée j'ai des enregistrements classés par date, de 2001 à 2009. J'ai d'un côté un fichier dans lequel j'enregistre mes requêtes SQL, et un fichier qui appelle ces requêtes.

    Je souhaite créer x variables pour nom de requête selon le nombre x défini par le nombre de valeur de mon tableau de paramètres, puis afficher ensuite le résultat. Par exemple, je définie mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $year = array( 2001, 2002, 2003, 2005, 2006, 2007, 2009);
    Dynamiquement, j'aimerai créer 7 variables contenant mes requêtes du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($year as $yearN) {
    	$varArchive = "varArchive" . $yearN;
    	$varArchive = mysql_query("SELECT * FROM bulletin WHERE (mois>='" . $yearN . "-01-01' AND mois<='" . $yearN . "-12-31') ORDER BY numero DESC");
    }
    pour ensuite affiches les enregistrements correspondants comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php foreach($year as $yearN) { ?>
    	$varArchive = "varArchive_" . $yearN;
            while ($varNtotal = mysql_fetch_array($varArchive)) { ?>
             <li>N°<?php echo $varNtotal['numero']; ?></li>
    <?php }} ?>
    Mais j'obtiens un joli mysql_fetch_array(): supplied argument is not a valid MySQL result resource qui provient apparemment du nom de variable.

    Comment faire ? Merci d'avance.

  2. #2
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Je n'ai pas testé,
    mais à priori,
    la syntaxe correcte serait plutôt celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${$varArchive} = mysql_query("SELECT * FROM bulletin WHERE (mois>='" . $yearN . "-01-01' AND mois<='" . $yearN . "-12-31') ORDER BY numero DESC");
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($varNtotal = mysql_fetch_array(${$varArchive}))
    Fred

  3. #3
    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
    Pourquoi pas directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach($year as $yearN) {
    	$varArchive = mysql_query("SELECT * FROM bulletin WHERE YEAR(mois) =" . $yearN . " ORDER BY numero DESC");
    while ($varNtotal = mysql_fetch_array($varArchive)) { ?>
             echo '<li>N°'. $varNtotal['numero'] .'</li>';
    }
    }
    ou meme avec une seule requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $varArchive = mysql_query("SELECT * FROM bulletin WHERE YEAR(mois) IN (" . implode(',', $year) . ") ORDER BY numero DESC" ;
    while ($varNtotal = mysql_fetch_array($varArchive)) { ?>
             echo '<li>N°'. $varNtotal['numero'] .'</li>';
    }

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Oui merci, cette syntaxe est correcte je n'ai plus mon message d'erreur.
    Par contre, si le code fonctionne bien pour ma première année du tableau, je n'ai rien pour les autres années, que j'affiche dans des onglets via jquery !...

    EDIT : non c'est moi qui déconne, j'avais oublié de rajouter le [$yearN] à la fin de la variable, maintenant ça fonctionne parfaitement.
    Merci beaucoup.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pourquoi pas directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach($year as $yearN) {
    	$varArchive = mysql_query("SELECT * FROM bulletin WHERE YEAR(mois) =" . $yearN . " ORDER BY numero DESC");
    while ($varNtotal = mysql_fetch_array($varArchive)) { ?>
             echo '<li>N°'. $varNtotal['numero'] .'</li>';
    }
    }
    ou meme avec une seule requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $varArchive = mysql_query("SELECT * FROM bulletin WHERE YEAR(mois) IN (" . implode(',', $year) . ") ORDER BY numero DESC" ;
    while ($varNtotal = mysql_fetch_array($varArchive)) { ?>
             echo '<li>N°'. $varNtotal['numero'] .'</li>';
    }
    Parce que mes deux bouts de code sont dans deux fichiers différents !!

  6. #6
    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
    Et dans quel but ?
    Pour moi c'est une erreur de faire autant de requete que d'année.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    En fait j'ai un fichier "sgbd.php" dans lequel j'enregistre toutes mes requêtes, ce fichier est appelé dans mon site pour afficher lorsque demandé le contenu de la requête.

    Ensuite j'ai dans ma base des archives datées, que j'affiche sur ma page. Pour rendre la navigation plus agréable, j'ai voulu passer par un système d'onglets (2001, 2002 ...) en utilisant jquery tabs. J'ai donc x div qui correspondent à mes x années du tableau, il me faut donc bien x requêtes ? Je ne vois pas trop comment faire autrement !

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Bon effectivement ça ne fonctionne pas fort ! Ca fonctionne bien sur une requête, mais lorsque j'en programme plusieurs, elles sont toutes mélangées.
    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $year = array( 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009);
    foreach($year as $yearN) {
    	${$varBulletinArchive}[$yearN] = mysql_query("SELECT * FROM bulletin WHERE (mois>='" . $yearN . "-01-01' AND mois<='" . $yearN . "-12-31') ORDER BY numero DESC");
    	${$varInfoArchive}[$yearN] = mysql_query("SELECT * FROM info WHERE (mois>='" . $yearN . "-01-01' AND mois<='" . $yearN . "-12-31') ORDER BY numero DESC");
    }
    Normalement ce code me crée 20 requêtes ($varBulletinArchive2000 à $varBulletinArchive2009, et $varInfoArchive2000 à $varInfoArchive2009).
    Sur ma page "bulletin.php" le résultat de la requête $varBulletinArchive me retourne le résultat de $varInfoArchive, comme si uniquement la dernière ligne était considérée. Et si j'inverse les requêtes, ça me confirme.

    D'où cela peut bien venir ? (je crois bien que cette méthode n'est pas très propre pour le coup)

Discussions similaires

  1. Attribuer des noms de variables dans une boucle
    Par sanguisorbe dans le forum Langage
    Réponses: 8
    Dernier message: 13/06/2014, 15h42
  2. Réponses: 6
    Dernier message: 10/01/2013, 11h07
  3. [Débutant] Nom de variable dans une boucle
    Par el cascador dans le forum MATLAB
    Réponses: 10
    Dernier message: 17/04/2009, 13h23
  4. Nom de variable dans une boucle
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 16/05/2008, 16h24
  5. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45

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