[PHP/MySQL]Recuperer des données

dmo95

Membre actif
24 Mai 2007
584
14
Bonsoir à tous,

Je sollicite une fois de plus la communauté des développeurs Mac (ou pas ?!), pour m'aider dans ma démarche, afin d'initialiser un tableau clé=>valeurs correctement à partir de données.

Je récupère les données de la façon suivante :

Bloc de code:
function load_marques(){
        $connection = connect_db();
        
        $sql_query = "SELECT DISTINCT `marque`, `cat` FROM `articles`;";
        $reponse = mysql_query($sql_query);
        
        $i=0;
    
        while($donnees = mysql_fetch_array($reponse))    //traitement dans une liste
        {
            $shop[$i]=array(
                'marque'=>$donnees['marque'],
                'cat'=>$donnees['cat'],
            );
            $i++;
        }
        
        close_db();
        
        return $shop;
    }

Ce qui me donne un tableau avec la structure suivante :

Bloc de code:
Array (
        [0] => Array         ( 
                 [marque] => Smalto             
                 [cat] => Costume         )      
        [1] => Array         (
                 [marque] => Hugo Boss
                 [cat] => Chemise         )      
        [2] => Array         ( 
                 [marque] => Smalto             
                 [cat] => Chemise         )      
        [3] => Array         (             
                 [marque] => Smalto             
                 [cat] => Pantalon         ) 
        [4] => Array         ( 
                 [marque] => Hugo Boss 
                 [cat] => Pantalon         ) 
        [5] => Array         ( 
                 [marque] => Hugo Boss             
                 [cat] => Costume         ) 
)

Or j'aimerais avoir un tableau qui se présente de la manière suivante pour pouvoir travailler plus facilmement avec les clés/valeurs:

Bloc de code:
$shop = array(
        'smalto'=> array('costume','chemise', 'pantalons'),
        'hugo boss'=> array('costume', 'polo', 'accessoire')
    );

Il faut donc changer mon premier bloc dans lequel j'initialise le tableau $shop...

Ne comprenant déjà pas trop bien le système de la boucle, avec la fonction mysql_fetch_array, je sollicite vos connaissances et votre savoir pour m'orrienter vers la solution !!

Merci bien
 

dmo95

Membre actif
24 Mai 2007
584
14
Un peu technique, et surtout un peu lourd de s'immerger dans mon code, mais je pense que c'est très simple pour quelqu'un qui touche un peu sa bille !!

Sinon il me reste la solution d'initialiser mon tableau avec un petit algo, auquel cas je perd en performance de chargement ! Ce n'est pas la bonne solution...

Up svp ;)
 

Gz'

Membre actif
29 Mai 2007
761
43
35
Kuala Lumpur, Malaisie
www.ftpix.fr
Methode crade :

Bloc de code:
function load_marques(){
        $connection = connect_db();
        
        $sql_query = "SELECT DISTINCT `marque` FROM `articles`;";
        $reponse = mysql_query($sql_query);
        
        $i=0;
    
        while($donnees = mysql_fetch_array($reponse))    //traitement dans une liste
        {
            $marque = $donnees['marque'];
            $sql2 = "SELECT * FROM 'articles' WHERE marque  = '.$marque;
            $res2 = mysql_query($sql2);
            $j = 0;
            while($row = mysql_fetch_array($res2)){
               $shop[$marque][$j] = $row['cat'];
               $j++;
            }
        }
        
        close_db();
        
        return $shop;
    }

Ca donne un truc comme ça fait très rapidement, c'est pas super propre mais dans le principe, ça marche. A mons avis, avec une seule requête sql bien placée, c'est faisable, mais il est tard et j'ai la flemme.
 

p4bl0

Membre expert
Club MacG
12 Juillet 2004
4 772
423
32
$PWD
p4bl0.net
Methode crade :

Bloc de code:
function load_marques(){
        $connection = connect_db();
        
        $sql_query = "SELECT DISTINCT `marque` FROM `articles`;";
        $reponse = mysql_query($sql_query);
        
        $i=0;
    
        while($donnees = mysql_fetch_array($reponse))    //traitement dans une liste
        {
            $marque = $donnees['marque'];
            $sql2 = "SELECT * FROM 'articles' WHERE marque  = '.$marque;
            $res2 = mysql_query($sql2);
            $j = 0;
            while($row = mysql_fetch_array($res2)){
               $shop[$marque][$j] = $row['cat'];
               $j++;
            }
        }
        
        close_db();
        
        return $shop;
    }

