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 :

lister des informations contenues dans une database en php


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2022
    Messages : 2
    Points : 3
    Points
    3
    Par défaut lister des informations contenues dans une database en php
    Bonjour,
    je suis débutant en php et je voudrais développer un site où il est possible de mettre en ligne des 'produits',
    j'ai une db constituée de deux tables (users, product) avec dans la table users un nombre de produits qui ne doit pas dépasser 10 (product_number) pour chaque utilisateur, et j'ai dans ma table product plusieurs produits qui ont chacun un id unique (product_id), un nom unique (product_name) et ils sont associéq à un nom d'utilisateur (seller_name).
    mon problème est le suivant :

    je voudrais afficher tous les 'produits' d'un utilisateur qui sont dans la table product grâce à une fonction.

    j'ai déjà essayé cette fonction mais sans succès car elle n'affiche que le premier produit :

    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
    function prod($user) {
        include "db_conn.php";
        $sql2 = "SELECT * FROM users WHERE user_name = '$user'";
        $result2 = mysqli_query($conn, $sql2);
        $row2 = mysqli_fetch_assoc($result2);
        $nb = 0;
        echo '<p>You have '.$row2['product_number'].' product</p><br>';
        if ($row2['product_number'] <= 10 and $row2['product_number'] > 0) {
            while ($nb !== $row2['product_number']) {
                $sql = "SELECT * FROM product WHERE seller_name = '$user'";
                $result = mysqli_query($conn, $sql);
                $row = mysqli_fetch_assoc($result);
                $oldname = $row['product_name'];
                if ($nb == 0) {
                    if ($row['seller_name'] == $user){
                        $clr = hex2rgba($row['color'], 0.3);
                        return "<div class='product' style='--clr:{$clr};--price:{$row['price']};--img:url({$row['image']});--content:{$row['content']}'><p>{$row['description']}</p></div>";
                    } else {
                        return 'error';
                    }
                    $nb = $nb + 1;
                } else {
                    if ($row['product_name'] != $oldname) {
                        if ($row['seller_name'] == $user){
                            $clr = hex2rgba($row['color'], 0.3);
                            return "<div class='product' style='--clr:{$clr};--price:{$row['price']};--img:url({$row['image']});--content:{$row['content']}'><p>{$row['description']}</p></div>";
                        } else {
                            return 'error';
                        }
                        $nb = $nb + 1;
                    } else {
                        $sql1 = "SELECT * FROM users WHERE user_name = '$user' AND product_name != $oldname";
                        $result1 = mysqli_query($conn, $sql1);
                        $row1 = mysqli_fetch_assoc($result1);
                        if ($row1['seller_name'] == $user){
                            $clr = hex2rgba($row1['color'], 0.3);
                            return "<div class='product' style='--clr:{$clr};--price:{$row1['price']};--img:url({$row1['image']});--content:{$row1['content']}'><p>{$row1['description']}</p></div>";
                        } else {
                            return 'error';
                        }
                        $nb = $nb + 1;
                    }
                }
            }
        } else {
            return '<p>Add a product!</p><br>';
        }
    }
    Merci d'avance

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Bonjour,

    plusieurs remarques :

    1- On ne fait JAMAIS de requêtes dans une boucle qui dépend d'une autre requête. C'est leur meilleur moyen de faire tomber une base de donnée.
    Imagine que tu ais 1000 utilisateurs , à chaque fois que tu ouvres ta page tu va coller 1001 requêtes à ta BDD alors qu'une seule suffit :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM products as p INNER JOIN users as u ON p.seller_name = u.seller_name WHERE u.seller_name = 'X'

    Il est possible d'ajouter une notion de LIMIT si besoin de filtrer le nombre de produit.

    2- Lier un produit à un utilisateurs via le nom de l'utilisateur c'est bof. Préférer utiliser un index numérique unique pour ce genre de chose.

    3- Eviter les SELECT * , préférer une dénomination claire des colonnes à extraire.

    La limite de produit concerne elle juste de l'affichage ? Ou alors un utilisateur est il limiter également dans l'insertion ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Salut ! Je ne comprends pas bien pourquoi la fonction est si lourde.

    je voudrais afficher tous les 'produits' d'un utilisateur qui sont dans la table product grâce à une fonction.
    Pour obtenir les produits de $user, le corps de ta fonction pourrait être :

    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
    // Il est important d'échapper les paramètres de ta requête
    $user = mysqli_real_escape_string($conn, $user);
     
    // Au lieu d'un nom, pourquoi ne pas utiliser un ID utilisateur ?
    $sql = <<<SQL
        SELECT ALL product_id, product_name, content, description, price, color, image
        FROM product
        WHERE seller_name = '$user'
        SQL;
     
    $result = mysqli_query($conn, $sql);
     
    // On récupère tous les produits de $user d'un coup dans un tableau
    // À ne pas faire si tu as des gros jeux de données :)
    $products = mysqli_fetch_all($result, MYSQLI_ASSOC); // Tableau de 0 à 10 produits
     
    echo '<p>You have ', count($products), ' product(s)</p>';
     
    foreach ($products as $product) {
        echo '<div class="product" ...>', htmlspecialchars($product['description']), '</div>';
    }

    Important :
    -- Ce n'est pas très bon d'immerger du HTML dans du PHP et dans une fonction, généralement on essaie de séparer tout cela
    -- Pour l'accès à la base de données, abandonne mysqli et utilise plutôt PDO => https://php.net/pdo
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2022
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    merci beaucoup pour vos précieux conseils et pour le code, mon problème est résolu.

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

Discussions similaires

  1. Extraction des informations contenues dans varargin
    Par Phelix2003 dans le forum MATLAB
    Réponses: 9
    Dernier message: 28/09/2007, 10h31
  2. Réponses: 0
    Dernier message: 24/07/2007, 13h22
  3. Sauver et restaurer des informations contenues dans un fichier
    Par lilimilou29 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 14/06/2007, 20h08
  4. Réponses: 4
    Dernier message: 23/07/2006, 20h42
  5. Réponses: 2
    Dernier message: 12/01/2004, 13h56

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