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 :

Catalogue dynamique php/mysql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut Catalogue dynamique php/mysql
    Bonjour,

    je suis de nouveau devant une impasse..

    Je cherche à faire un catalogue dynamique en liaison avec ma table produit, de manière à ce que si j'ajoute un produit le tableau se mette à jour.

    Je pensais que ca allait être assez simple mais je sèche.

    A la base le catalogue était en html très basique avec <table> etc, on le regardait et basta.

    Ma table produit est comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    +----------------+
    | produit        |
    +----------------+
    | nump        PK |
    | nomp           |
    | pvp            |
    | pap            |
    | qtestockp      |
    | qteminp        |
    | qtemaxp        |
    | image          |
    | id_catcdep  FK |
    +----------------+
    Voici un enregistrement type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    nump=ch01
    nomp=Chaussures noires
    pvp=80.00
    pap=50.00
    qtestockp=50
    qteminp=5
    qtemaxp=100
    image=<img src="images/homme/chaussure.jpg">
    id_catcde=1
    Sans l'image ca marche nickel, enfin ca me fait mon tableau quoi.
    J'ai pensé qu'en mettant l'url ca serait bon mais non apparemment puisque j'ai un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in /mnt/104/sda/5/a/fringuescorot/homme.php on line 81
     
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/104/sda/5/a/fringuescorot/homme.php on line 87

    Je suis un gros débutant comme vous devez vous en douter.

    J'ai fait mon script comme ceci:

    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   // la requête
            $requete="SELECT image AS 'Image',nump AS 'Référence',nomp AS 'Libellé',qtestockp AS 'Quantité en stock',pvp AS 'Prix en euros' FROM produit WHERE produit.id_catcdep=1;";
            $resultat= mysql_query($requete);
     
       // l'en tête des colonnes du tableau
           echo "<center>";
            echo '<p /><table id="table" border="1">';
            echo "<tr>";
            for( $i=0; $i < mysql_num_fields($resultat); $i++)
                  echo "<th>".mysql_field_name($resultat, $i)."</th>";
            echo "</tr>";
    	echo "</center>";
     
       //  le parcours des lignes et des champs
            while($ligne=mysql_fetch_array($resultat))
            {    echo "<tr>";
                 for($i=0;$i< mysql_num_fields($resultat); $i++)
                     echo "<td>$ligne[$i]</td>";
                 echo "</tr>";
            }
       // fin du tableau
            echo "</table><p />";
    ?>
    Voilà.. je dois faire ca pour le bac et les oraux approchent donc je sollicite votre aide en espérant la trouver!

    Cdlt

  2. #2
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    Je vais te suggérer une petite optimisation qui vaut ce qu'elle vaut et qui à mon avis devrait résoudre ton problème au passage.

    T'as une seule image par produit et chaque produit à une clé unique. Pourquoi se fatiguer à stocker l'url du produit?

    Je te propose de virer tout simplement le champ url de ta base et dans ton tableau de faire tout simplement:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="images/homme/<?php echo $nump; ?>.jpg">

    N'oublie juste pas de renommer les fichiers image avec l'id des produits correspondant.

    Un champ de moins dans la base, une chaine de caractères en moins à transmettre à chaque échange avec la base de données et une uniformisation des noms de fichiers. Je pense que ça sera bien vu par un jury si suggéré ainsi

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Oui, et j'ai juste à renomer les images en fonction des nom de produit?

    Je vais essayer ca tout de suite.

    Merci

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Hum..
    Ta logique me paraissait évidente en la lisant même si je n'étais pas capable de la trouver moi même mais je ne parvient pas à l'utiliser..

    le code actuel est:
    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
    <?php   // la requête
            $requete="SELECT nump AS 'Référence',nomp AS 'Libellé',qtestockp AS 'Quantité en stock',pvp AS 'Prix en euros' FROM produit WHERE produit.id_catcdep=1;";
            $resultat= mysql_query($requete);
     
    		// l'en tête des colonnes du tableau
           echo "<center>";
            echo '<p /><table id="table" border="1">';
            echo "<tr><td>Image</td>";
            for( $i=0; $i < mysql_num_fields($resultat); $i++)
                  echo "<th>".mysql_field_name($resultat, $i)."</th>";
            echo "</tr>";
    	echo "</center>";
     
       //  le parcours des lignes et des champs
            while($ligne=mysql_fetch_array($resultat))
            {    echo "<tr>";
    			echo '<td><img src="images/homme/<?php echo $nump; ?>.jpg"></td>';
                 for($i=0;$i< mysql_num_fields($resultat); $i++)
                     echo "<td>$ligne[$i]</td>";
                 echo "</tr>";
            }
       // fin du tableau
            echo "</table><p />";
    ?>
    J'ai bien sur renommé mes images..

    J'ai la nouvelle colonne avec l'en-tête mais les cases sont vides et après les données du tableaux sont bien remplies.

    Je continue à chercher..

    Je rappelle que je suis un gros débutant, c'est ma 1année que je touche à ca, j'aime bien me creuser la tête mais j'aime surtout que ca fonctionne donc patapay svp

    Merci en tout cas

    J'y retourne en attendant la réponse qui va m'ouvrir les yeux devant un bug basique sans doute..

    Merci

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Bon bin je crois que mon problème c'est la définition de la variable $nump

    Comment faire pour quelle corresponde au numero produit de la ligne?

    Faut il utiliser une boucle?

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Code php : 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   // la requête
            $requete="SELECT nump AS 'Référence',nomp AS 'Libellé',qtestockp AS 'Quantité en stock',pvp AS 'Prix en euros' FROM produit WHERE produit.id_catcdep=1;";
            $resultat= mysql_query($requete);
     
    		// l'en tête des colonnes du tableau
           echo "<center>";
            echo '<p /><table id="table" border="1">';
            echo "<tr><td>Image</td>";
            for( $i=0; $i < mysql_num_fields($resultat); $i++)
                  echo "<th>".mysql_field_name($resultat, $i)."</th>";
            echo "</tr>";
    	echo "</center>";
     
       //  le parcours des lignes et des champs
            while($ligne=mysql_fetch_array($resultat))
            {    echo "<tr>";
    			echo '<td><img src="images/homme/<?php echo $ligne["image"]; ?>.jpg"></td>';
                 for($i=0;$i< mysql_num_fields($resultat); $i++)
                     echo "<td>$ligne[$i]</td>";
                 echo "</tr>";
            }
       // fin du tableau
            echo "</table><p />";
    ?>

    Explications :

    Tu utilise un mysql_fetch_array(), il faut donc utiliser les noms des champs ! (c'est plus simple )

    vu que $ligne = mysql_fetch_array(), pour récupérer le nom de ton image il faut écrire :

    $ligne["image"] (vu que ton champ s'appelle "image")

  7. #7
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    Mieux, à la place de mysql_fetch_array(), utilise mysql_fetch_assoc(), elle est faite pour ça après tout. Ceci dit, ça ne changera pas grand chose

    Pour le reste je suis ok avec darkstar123456

  8. #8
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par gwinyam Voir le message
    Mieux, à la place de mysql_fetch_array(), utilise mysql_fetch_assoc(), elle est faite pour ça après tout. Ceci dit, ça ne changera pas grand chose

    Pour le reste je suis ok avec darkstar123456
    c'est pas mysql_fetch_array() justement qui renvoie un numéro de colonne et c'est pour ça qu'il est plus lent que le mysql_fetch_assoc() ?

    Me souviens pu Perso, je n'utilise plus que mysql_fetch_assoc() et avec les noms des champs

  9. #9
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    mysql_fetch_array renvoie effectivement un tableau avec des index numériques. Alors que mysql_fetch_assoc renvoie un tableau associatif "Nom de la colonne" => "Valeur de la colonne".

    Tu peux aussi passer un attribut optionnel à mysql_fetch_array pour qu'il se comporte comme mysql_fetch_array.

  10. #10
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par gwinyam Voir le message
    mysql_fetch_array renvoie effectivement un tableau avec des index numériques. Alors que mysql_fetch_assoc renvoie un tableau associatif "Nom de la colonne" => "Valeur de la colonne".

    Tu peux aussi passer un attribut optionnel à mysql_fetch_array pour qu'il se comporte comme mysql_fetch_array.
    Correction :
    Tu peux aussi passer un attribut optionnel à mysql_fetch_array pour qu'il se comporte comme mysql_fetch_assoc.



    yep ça je sais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_fetch_array($result, MYSQL_ASSOC)
    ^^

  11. #11
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Bonjour et merci de vos réponses..

    Mais encore une fois je n'arrive pas à le faire fonctionner :/

    Ne faut il pas rajouter image dans la requête pour pouvoir utiliser $ligne['image']?

    Etant donné que j'ai renommer mes image en fonction des codes de produits, n'est il pas plus simple de prendre $ligne['nump'] comme le préconisait gwinyam?
    Cela me permettrait d'avoir un champ en moins à remplir,c'est pas plus mal?

    Enfin, que ce soit avec $ligne['image'] ou $ligne['nump'], rien ne veut s'afficher, dans les cases j'ai un lien mort d'image et .jpg"> :S

    J'ai réussi a avoir le résultat en ajoutant le champ image à la requete sauf que ca m'embête d'avoir du code html dans un champ et de plus avec mon formulaire pour ajouter les produit, je ne saurais pas comment ajouter une image sur le serveur et mettre le code html dans mon champ image :S

    Merci de m'aider c'est sympa

    a tres vite

  12. #12
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    Peux-tu nous mettre tout ton code s'il te plait? Enfin ce qui est concerné par ce problème?

    Je persiste sur la solution de ne pas utiliser de champ image en base. Cela nécessite un peu de code que le concerné ne connait pas forcément, mais bon, il est capable d'apprendre je pense

  13. #13
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Voici le programme actuel:
    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   // la requête
            $requete="SELECT nump AS 'Référence',nomp AS 'Libellé',qtestockp AS 'Quantité en stock',pvp AS 'Prix en euros' FROM produit WHERE produit.id_catcdep=1;";
            $resultat= mysql_query($requete);
     
    		// l'en tête des colonnes du tableau
        echo "<center>";
            echo '<p /><table id="table" border="1">';
            echo "<tr><td>Image</td>";
    			for( $i=0; $i < mysql_num_fields($resultat); $i++)
                  echo "<th>".mysql_field_name($resultat, $i)."</th>";
            echo "</tr>";
    	echo "</center>";
     
       //  le parcours des lignes et des champs
            while($ligne=mysql_fetch_array($resultat))
            {   
    			echo "<tr>";
    				echo '<td><img src="images/produit/<?php echo $ligne["nump"]; ?>.jpg"></td>';
    					for($i=0;$i< mysql_num_fields($resultat); $i++)
    						echo "<td>$ligne[$i]</td>";
                echo "</tr>";
            }
       // fin du tableau
            echo "</table><p />";
    ?>
    Je l'ai fait en fonction de vos réponses et ce que j'ai compris..

    Personnellement je voulais partir sur ton idée mais je n'y arrivais pas et quand j'ai demander on m'a dit une autre solution donc bon j'essaye tout moi

    C'est vrai que je ne connais pas grand chose mais j'apprends vite et j'ai quelques base et si on m'explique je suis attentif.

    Merci!

  14. #14
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    Tu t'es trompé ici:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td><img src="images/produit/<?php echo $ligne["nump"]; ?>.jpg"></td>';
    Essaie en remplaçant par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<td><img src="images/produit/<?php echo $ligne["Référence"]; ?>.jpg"></td>';

    Comme ça après dans ton formulaire d'ajout, tu mets un champ file, et en enregistrant le fichier au bon endroit, tu le renommes avec l'identifiant du fichier et tout est niquel

  15. #15
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Non ca ne fonctionne pas.
    Mais 'Référence' c'est juste l'alias de nump pour éviter d'avoir nump en en-tête de tableau qui ne serait pas très simple..
    :S

    Merci !!

  16. #16
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    ça te retourne quoi?

  17. #17
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Ca ne me retourne rien, il y a juste : .jpg"> Dans les cases ou il est censé y avoir l'image. :/


  18. #18
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Ton code n'est pas correct !!

    Tu ne peux pas faire 2 fetch avec le meme mysql_query() !!!

    Tu fais quelque chose de ce genre :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $req = "SELECT * FROM table ";
    $q = mysql_query($req) or die($req."<br />".mysql_error());
    while( $r = mysql_fetch_assoc($q) ) {
    	echo "<p>".$r["champ"]."</p>";
    }
     
    while( $r2 = mysql_fetch_assoc($q) ) {
    	echo "<p>".$r2["champ"]."</p>";
    }

    Et tu ne peux pas, il te faut refaire un mysql_query(), donc quelque chose comme ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $req = "SELECT * FROM table ";
    $q = mysql_query($req) or die($req."<br />".mysql_error());
    while( $r = mysql_fetch_assoc($q) ) {
    	echo "<p>".$r["champ"]."</p>";
    }
    $q = mysql_query($req) or die(mysql_error());
    while( $r2 = mysql_fetch_assoc($q) ) {
    	echo "<p>".$r2["champ"]."</p>";
    }

  19. #19
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    C'est bon ca fonctionne

    Je ne savais pas qu'on ne pouvais pas faire 2 fetch avec la même requête :/

    Merci beaucoup de ton aide, je vais continuer mon petit bonhomme de chemin maintenant et espérant que j'aurais mon bac

    Je vais mettre Résolu maintenant.

    Merci infiniment une fois de plus!

    On se reverra sans doute pour de nouvelles aventures.

    (PS: désolé pour les erreurs de gros débutant qui on du te paraitre évidentes)

    Cordialement
    Jerem

  20. #20
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par jeremdu94 Voir le message

    (PS: désolé pour les erreurs de gros débutant qui on du te paraitre évidentes)

    Cordialement
    Jerem
    On est tous passé par là

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

Discussions similaires

  1. [MySQL] problème remplissage liste dynamique php mysql
    Par jeinny dans le forum PHP & Base de données
    Réponses: 28
    Dernier message: 25/05/2009, 17h32
  2. [DOM] menu dynamique php mysql javascript
    Par maxland dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/03/2009, 14h02
  3. Menu dynamique PHP/MySQL
    Par okoweb dans le forum Langage
    Réponses: 12
    Dernier message: 07/03/2009, 08h46
  4. [MySQL] Menu dynamique PHP / MySQL CSS
    Par mouchagheb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/06/2008, 11h33
  5. Réponses: 10
    Dernier message: 22/03/2007, 08h36

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