Ca donne un truc comme ça fait très rapidement, c'est pas super propre mais dans le principe, ça marche. A mons avis, avec une seule requête sql bien placée, c'est faisable, mais il est tard et j'ai la flemme.
:afraid: !
 

dmo95

Membre actif
24 Mai 2007
584
14
Ok merci, je vais tester vos deux solutions et je vous tiens au courant ;)

Edit : Bon et bien je viens de tester les quelques ligne de p4ablo et cela m'organise mon tableau comme je voulais, c'est parfait !!!

Cela va me permettre d'automatiser l'affichage de mon site en fonction des marques disponibles, ainsi que de leurs types d'articles.
 

p4bl0

Membre expert
Club MacG
12 Juillet 2004
4 772
423
32
$PWD
p4bl0.net
Ok merci, je vais tester vos deux solutions et je vous tiens au courant ;)

Edit : Bon et bien je viens de tester les quelques ligne de p4ablo et cela m'organise mon tableau comme je voulais, c'est parfait !!!

Cela va me permettre d'automatiser l'affichage de mon site en fonction des marques disponibles, ainsi que de leurs types d'articles.

C'est qui çuilà ? :D
;)
 

dmo95

Membre actif
24 Mai 2007
584
14
Peut être qu'elle marche ta technique Gz mais j'ai pas tester, j'ai opté pour les quelques lignes synthétiques de p4blo héhé ^^

J'ai un autre soucis maintenant, qui n'est ni plus ni moins que de l'affichage !?!? Mais cela me rend dingue le CSS entre IE et FF j'ai rarement optimisé pour IE donc j'avoue avoir quelques difficultés !! Alors que le W3C me dit que c'est OK :p

Donc voilà j'ai un menu sous forme de liste (là ou il y a les marques) et mon conteneur qui est juste en dessous. Les éléments de la liste ont une image (en png, on passe les problèmes de transparence !!! ^^), et cette image à une certaine taille qui apparament pose problème, sous IE.

Code HTML :
Bloc de code:
<ul class="navigation">
                <li><a href="#boss"><span>Hugo Boss</span></a></li>
                <li><a href="#smalto"><span>Smalto</span></a></li>
                <li><a href="#arthur"><span>Vicompte Arthur</span></a></li>
                <li><a href="#marina"><span>La Martina</span></a></li>
                <li><a href="#acces"><span>Acc&egrave;s</span></a></li>
            </ul>

Code CSS :
Bloc de code:
    #page .navigation{
        padding:0 0 0 20px;
        height:50px;
        background:url(images/page_navigation_bg.png) center top no-repeat;
    }
    
    #page .navigation .center{
        margin : auto;
    }
    
    #page .navigation li{
        height:50px;
        float:left;
        padding:0 2px 0 0;
        z-index : 0;
    }
    
    #page .navigation a{
        display:block;
        height:70px;
        line-height:50px;
        float:left;
        padding:0 13px 0 0;
        /*margin-left : 2px;*/
        font-size:13px;
        color:#FFF;
        font-weight:bold;
    }
        #page .navigation a:hover,
        #page .navigation a.selected{
            color:#000;
            background:url(images/page_navigation_a.png) right top no-repeat;
        }
    #page .navigation a span{
        display:block;
        height:70px;
        float:left;
        padding : 0 7px 0 20px;
    }
    #page .navigation a:hover span,
    #page .navigation a.selected span{
            background:url(images/page_navigation_span.png) left top no-repeat;        }

Site pour que vous aillez une meilleure idée : http://starlight95.free.fr/mathieu

Par ailleurs, je souhaiterais centrer le menu (la liste) automatiquement ca la taille est variable selon la page principale dans laquelle vous vous trouvez. Or j'ai essayé le margin auto dans tous les blocs css rien y fait... Et aussi de mettre la classe center dans ma liste (<ul class="center")...

Je laisse un background-color pour que vous vous rendez bien compte des deux comportements, sachant que le comportement souhaité et bien évidemment celui de FF.

PS : Je n'ai pas réouvert de topic, même ci le sujet dérive un peu du titre principale...