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

Vue hybride

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

+ 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