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 :

panier et commande d'achat [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut panier et commande d'achat
    salut
    je veux faire un panier d'achat en ligne, mais il ne l'est pas vraiment, il n'y aura pas de paiement en ligne (c'est un projet d'étude et non pas site à hébérger)

    J'ai consulté le tuto sur la création d'un panier en php: pour avoir une petite idée sur l'organisation du travail, mais la différence c'est que je veux utiliser la base de donnée (création avancée d'un panier en php et Mysql).

    Cependant, je ne trouve pas comment procéder à cela.
    Quelles sont les principaux différences entre création simple et avancés? Seulement stockés les $_POST['..'] dans un champ spécifié de la table ou y'a t'ils d'autres changements?

    Pouvez vous m'éclairez le chemin?
    Merci

    NB: je suis de niveau débutante

  2. #2
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    En se basant sur la fonction ajouterPanier() du tutoriel j'ai fais ma la meme fonction mais en utilisant la base donnée.
    table: panier
    champ: -produit
    -quantite
    -prix
    -id_client
    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
    function ajouterArticle($libelleProduit,$qteProduit,$prixProduit){
     
    if (creationPanier())
    {
     
    $requete = $bdd->query('SELECT produit, quantite, prix FROM panier WHERE produit =\'' . $libelleProduit . ' \'');
     
     
      if ($positionProduit = $requete->fetch() )
      {
     
       $qteinitial = $_GET['quantite'];
       $qte = $qteinitial + $qteProduit;
       $rep = $bdd->prepare('INSERT INTO panier (quantite) VALUES (?)');
       $rep->execute((array($qte)));
     
     
      }
      else
      {
       $req = $bdd->prepare('INSERT INTO panier (produit, quantite, prix) VALUES (?, ?, ?)');
       $req->execute((array($libelleProduit, $qteProduit, $prixProduit)));
      }
     
    }
     
    else
      echo "Un problème est survenu veuillez contacter l'administrateur du site.";
    }
    Est ce correcte comme ça? ou c'est pas la peine de changer la fonction intiale au tuto?
    Comme aussi, j'ai pas su comment correspondre le nouveau panier au coordonnées du client, càd j'ai pas su comment correspondre id_client avec la table client qui contient le username, password et le nom du client connecté au site (session en cours)

    Merci de me fournir de l'aide afin que je corrige les fautes et que je puisse terminer les autres fonctions après avoir compris.

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam ; si tu veux matérialisé ton panier c'est simple , il faut reprendre les champs existant dans la table et les mètrent dans le paniers ensuite tu les insert dans ta table après confirmation du client.
    je crois aussi qu'il te manque la date c'est important. je ne suis expert dans la matière mais juste un avis.
    a propos si ta bdd est en innodb , je crois qu'il faut passer par les transactions.

  4. #4
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Citation Envoyé par redoran Voir le message
    a propos si ta bdd est en innodb , je crois qu'il faut passer par les transactions.
    Bonjour,
    je n'ai pas compris innodb.
    et est ce que le code que j'ai mis est correcte?
    merci

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    je n'ai pas compris innodb.

    Recherche du coté GG, genre MySQL InnoDB et MyISAM.
    Essai de voir les différences qu'il y a entre ces 2 là, leur avantages et inconvénients.
    Regarde aussi quel est le moteur de MySQL est utilisé pour ta Bdd, tes tables.

    et est ce que le code que j'ai mis est correcte?
    Théoriquement non étant donné que le panier n'est pas lié à un client, et c'est apparemment ce que tu souhaiterais faire.
    Pour lier la table "panier" à la table "clients", suffit de rajouter un champ "id_client" dans la table "panier".

    Dans ton projet d'étude n'est-il pas prévu toute une partie pour la conception de Bases De Données ?
    Faire du Merise par exemple ? (de l'UML peut être ?)
    C'est théoriquement indispensable, il y a des choses qui ne se devine pas, où alors ça prendra un temps fou avant de l'apprendre de manière auto-didacte.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = $bdd->query('SELECT produit, quantite, prix FROM panier WHERE produit =\'' . $libelleProduit . ' \'');
    Ceci par exemple est théoriquement une erreur de conception.
    Normalement il doit avoir un champ "id_produit" comme clé primaire, et pour récupérer un produit on se basera sur ce champ "id_produit", et non selon son libellé.
    D'une part c'est plus performant, une Bdd est plus rapide quand il s'agit de nombre entier, puis une clé primaire est un index, là encore l'accès à une donnée sera plus performant.
    Puis faire référence à un entier comme paramètre est nettement plus simple à vérifier/filtrer qu'une chaine de caractère, le coté applicatif y gagne en fiabilité, simplicité.
    Il peu très bien avoir 2 produits avec un même libellé, si c'est le cas ici ce sera source de bug.
    Et enfin, faire une requête préparée serait bien mieux que de l'exécuter directement. Il y a un paramètre, donc un risque d'injection SQL persistera toujours.


    Concernant ce tuto.
    Ne remarques tu rien sur la manière de structurer le tableau $_SESSION ?
    Est-il utile, judicieux, nécessaire d'enregistrer le prix des produits dans le panier ?
    D'après toi, comment ferait-on pour gérer le panier pour un internaute non identifié comme client (donc avec ou pas de compte client de créé) et pour un internaute identifié (un client cette fois) ?

  6. #6
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Salut,
    Recherche du coté GG, genre MySQL InnoDB et MyISAM.
    Essai de voir les différences qu'il y a entre ces 2 là, leur avantages et inconvénients.
    Regarde aussi quel est le moteur de MySQL est utilisé pour ta Bdd, tes tables.
    est-il necessaire que je comprenne ceci pour faire un panier, sachant que comme jai dis c'est juste pour la forme c'est pas un systeme de paiement en ligne.

    Théoriquement non étant donné que le panier n'est pas lié à un client, et c'est apparemment ce que tu souhaiterais faire.
    Pour lier la table "panier" à la table "clients", suffit de rajouter un champ "id_client" dans la table "panier".
    Effectivement j'ai mis un id_client dans la table "panier" mais j'ai pas su comment faire après

    Dans ton projet d'étude n'est-il pas prévu toute une partie pour la conception de Bases De Données ?
    Faire du Merise par exemple ? (de l'UML peut être ?)
    C'est théoriquement indispensable, il y a des choses qui ne se devine pas, où alors ça prendra un temps fou avant de l'apprendre de manière auto-didacte.
    Rien de prévu, d'ailleurs on n'a rien étudié concernant les bases de données, etc. Juste le prof nous a demandé de faire un système d'achat mais sans paiement en ligne, il n'a pas obligé d'utiliser une base de donnée pour cela.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = $bdd->query('SELECT produit, quantite, prix FROM panier WHERE produit =\'' . $libelleProduit . ' \'');
    Ceci par exemple est théoriquement une erreur de conception.
    Normalement il doit avoir un champ "id_produit" comme clé primaire, et pour récupérer un produit on se basera sur ce champ "id_produit", et non selon son libellé.
    D'une part c'est plus performant, une Bdd est plus rapide quand il s'agit de nombre entier, puis une clé primaire est un index, là encore l'accès à une donnée sera plus performant.
    Puis il peu très bien avoir 2 produit avec un même libellé, si c'est le cas ici ce sera source de bug.
    Tout cela semble un grand travail surtout ça demande du temps et moi je suis vraiment préssée :\, y'a t'il un autre moyen pour m'épargner de cette méthode?

    Concernant ce tuto.
    Ne remarques tu rien sur la manière de structurer le tableau $_SESSION ?
    Est-il utile, judicieux, nécessaire d'enregistrer le prix des produits dans le panier ?
    D'après toi, comment ferait-on pour gérer le panier pour un internaute non identifié comme client (donc avec ou pas de compte client de créé) et pour un internaute identifié (un client cette fois) ?
    Je compte faire juste pour un internaute identifié.

    Merci pour votre attention

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    est-il necessaire que je comprenne ceci pour faire un panier, sachant que comme jai dis c'est juste pour la forme c'est pas un systeme de paiement en ligne.
    Le paiement en ligne n'a rien à voir.
    A partir du moment où on utilise une Bdd, savoir le BABA sur le choix de celle est à mon sens indispensable.

    T'inviter à faire cette recherche sur ces 2 moteurs MySQL (MyISAM, InnoDB) devrait t'amener à connaitre la différence entre une Bdd non relationnelle et relationnelle.
    -> SGBD et SGBDR.
    Il y a un minimum à savoir, et ça j'y peux rien.


    Rien de prévu, d'ailleurs on n'a rien étudié concernant les bases de données, etc. Juste le prof nous a demandé de faire un système d'achat mais son paiement en ligne, il n'a pas obligé d'utiliser une base de donnée pour cela.
    Pourquoi utiliser une Bdd dans ces conditions ?

    Tout cela semble un grand travail, y'a t'il un autre moyen pour m'épargner de cette méthode?
    Non, c'est plus simple justement.
    Peut être ne le perçois tu pas.
    Quand on conçoit une Bdd, on crée des clés primaires et clés étrangères, et c'est leur relations entre elles qui permet de représenter toute une activité et les données qui vont avec.
    Le fonctionnement d'une Bdd est purement technique.
    Un panier, un site e-commerce, un logiciel de compta, etc ... quelque soit l'activité le principe/concept est le même.

    Si on crée une Bdd sans se référer à ces identifiants (clé primaire, clé étrangère), alors ça coincera tôt ou tard.
    Tout cela s'apprend.
    Mais comme cela ne serait pas encore fait, il est normal que tout ce que je te racontes te semble flou, peut être même complexe.

    Cependant, il nous sera impossible de tout t'expliquer.


    Bref ...
    Tu demande si le code est bon.
    Je te réponds pourquoi il n'est pas bon.
    C'est à toi de voir ensuite.

  8. #8
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Bref ...
    Tu demande si le code est bon.
    Je te réponds pourquoi il n'est pas bon.
    C'est à toi de voir ensuite.
    D'accord merci, j'utiliserai le code fourni au tuto.

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    D'accord merci, j'utiliserai le code fourni au tuto.
    Essai par exemple de répondre à ces 2 questions là, elles ne sont pas anodines.
    Vu que tu est en étude, avoir un oeil critique sur un code est toujours bon (à mon avis en tout cas).
    Ne remarques tu rien sur la manière de structurer le tableau $_SESSION ?
    Est-il utile, judicieux, nécessaire d'enregistrer le prix des produits dans le panier ?
    Mais comme d'hab, tu fais comme tu veux.

  10. #10
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Bon je remarque j'il y a deux identifient du tableau $_session: il y a 'panier' et ce que contient le panier , comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $_SESSION['panier']['libelleProduit'] = array();
    Je pense qu'ils sont deux tableau unis dans un seul

    Pour la 2ème question, oui je pense c'est nécessaire de mettre le prix du produit, pour chaque produit au panier on affiche son prix.

  11. #11
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Concernant le prix, il est forcément défini quelque part (Bdd, ou autre, peu importe), mais admettons dans une Bdd.

    Imaginons que je suis sur ton site, j'ajoute à ce moment même un produit dans le panier. Le prix sera celui défini dans la Bdd actuellement.
    Ensuite, juste après tu changes le prix de ce même produit.
    Puis ensuite, après ce changement de prix, j'affiche le contenu de mon panier.

    Quel prix vais-je voir, le prix de départ ou le nouveau prix modifié ?
    Puis même s'il n'y pas de paiement, quel sera le prix lors de la validation (commande), celui de départ ou le nouveau ?

    Il y a quelque chose de particulier selon la manière de gérer le panier non ?


    On retrouve aussi à peu près la même chose pour la quantité mise dans le panier, entre la quantité en stock (défini dans le produit) et la quantité mise dans le panier.
    S'il y a une quantité de 2 dans le produit (le stock) et qu'un ajoute 3 comme quantité dans le panier, faut il l'accepter ?
    Ici, on se retrouvera avec un stock négatif (-1) si la commande est faite.
    Là aussi il y a quelque chose de particulier, non ?


    Maintenant, faut voir jusqu'où cet exercice vous demande de gérer un panier.


    Pour ce qui est de la structure du tableau de session, on peu le faire au moins de 2 façons.
    1/ Celle du tuto.
    2/ Et comme ceci aussi : (c'est schématique)
    $_SESSION['panier'][id_produit]['quantite'] (valeur de la quantité : 2 par exemple).
    (id_produit étant la valeur du produit, un identifiant : 1, ou 5, etc ...).
    Les 2 sont tout aussi valables à mon sens.
    Après, à chacun selon sa vison la dessus de plutôt adhérer à l'une que l'autre.

    La 2ème est théoriquement plus simple à gérer les produits, car (pour exemple) il n'y a plus à rechercher un produit selon une position (le tuto), l'identifiant défini le produit.

  12. #12
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    [quote]
    Citation Envoyé par RunCodePhp Voir le message
    Concernant le prix, il est forcément défini quelque part (Bdd, ou autre, peu importe), mais admettons dans une Bdd.

    Imaginons que je suis sur ton site, j'ajoute à ce moment même un produit dans le panier. Le prix sera celui défini dans la Bdd actuellement.
    Ensuite, juste après tu changes le prix de ce même produit.
    Puis ensuite, après ce changement de prix, j'affiche le contenu de mon panier.

    Quel prix vais-je voir, le prix de départ ou le nouveau prix modifié ?
    Puis même s'il n'y pas de paiement, quel sera le prix lors de la validation (commande), celui de départ ou le nouveau ?

    Il y a quelque chose de particulier selon la manière de gérer le panier non ?


    On retrouve aussi à peu près la même chose pour la quantité mise dans le panier, entre la quantité en stock (défini dans le produit) et la quantité mise dans le panier.
    S'il y a une quantité de 2 dans le produit (le stock) et qu'un ajoute 3 comme quantité dans le panier, faut il l'accepter ?
    Ici, on se retrouvera avec un stock négatif (-1) si la commande est faite.
    Là aussi il y a quelque chose de particulier, non ?
    Ah oui c'est vrai, donc il ne faut pas mettre le prix que lors de la commande.

    Maintenant, faut voir jusqu'où cet exercice vous demande de gérer un panier.


    Pour ce qui est de la structure du tableau de session, on peu le faire au moins de 2 façons.
    1/ Celle du tuto.
    2/ Et comme ceci aussi : (c'est schématique)
    $_SESSION['panier'][id_produit]['quantite'] (valeur de la quantité : 2 par exemple).
    (id_produit étant la valeur du produit, un identifiant : 1, ou 5, etc ...).
    Les 2 sont tout aussi valables à mon sens.
    Après, à chacun selon sa vison la dessus de plutôt adhérer à l'une que l'autre.

    La 2ème est théoriquement plus simple à gérer les produits, car (pour exemple) il n'y a plus à rechercher un produit selon une position (le tuto), l'identifiant défini le produit.
    La 2ème m'a parus plus simple, mais j'ai une petite question:
    supposant que panier est une table qui contient: id_produit/quantité
    en faisant $_SESSION['panier'] est ce que je récupère le contenu du panier dans la base (normalement non je crois)?

  13. #13
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Ah oui c'est vrai, donc il ne faut pas mettre le prix que lors de la commande.
    Pas forcément.
    Rien empêche au niveau des ces spécifications, dans le cahier des charges, dans le manuel ... peu importe, de cadrer parfaitement ce point, comme :
    Toute modifications de prix, libellé, etc ... j'en passe et des meilleurs sera fait à des heures de faible affluence/trafique, voire aucun.
    Ou même que le site prévoit de se mettre en mode "maintenance", donc plus aucun trafique possible et les modification seront fait à ce moment.

    Donc on ici ce sera possible de procéder comme le tuto sans risque, pour cet aspect là du moins.

    Ceci dit pas vraiment, et là c'est des choses qu'on apprend lors de la conception de Bdd.
    Normalement il ne faut pas créer de données redondantes (dupliquées), ça rend plus compliquées la gestion de ces données, ça augmente l'instabilité de la Bdd.
    Enregistrer le prix pour un produit dans une table "panier" et enregistrer ce même prix pour le même produit dans une autre table "produits" fait qu'il y aura toujours un risque d'incohérence entre ces 2 prix, d'avoir 2 prix différent pour un même produit.
    C'est pour cette raison que l'on se base toujours (ou du moins au maximum) uniquement sur des identifiant, on fait des jointure pour "piocher" les données là où elles sont (et 1 fois -> 1 prix, un nom, un libellé, etc ...).


    Ce n'est pas toujours vrai, attention, il y a des cas particuliers, et c'est le cas pour un site type e-commerce pour certains cas.
    Mais je n'irais pas plus loin, il y a beaucoup trop à dire.


    Mais disons que ce n'était pas vraiment pour ça mes questions.
    C'est juste pour dire qu'il faut faire attention aux codes sur le Net ou ailleurs, il faut avoir un oeil critique, sinon ça peut être le meilleur comme le pire.
    Sur le Net il y a à boire et à manger ... attention.

    en faisant $_SESSION['panier'] est ce que je récupère le contenu du panier dans la base ?
    Non, uniquement ce que contient la session, du moins le contenu de la variable de session "panier".

    Ca sous entend que le panier est stocké dans 2 "support" (si on peu dire) différent en parallèle.
    Il faudrait théoriquement synchroniser les 2 pour éviter des incohérences.


    Mais si ce qui est demandé au niveau de l'exercice ne demande pas de "pousser" les choses aussi loin, alors faut faire simple, comme un peu le tuto par exemple.
    Je ne sais pas, ça c'est à toi de voir.

  14. #14
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    bonsoir,
    bon voilà la table que j'ai fais pour gérer le panier:
    table panier:
    id_produit : qui sera utiliser pour lier au caractéristique du produit choisi (prix, quantité disponible) /
    id_client : référence sur les détails du client /
    quantité (quantité demandé)
    Est ce correcte comme un choix?
    le problème c'est que je dois à chaque ajout d'un produit dans le panier, faire en même temps la jointure entre la table des produits et la table du client, est ce possible?
    Je trouve un problème pour ajouter un nouveau produit, comment faire l'insertion? j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $rep = $bdd->prepare('INSERT INTO panier (id_produit, id_client) VALUES (?, ?) ');
    mais j'ai pas su comment affecter id_produit et id_client.

  15. #15
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rep = $bdd->prepare('INSERT INTO panier (id_produit, id_client) VALUES (?, ?) ');
    Des exemples de code t'avais été donné dans d'autres topics.
    Puis n'oublie pas qu'il y a un forum dédié à PDO, c'est autant d'exemples de code : SGBD - PDO

    Pour insérer un panier pour un client, il faut que le client soit d'abord identifié, sinon ce ne sera pas possible.
    Il faut donc que l'identifiant du client identifié soit mémorisé quelque part, comme dans une session : genre $_SESSION['id_client'].

    Pour le produit, l'identifiant doit être connu, il doit provenir d'un paramètre GET ou POST (d'un lien ou formulaire) : genre : $_POST['id_produit']

    A partir du moment où ces éléments là sont bien obtenu, je ne vois pas où est la difficulté de faire la requête SQL.


    e problème c'est que je dois à chaque ajout d'un produit dans le panier, faire en même temps la jointure entre la table des produits et la table du client, est ce possible?
    Non, il n'y a pas de jointure dans une requête d'insertion (INSERT INTO), ce n'est pas possible, ce n'est pas logique de vouloir le faire.
    Comme je l'ai expliqué ci-dessus, les données à insérer doivent être connues avant insertion (produit, client, quantité, etc ...), quitte à les récupérer avant quelque part (session, Bdd, fichier, etc ...).

  16. #16
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam ;
    mais j'ai pas su comment affecter id_produit et id_client.
    exemple :
    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
     
    .....
    $insertdata = $cbd->prepare("INSERT INTO conteneur (cdet,cdc,datedec,m,f) VALUES(:cdet,:cdc,:datedec,:m,:fm8,:f8)");
    try
    {
    $cdet=$_SESSION['cdet'];
    $cdc=$_SESSION['cdc'];
    $insertdata->bindparam(':cdet',$cdet, PDO::PARAM_STR); // chaine de caractéres
     
    $insertdata->bindParam(':cdc',$cdc, PDO::PARAM_STR); // chaine de caractéres
    }
    $insertdata->execute();
    }
    catch ( Exception $e )
    {
    echo 'Erreur de requête : ', $e->getMessage();
     
    }	
    .......

  17. #17
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Il faut donc que l'identifiant du client identifié soit mémorisé quelque part, comme dans une session : genre $_SESSION['id_client'].
    Il faut tout d'abord associer $_SESSION['id_client'] à l'id client correspondant dans la table client , donc j'ai pensé à faire comme suit:
    - il faut que je cherche l'id du client en faisant une requête pdo qui sélecte l'id ou (WHERE) le username correspond à $_SESSION['username'].
    Correcte?

  18. #18
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    voilà le code que j'ai fais pour ajouter un produit au panier:
    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
    $rep = $bdd->prepare('INSERT INTO panier (id_produit, quantite, id_client) VALUES (:id_produit, :quantite, :id_client) ');
    	 $id_produit = $_GET['id_produit'];
    	 $quantite = $_SESSION['quantite'];
     
    	 //extraire id_client de la table 'client'
    	 $_SESSION['username'] = $_POST['username']; //extraire le nom de l'utilisateur connecté à partir du formulaire de connexion
    	 $username = $_SESSION['username'];
    	 $req_id = $bdd->prepare('SELECT id,username FROM client WHERE username = :username')
    	 $req_id = bindValue(':username', $username, PDO::PARAM_STR);
    	 $req_id->execute();
    	 $client = $req->fetchALL(PDO::FETCH_ASSOC);
    	 $id_client = $client['id'];
    	 // retour à la requete $req pour affichage du panier adéquat
    	 $req = bindValue(':id_produit', $id_produit, PDO::PARAM_INT);
    	 $req = bindValue(':quantite', $quantite, PDO::PARAM_STR);
    	 $req = bindValue(':id_client', $id_client,  PDO::PARAM_INT);
    	 $req->execute();

  19. #19
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    il faut que je cherche l'id du client en faisant une requête pdo qui sélecte l'id
    Non, il vaut mieux te baser directement sur l'identifiant du client identifié (genre $_SESSION['id_client']).

    Pour cela, et lors de la phase/étape de l'identification, il faudrait tout simplement rajouter cette donnée (cette variable de session id_client) dans la session, tout comme le username.
    De plus, la session sert en grande partie à ça, et non juste afficher un nom, un prénom, un username, etc ...
    Dans l'absolu, on s'en fiche du nom et du prénom du client, c'est son ID qui détermine qui il est, et tout ce qui sera lié à cette personne reposera sur cet ID (et pas autre chose).

    D'ailleurs, plusieurs clients peuvent très bien avoir le même username (nom, prénom, ou autre).
    Si on se repose la dessus ça va être un sacré problème, alors qu'il y en aura jamais avec un identifiant (qui lui à l'origine est basé d'un login et mot de passe où on fera tout pour qu'ils soient unique, sinon cela n'ira pas non plus).


    Tu as tendance à toujours vouloir te baser sur des noms, titre, etc ... c'est une erreur .
    Si tu récupères l'ID du client par rapport à un "username", tu vas avoir un problème (tôt ou tard).
    Cet id_client tu vas en avoir besoin souvent, beaucoup de choses seront basées la dessus, donc le définir/créer une bonne fois pour tout dans la session est théoriquement nécessaire.

    Vois tu pourquoi j'insiste tant sur ces identifiants ?
    C'est essentiel de comprendre ça

  20. #20
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Je comprends que c'est mieux d'utiliser l'id mais je ne trouve pas encore comment faire pour que $_SESSION['id_client'] soit le même que l'id de ce client dans la table client :\
    moi, j'ai fais ce code pour extraire l'id_client mais après avoir lu votre réponse, je pense que c'est faux puisque je me base sur username

    Comment faire? vous comprenez mon problème? j'arrive pas à envisager la correspondance entre $_SESSION['id_client'] et son id dans la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     //extraire id_client de la table 'client'
    	 $_SESSION['username'] = $_POST['username']; //extraire le nom de l'utilisateur connecté à partir du formulaire de connexion
    	 $username = $_SESSION['username'];
    	 $req_id = $bdd->prepare('SELECT id,username FROM client WHERE username = :username')
    	 $req_id = bindValue(':username', $username, PDO::PARAM_STR);
    	 $req_id->execute();
    	 $client = $req->fetchALL(PDO::FETCH_ASSOC);
    	 $id_client = $client['id'];

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/10/2011, 11h27
  2. Onglet importation dans commande d'achat
    Par beuzy dans le forum SAP
    Réponses: 0
    Dernier message: 19/07/2011, 09h46
  3. MM - Commande d'achat - tables de prix
    Par Kiefer_S dans le forum SAP
    Réponses: 1
    Dernier message: 16/06/2010, 10h24
  4. LMSW, CATT ou programme pour commande d'achat
    Par kitty2006 dans le forum SAP
    Réponses: 4
    Dernier message: 30/10/2009, 05h07
  5. smartforms pour commande d'achat
    Par kitty2006 dans le forum SAP
    Réponses: 0
    Dernier message: 05/05/2009, 08h59

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