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

Langage PHP Discussion :

Empêcher l'ajout ultérieur d'un produit dans un panier


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Points : 44
    Points
    44
    Par défaut Empêcher l'ajout ultérieur d'un produit dans un panier
    Bonsoir, j'ai un petit problème avec mon catalogue de produits.

    Dès que l'utilisateur ajoute un produit dans son panier, je veux faire en sorte que ce produit ne puisse plus être ajouté ultérieurement.

    (Exemple : si il ajoute le produit A au panier, alors quand il revient sur le catalogue, un message indique que ce produit figure déjà dans le panier)


    Mon code semble fonctionner, mais vraiment bizarrement, puisqu'il marche seulement pour le 1er produit (du moins, d'après mes tests).


    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
    //Code PHP :
     
    <?php
    $reqCat = odbc_do($connexion, "SELECT * FROM produits");		
    $afficheCat = odbc_fetch_array($reqCat);
    $verif=odbc_do($connexion, "SELECT * FROM panier where id_membre = '" . $_SESSION["id_user"] . "'");
    $verifPanier=odbc_fetch_array($verif);
    echo"
    
          <table width='70%' cellspacing='0' cellpadding='2' align='center'>"; //border='black'
     
    while ($afficheCat  != FALSE)
       {
    	  $idPanierProd=$verifPanier['id_prod'];
    	  $numProd = $afficheCat['numProd'];
          $nomProd = $afficheCat ['nomProd'];
          $prixProd = $afficheCat ['prixProd'];
          $imageProd = $afficheCat ['imageProd'];
     
     
          echo"
              <tr bgcolor='#FF77CC'>
                <td width='17%'><b>nom du produit</b></td>
                <td>$nomProd</td>
                <td><img>$imageProd</img></td>
    			<td rowspan='2'>";if ($idPanierProd!=$numProd) { echo "<a href=\"index2.php?affiche=ajoutpanier&id=$numProd\">ajouter au panier</a>" ;} else {echo "article déja ajouté";} echo"</td>        </tr>
            <tr>
                <td><b>Prix</b></td>
                <td>$prixProd ?</td>
            </tr>
    		
    		<tr><td><br></td></tr>
    
              ";
     
     
     
    	  $verifPanier=odbc_fetch_array($verif);
          $afficheCat = odbc_fetch_array($reqCat);
       }
    ?>
     
    //FIN DU CODE
    Voyez vous d'où provient l'erreur ?

    Corfialement,
    Matt

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    $verifPanier va être un tableau du genre
    0=>array("id"=>1, "nom"=>xxxx),
    1=>array("id"=>2, "nom"=>yyyy)
    et non pas un tableau indexé par l'id du produit.

    tu peux controler ca en faisant print_r($verifPanier);

    Tu peux faire comme cela :

    recuperer un tableau avec les id du panier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $verif=odbc_do($connexion, "SELECT id_prod FROM panier where id_membre = '" . $_SESSION["id_user"] . "'");
    while ($row=odbc_fetch_array($verif)) {
     $verifPanier = $row['id_prod'];
    }
    regarder si l'id du produit est dans le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (in_array($idPanierProd,$verifPanier))
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Points : 44
    Points
    44
    Par défaut
    Merci pour votre réponse.

    Cependant, j'obtiens cette erreur :

    Warning: in_array(): Wrong datatype for second argument.


    Etant novice, j'ai du mal à savoir pourquoi ça plante

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    Peux tu faire !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($verifPanier);
    Cela te permettra de connaitre le type de données de $verifPanier car il semble que ce ne soit pas un "array"

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai d'ailleurs rectifié le code proposé, si tu fait un seul odbc_fetch_array, tu ne recuperes qu'un seul enregistrement hors je suppose que panier contient un renregistrement par article.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par lespoches Voir le message
    Peux tu faire !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($verifPanier);
    Cela te permettra de connaitre le type de données de $verifPanier car il semble que ce ne soit pas un "array"
    En effectuant cette instruction, j'obtiens ce résultat :

    bool(false)



    Pour le moment, voici le 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    $reqCat = odbc_do($connexion, "SELECT * FROM produits");		
    $afficheCat = odbc_fetch_array($reqCat);
    $verif=odbc_do($connexion, "SELECT id_prod FROM panier where id_membre = '" . $_SESSION["id_user"] . "'");
    $verifPanier=odbc_fetch_array($verif);
     
     
     
    echo"
     
          <table width='70%' cellspacing='0' cellpadding='2' align='center'>"; //border='black'
     
    while ($afficheCat  != FALSE)
       {
     
     
    	  $idPanierProd=$verifPanier['id_prod'];
    	  $numProd = $afficheCat['numProd'];
          $nomProd = $afficheCat ['nomProd'];
          $prixProd = $afficheCat ['prixProd'];
          $imageProd = $afficheCat ['imageProd'];
     
     
          echo"
              <tr bgcolor='#FF77CC'>
                <td width='17%'><b>nom du produit</b></td>
                <td>$nomProd</td>
                <td><img>$imageProd</img></td>
                <td rowspan='2'>";if (in_array($idPanierProd,$verifPanier)) { echo "<a href=\"index2.php?affiche=ajoutpanier&id=$numProd\">ajouter au panier</a>" ;} else {echo "article déja ajouté";} echo"</td>
            </tr>
            <tr>
                <td><b>Prix</b></td>
                <td>$prixProd €</td>
            </tr>
     
    		<tr><td><br></td></tr>
     
              ";
     
     
     
    	  $verifPanier=odbc_fetch_array($verif);
          $afficheCat = odbc_fetch_array($reqCat);
       }

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    Juste pour info, ca peut servir !!!
    Penser a regarder la doc !!!

    http://fr3.php.net/in_array

    Je pense pas qu'il va aimé le booléen

  8. #8
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    lespoches tu pourrais peut-être argumenter davantage ton commentaire, en effet il apparait clairement que le second paramètre n'est pas un tableau.

    En fait $verifPanier contient un unique jeu de résultat et une occurence par colonne du tableau. L'id du produit est donc contenu dans $verifPanier[0].

    Si tu ne compares qu'à un seul produit il n'y aucun intérêt à utiliser in_array.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if($idPanierProd == $verifPanier[0]){
        echo 'Produit déjà dans le panier';
    }
    Mais, comme le dit sabotage, il faut que verifPanier contiennent la totalité des produits du panier du membre. Il faut donc boucler sur tous les enregistements que renvoie la requête $verif afin de récupérer chacun des id_produits choisis par le membre.

    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
     
    $reqCat = odbc_do($connexion, "SELECT * FROM produits");		
    $verifPanier = Array();
    $verif=odbc_do($connexion, "SELECT id_prod FROM panier where id_membre = '" . $_SESSION["id_user"] . "'");
    while($produit_panier = odbc_fetch_array($verif)){
        $verifPanier[] = $produit_panier[0];
    }
    echo"
     
          <table width='70%' cellspacing='0' cellpadding='2' align='center'>"; //border='black'
     
    while ($afficheCat = odbc_fetch_array($reqCat))
       {
     
     
    	  $idProd=$afficheCat['id_prod'];
    	  $numProd = $afficheCat['numProd'];
          $nomProd = $afficheCat['nomProd'];
          $prixProd = $afficheCat ['prixProd'];
          $imageProd = $afficheCat ['imageProd'];
     
     
          echo"
              <tr bgcolor='#FF77CC'>
                <td width='17%'><b>nom du produit</b></td>
                <td>$nomProd</td>
                <td><img>$imageProd</img></td>
                <td rowspan='2'>";if (in_array($idProd,$verifPanier)) { echo "<a href=\"index2.php?affiche=ajoutpanier&id=$numProd\">ajouter au panier</a>" ;} else {echo "article déja ajouté";} echo"</td>
            </tr>
            <tr>
                <td><b>Prix</b></td>
                <td>$prixProd €</td>
            </tr>
     
    		<tr><td><br></td></tr>
     
              ";     
      }
    Code non testé

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    lespoches tu pourrais peut-être argumenter davantage ton commentaire, en effet il apparait clairement que le second paramètre n'est pas un tableau.
    Comment veux tu être plus explicite que la doc elle meme !
    Certes le fetch_array lit une ligne mais dans le cas où il n'y a plus de ligne a lire

    BOOM, false return

    Warning: in_array(): Wrong datatype for second argument.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Points : 44
    Points
    44
    Par défaut
    Merci pour votre aide, mais malheureusement, celà ne marche toujours pas

    Je vais laisser tomber cette étape, tant pis.

    Merci encore

Discussions similaires

  1. Ajouter le poids du produit dans les lignes de la facture
    Par Onimanta dans le forum Odoo (ex-OpenERP)
    Réponses: 10
    Dernier message: 27/12/2015, 08h46
  2. [eCommerce] Suppression de produit dans un panier
    Par sayes1 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 29/01/2008, 22h17
  3. [Conception] Ajout des produits dans un panier
    Par ghyosmik dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/09/2006, 11h17
  4. [MySQL] Ajout d'un nouveau produit dans un panier
    Par ghyosmik dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/09/2006, 15h41
  5. Modifier la quantité d'un produit dans un panier
    Par budiste dans le forum Langage
    Réponses: 22
    Dernier message: 14/02/2006, 09h38

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