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 :

boucle for ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Par défaut boucle for ?
    bonjour à tous,

    j'essaie de comprendre comment marche la boucle for mais je ne suis même pas sûr de savoir si c'est elle qui correspond à mes attentes ?
    j'affiche actuellement une liste dont voici l'image :

    et voilà le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		<?php
    			$resultat=mysql_query("SELECT nom, pays, flag, numconstructeur FROM constructeur, pays WHERE pays.libelle=constructeur.pays ORDER BY pays");
    			$cons=$ligne['numconstructeur'];
    			while($ligne=mysql_fetch_row($resultat))
    			{
    			echo "<div align=\"left\" ><img src=./images/".$ligne[2]." width=\"20\" border=\"1\">&nbsp;<a href=\"./index.php?page=listecons&ncons=".$ligne[3]."\">".$ligne[0]."</a></div>";
    			}
    		?>
    mon souhait est de n'afficher qu'un drapeau (flag) par pays et non de répéter l'image à chaque fois. je présume que la boucle for est faite pour ça mais je ne sais pas comment l'utiliser !
    comment déclarer le tableau en particulier ? (la table pays contient 3 champs, l'id, le nom et le drapeau. l'id du pays est elle reliée au constructeur)
    comment imbriquer le code avec le while ?
    ou alors, y'a t il une autre methode simple ?

    merci d'avance

    francis

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    pour commencer, je corrigerais ton code comme suit : (Apostrophes ou guillemets : lesquels choisir ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    	$resultat = mysql_query("SELECT nom, pays, flag, numconstructeur FROM constructeur, pays WHERE pays.libelle = constructeur.pays ORDER BY pays ASC, numconstructeur ASC;");
    	$cons = $ligne['numconstructeur'];
    	while ($ligne = mysql_fetch_row($resultat))
    	{
    ?>		<div style="text-align:left;"><img src="./images/<?php echo $ligne[2]; ?>" width="20" border="1" alt="" />&nbsp;<a href="./index.php?page=listecons&ncons=<?php echo $ligne[3]; ?>"><?php echo $ligne[0]; ?></a></div>
    <?php
    	}
    ?>
    Voici une méthode pour ce que tu demandes : (bien que je trouve très bien de mettre le drapeau à chaque ligne)
    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
    <?php
    	// affichage drapeau
    $result_flag = mysql_query("SELECT DISTINCT flag FROM pays, constructeur WHERE (pays.libelle = 
    constructeur.pays) ORDER BY pays ASC;");
    while ($flg = mysql_fetch_row($result_flag))
    {
    ?>
    	<div style="clear:both;">
    		<div style="float:left; width:25px;"><img src="./images/<?php echo $ligne[2]; ?>" width="20" border="1" alt="" /></div>
    		<div style="float:left;">
    <?php
    	// listes des resultats pour ce pays
    	$resultat = mysql_query("SELECT nom, numconstructeur FROM constructeur, pays (WHERE pays.libelle = constructeur.pays AND pays.flag = '".$flg['flag']."' ORDER BY pays ASC, numconstructeur ASC;");
    	$cons = $ligne['numconstructeur'];
    	while ($ligne = mysql_fetch_row($resultat))
    	{
    ?>		<p><a href="./index.php?page=listecons&ncons=<?php echo $ligne['numconstructeur']; ?>"><?php echo $ligne['nom']; ?></a></p>
    <?php
    	}
    ?>
    		</div>
    	</div>
    <?php
    }
    ?>
    Une autre méthode (qui suppose que tu as une "image vide flag_vide.png" de la taille d'un drapeau) :
    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
    <?php
    	$resultat = mysql_query("SELECT nom, pays, flag, numconstructeur FROM constructeur, pays WHERE pays.libelle = constructeur.pays ORDER BY pays ASC, numconstructeur ASC;");
    	$cons = $ligne['numconstructeur'];
    	$cur_flag = '';
    	while ($ligne = mysql_fetch_row($resultat))
    	{
    		if ($cur_flag == '' || $cur_flag != $ligne['flag']) // 1er drapeau ou drapeau suivant : on l'affiche
    		{
    			$cur_flag = $ligne['flag'];
    			$aff_flag = '<img src="./images/'.$ligne['flag'].'" width="20" border="1" alt="" />&nbsp;';
    		} else { // meme drapeau : on ne l'affiche pas (drapeau "vide" a la place)
    			$aff_flag = '<img src="./images/flag_vide.png" width="20" border="0" alt="" />&nbsp;';
    		}
    ?>		<div style="text-align:left;"><?php echo $aff_flag; ?><a href="./index.php?page=listecons&ncons=<?php echo $ligne['numconstructeur']; ?>"><?php echo $ligne['nom']; ?></a></div>
    <?php
    	}
    ?>
    Dernière modification par Invité ; 16/07/2011 à 09h31.

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,
    pour commencer, je corrigerais ton code comme suit : (Apostrophes ou guillemets : lesquels choisir ?)
    merci "superdalmatien" je vais regarder tout ça de pres ! je pense qu'avec un seul drapeau et le nom je pourrais faire une mise en page plus sympa . surement en imbriquant une image de fond par pays.
    merci pour ta rapidité

    ps: ' ou " ...... merci pour le lien , je t'avoue que j'essaie avec un puis l'autre si ça marche pas ! je suis un programmeur du dimanche...et encore...pas tout les dimanches !

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Par défaut
    pour la première solution j'ai une erreur sur la requête en ligne 15 qui se répète
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\xampplite\htdocs\test\test.php on line 15
    l'image du drapeau ne s'affiche pas non plus malgré le remplacement du $ligne[2] en $ligne[0] .
    je vais tester le deuxième, j'ai une image au cas ou
    @++

    je viens de tester la deuxième formule, je n'ai aucun affichage hormis un grand trait blanc vertical (les images manquantes)

    ps: le ";" apres le ASC dans la requête est à enlever ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    1er script :
    1/ remplace (ligne 9) $ligne[2] par $flg['flag'] (il faut adapter à la requête !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		<div style="float:left; width:25px;"><img src="./images/<?php echo $flg['flag']; ?>" width="20" border="1" alt="" /></div>
    et ligne 13, "(" mal placé et ")" manquant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$resultat = mysql_query("SELECT nom, numconstructeur FROM constructeur, pays WHERE (pays.libelle = constructeur.pays AND pays.flag = '".$flg['flag']."') ORDER BY pays ASC, numconstructeur ASC;");
    2/ supprime la ligne 14 (inutile, et surtout mal placée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$cons = $ligne['numconstructeur'];
    3/remplace (partout) : mysql_fetch_row par mysql_fetch_array
    4/ le ; à la de la requête n'est pas obligatoire, mais il marque et "vérrouille" la fin de la requête (empêchant tout ajout "parasite" éventuel)
    5/ au lieu de $ligne[0], $ligne[2] ... utilise les noms des champs : $ligne['nom'], $ligne['blabla'] ...
    c'est plus clair et plus facile à lire et à débuguer.
    6/ pour les requêtes : tu peux ajouter "or die ..." pour aider au débuguage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php	// ...
    	$requete = "SELECT nom, numconstructeur FROM constructeur, pays ".
    		" WHERE (pays.libelle = constructeur.pays AND pays.flag = '".$flg['flag']."') ".
    		" ORDER BY pays ASC, numconstructeur ASC;";
    	$resultat = mysql_query($requete) or die('Erreur SQL :<br />'.$requete.'<br />'.mysql_error());
    	while ($ligne = mysql_fetch_array($resultat))
    	{
    		// ...
    	}
    	mysql_free_result($resultat);
    ?>
    Dernière modification par Invité ; 16/07/2011 à 13h07.

  6. #6
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    1er script :
    merci pour toute ces bonnes remarques. désolé j'avais pas vu le $flg, comme je fais que du basique j'ai tendance à penser que tout les résultat sont toujours des $ligne !
    j'ai testé et ça marche, je vais pouvoir l'adapter à ce que je voudrais faire ....je pense
    en attendant j'ai regardé tes cours de redimensionnement d'image. bravo c'est super instructif. je vais potasser ça, ça devrait m'être trés utile .
    encore merci pour ton aide !

    et si tu permet, j'aimerais bien que tu donne une petite friandise à candy de ma part, elle est vraiment très belle et elle a l'air d'une chienne très agréable à vivre

  7. #7
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Par défaut
    pour info voilà ce que ça donne

    c'est pas folichon, mais ça va me permettre plus facilement de faire des "tiroirs"
    la liste est vraiment trop longue.
    encore merci

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    t'as pas PDO ?

  9. #9
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    t'as pas PDO ?
    salut, cékoissa ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    PDO : PHP Data Objects

    "L'extension PHP Data Objects (PDO) définit une excellente interface pour accéder à une base de données depuis PHP
    [....]
    PDO est fournit avec PHP 5.1 et est disponible en tant qu'extension PECL pour PHP 5.0 ; PDO requiert les nouvelles fonctionnalités OO fournies par PHP 5 et donc, ne fonctionne pas avec les versions antérieures de PHP. "

  11. #11
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Par défaut
    quel peut être l'interet pour moi exactement ?
    quelque chose de particuliers concernant les tiroirs ? je pensais qu'on faisant ça avec du javascript

  12. #12
    Invité
    Invité(e)
    Par défaut
    Non, ca n'a rien à voir ...

    C'est juste une "nouvelle" façon ("orientée objet") de se connecter à une BdD en php.

  13. #13
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Non, ca n'a rien à voir ...

    C'est juste une "nouvelle" façon ("orientée objet") de se connecter à une BdD en php.
    ah ok, je viens de verifier mon hebergeur et la reponse est oui, donc je pourrais activée la fonction si besoin.

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par spokito Voir le message
    ah ok, je viens de verifier mon hebergeur et la reponse est oui, donc je pourrais activée la fonction si besoin.
    tu peux faire du FETCH_GROUP (fais une recherche avec pdo fetch_group).

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

Discussions similaires

  1. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 16h07
  2. Réponses: 3
    Dernier message: 06/07/2004, 10h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 19h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 22h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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