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 :

[SQL] Mise en page d'un tableau oui/non


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 139
    Points : 76
    Points
    76
    Par défaut [SQL] Mise en page d'un tableau oui/non
    Bonjour à tous,

    Je dois créer un tableau oui/non à partir d'une base de données qui aurait la forme suivante :

    outil 1 | outil 2 |outil 3 | outil 4 ... outil 100
    garage1 X X X
    garage2 X X X
    garage3 X X X
    garage4 X X X
    garage100 X X X

    Avant de faire ce tableau, je fais une recherche pour savoir suivant des critéres la liste des garages qui conviendraient.

    J'ai donc au final :
    -une premiére requête avec la liste des garages.
    -une seconde requête avec la liste des outils pour les afficher dans mon tableau.

    Il me reste plus qu'à afficher pour chaque garage si ils ont les outils.(c'est à dire les coix)

    Et là j'ai un probléme.

    Avec ma premiére requête je récupére les numéros de garage dans un tableau.
    Puis pour chaque garage je fais :
    -une requête pour prendre les liaisons garage_outil
    -une requête pour reprendre ma liste d'outil

    et après je regarde suivant ma liste d'outil si la liaison existe :

    -si elle existe -> cela m'affiche une croix
    -si elle n'existe pas -> cela m'affiche une case vide

    voici mon code :

    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
    <?php
    	$j=0;
    	$nbGarage=count($garage);
    	for ($i=0;$i<1;$i++){
    		$sql3="SELECT NUMOUTIL, DESCRIPTIONOUTIL FROM OUTIL, GARAGE_OUTIL WHERE GARAGE_OUTIL.NUMOUTIL=OUTIL.NUMOUTIL AND NUMGARAGE=".$garage[$i]." ORDER BY NOMOUTIL";
    		$resultat3  = mysql_query($sql3)  or die(mysql_error());
    		$sql4 = "SELECT NUMOUTIL FROM OUTIL ORDER BY NOMOUTIL";
    		$resultat4  = mysql_query($sql4)  or die(mysql_error());
    		while ($row = mysql_fetch_row($resultat3) && $row2 = mysql_fetch_row($resultat4)){
    		   $l1 = count ($row2);
    		   for($i=0;$i<$l1;$i++){
    			    $l2 = count ($row2 [$i]);
    		        if ($row2[$i]==$row[$j]){
    		   			echo("<td class='hauteur3_jc'>$row2[$i] et $row[$j]</td>");
    		   			$j=$j+1;
    				}
    				else{
    		   			echo("<td class='hauteur3_jc'>$row2[$i] et $row[$j]</td>");
    				}
    			}
    		}	
    	}
    	?>
    Je pense qu'il y a un probléme car il ne me veut pas de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($row = mysql_fetch_row($resultat3) && $row2 = mysql_fetch_row($resultat4)){
    J'espere que vous pourrez m'aider. Si mon message n'est pas compréhensible n'hesiter pas à me poser des questions.

    @+ Seb

  2. #2
    Membre averti Avatar de TucSale
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 264
    Points : 325
    Points
    325
    Par défaut
    bonjour,

    je comprends pas trop l'interet de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql3="SELECT NUMOUTIL, DESCRIPTIONOUTIL 
    	FROM OUTIL, GARAGE_OUTIL 
    	WHERE GARAGE_OUTIL.NUMOUTIL=OUTIL.NUMOUTIL 
    	AND NUMGARAGE=".$garage[$i]." 
    	ORDER BY NOMOUTIL";
     
    $sql4 = "SELECT NUMOUTIL FROM OUTIL ORDER BY NOMOUTIL";
    A premiere vu $sql4 est inutil

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 139
    Points : 76
    Points
    76
    Par défaut
    Merci pour ton message.

    Ben c'est à dire que sql4 me permet de reprendre ma liste d'outil et après je regarde en fonction de cette liste compléte si mon garage posséde un outil de cette liste.

    (au tout début, je fais une premiére requête pour afficher ma liste d'outil car mon tableau étant très très grand, je les affiche avec une image à la verticale).

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Je rejoins TucSale sur ton histoire de requete SQL. Je pense que tu peux trouver un moyen de faire une seule requete pour avoir TOUS les résultats. Ca sera bien plus rapide que deux requetes dans une boucle et tu n'auras pas le problème de fetcher deux résultats à la fois dans ta boucle (et je ne suis pas sur que ca marchera d'ailleurs là).

  5. #5
    Membre averti Avatar de TucSale
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 264
    Points : 325
    Points
    325
    Par défaut
    Fais attention a ta variable $i que tu utilise 2 fois dans 2 boucles differents
    ensuit tu fais une mauvaise utilisation de mysql_fetch_row

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 139
    Points : 76
    Points
    76
    Par défaut
    Mais je ne vois pas comment faire autrement pour :

    mon affichage horizontal : 1 requete pour la liste des garages
    mon affichage vertical : 1 requete pour la liste des outils

    mes croix : 1 requete pour connaitre les liaisons : garage-outil. ( elle ce fait autant de fois qu'il y a de garage )

    Si pendant mon affichage horizontal, je reprend ma liste d'outil dans un tableau j'aurais déjà une requête en moins.

  7. #7
    Membre averti Avatar de TucSale
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 264
    Points : 325
    Points
    325
    Par défaut
    tiens voici un bout de code fais en speed
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    ?php  	
    	/* initialisation du tableau d'outil et création de la ligne d'entete  */
    	$sql4 = "SELECT NUMOUTIL, DESCRIPTIONOUTIL FROM OUTIL ORDER BY NOMOUTIL;";
    	$resultat4  = mysql_query($sql4)  or die(mysql_error());
    	$NbMaxOutil = mysql_num_rows($resultat4 ); //Nombre d'outil dans ta base
    	echo "<tr>";
    	echo("<td class='hauteur3_jc'>Garage</td>");
    	while ($row2 = mysql_fetch_row($resultat4)){
    		echo("<td class='hauteur3_jc'>".$row2[1]."</td>");
    		$tabOutil[] = $row2[0];
    	}
    	echo "<tr />";
     
     
    	$nbGarage = 1;//$nbGarage=count($garage);
    	for ($i=0;$i<$nbGarage;$i++){	
    		/* initialisation du tableau d'outil pour un garage donné */
    		$sql4 = "SELECT NUMOUTIL
    			FROM OUTIL, GARAGE_OUTIL 
    			WHERE GARAGE_OUTIL.NUMOUTIL=OUTIL.NUMOUTIL 
    			AND NUMGARAGE=".$garage[$i]." 
    			ORDER BY NOMOUTIL";
    		$resultat4  = mysql_query($sql4)  or die(mysql_error());
    		while ($row2 = mysql_fetch_row($resultat4)) $tabOutilGarage[] = $row2[0];
     
    		echo "<tr>";
    		echo("<td class='hauteur3_jc'>".$garage[$i]."</td>");
    		for ($Compt=0;$Compt<$NbMaxOutil;$Compt++){	
    			/* Test de la présence de l'outil dans le garage */
    			if (in_array ($tabOutil[$Compt], $tabOutilGarage)) echo("<td class='hauteur3_jc'>oui</td>");
    				else echo("<td class='hauteur3_jc'>non</td>");
    		}
    		echo "<tr/>";
    	}
    ?>

    C'est fais vite fais, en esperant que ca puisse t'aider.
    Pour eviter d'appeler ta requete de selection d'outil, je l'ai sortie de la boucle et mise le résultat dans un tableau (j'aime bien les tableau )
    Je suis sur que c'est a ameliorer.

    petit exemple de ysql_fetch_row
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $result = mysql_query("SELECT id,email FROM people WHERE id = '42'");
    if (!$result) {
       echo 'Impossible d\'exécuter la requête : ' . mysql_error();
       exit;
    }
    $row = mysql_fetch_row($result);
     
    echo $row[0]; // 42
    echo $row[1]; // la valeur du champ email

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 139
    Points : 76
    Points
    76
    Par défaut
    Merci pour ton message et pour ton aide. Je vais esssayer de suite ton code.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 139
    Points : 76
    Points
    76
    Par défaut
    Je suis enfin arrivé à un résultat hier soir. Je me suis aidé de ton code mais il y a des choses que j'ai mis de coté car j'ai pas trop compris ta façon de faire des tableaux.

    Voici mon résultat :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?php 	
     
    $nbGarage = count($garage);
    $nbOutil = count($outil);
    $nbControle = count($controle);
    /*
    /* POUR CHAQUE GARAGE */
    $k=0;$g=0;
    $f = 0;
    $jj="jc";
    for ($i=0;$i<$nbGarage;$i++){
    	$sql3 /* REQUETE POUR TROUVER LES CARACTERISTIQUES DU GARAGE */
    	$resultat3 = mysql_query($sql3)  or die(mysql_error());
    	/* DEBUT */
    	echo("<tr>");
    	/* OUTIL */
    	while($row = mysql_fetch_row($resultat3)){
    		$l1=count($row);
    		for($j=0;$j<$l1;$j++){
    			$l2=count($row[$j]);
    			while($row[$j]!=$outil[$k] && $outil[$k]<$nbOutil){
    				echo("<td class='hauteur3_".$jj."'></td>");
    				$k++;
    			}
    			echo("<td class='hauteur3_".$jj."'>X</td>");
    			$k++;
    			$j=$j+1;
    		}
    	}
    	while($k!=$nbOutil){
    				echo("<td class='hauteur3_".$jj."'></td>");
    				$k++;
    			}
    	/* CONTROLE*/
    	$sql4 /* REQUETE POUR TROUVER LES CONTROLES DU GARAGE */
    	$resultat4  = mysql_query($sql4)  or die(mysql_error());
     
    	while($row2 = mysql_fetch_row($resultat4)){
    		$l3=count($row2);
    		for($j=0;$j<$l3;$j++){
    			$l4=count($row2[$j]);
     
    			while($row2[$j]!=$controle[$g] && $controle[$g]<$nbControle){
    				echo("<td class='hauteur3_".$jj."'></td>");
    				$g++;
    			}
    			echo("<td class='hauteur3_".$jj."'>X</td>");
    			$g++;
    		}
    	}
    	while($g!=$nbControle){
    				echo("<td class='hauteur3_".$jj."'></td>");
    				$g++;
    			}
    	/* FIN */
    	echo("</tr>");
    	$k=0;$g=0;
    	$f++;
    	$jj="jf";
    	if($f==2){
    	   $f=0;
    	   $jj="jc";
    	}
    }
    ?>
    Toutes les critiques sont les bienvenues.

    ( j'avais oublié de préciser que mon tableau était plus complexe :
    outil 1 | outil 2 |outil 3 | outil 4 ... outil 100| controle1 ... controle 50
    garage1
    garage2
    garage3
    garage4
    garage100
    )

    @+ Seb

Discussions similaires

  1. mise en page d'un tableau dynamique
    Par neoboy dans le forum Langage
    Réponses: 8
    Dernier message: 04/09/2007, 14h50
  2. mise en page d'un tableau sous IE 7
    Par Emcy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/03/2007, 14h33
  3. [Tableaux] Mise en page d'un tableau
    Par bilane dans le forum Langage
    Réponses: 1
    Dernier message: 09/09/2006, 10h14
  4. [Tableaux] Probleme mise en page d'un tableau
    Par griese dans le forum Langage
    Réponses: 18
    Dernier message: 11/07/2006, 16h11
  5. mise en page d'un tableau
    Par zouzou1010 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 08/06/2006, 11h38

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