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 :

Impossible d'ajouter produit dans panier [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Actif ouais
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Actif ouais

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 32
    Points
    32
    Par défaut Impossible d'ajouter produit dans panier
    Bonjour,

    J'essaie de faire un site avec l'aide de : eprojet.fr.
    J'ai un soucis au niveau du panier, lorsque j'ajoute un produit, cela ne fonctionne pas. Pourtant j'ai bien regardé, ça devrait marcher .

    http://beepbeep74.free.fr/grecz/connexion.php

    Login : Test1 / Mdp: Test1 => Aller sur la page : La Boutique et essayez d'ajouter un produit.

    panier.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //--- AJOUT PANIER ---//
    if(isset($_POST['ajout_panier'])) 
    {   // debug($_POST);
        $resultat = executeRequete("SELECT * FROM produit WHERE id='$_POST[id]'");
        $produit = $resultat->fetch_assoc();
        ajouterProduitDansPanier($produit['nom'],$_POST['id'],$_POST['quantite'],$produit['prix']);
    }
    function
    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
    function ajouterProduitDansPanier($id, $nom, $quantite, $prix)
    {
        creationDuPanier(); 
        $position_produit = array_search($id,  $_SESSION['panier']['id']);
        if($position_produit !== false)
        {
             $_SESSION['panier']['quantite'][$position_produit] += $quantite ;
        }
        else
        {
            $_SESSION['panier']['nom'][] = $nom;
            $_SESSION['panier']['id'][] = $id;
            $_SESSION['panier']['quantite'][] = $quantite;
            $_SESSION['panier']['prix'][] = $prix;
        }
    }
    ( A mon avis ca se passe à "where id=..." mais impossible sans s'arracher les cheveux).

    Merci de votre aide.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu ne peux injecter une variable issue d'un tableau directement dans une chaine : soit tu la concatènes : "Some String ".$tab['index']." and some more...", soit tu l'échappes : "Some String {$tab['index']} and and some more...".

    Mais, vu que dans ton cas, il s'agit d'injecter une valeur provenant de l'extérieur dans ta requête, il faut l'échapper en utilisant mysqli::real_​escape_​string (je suppose que tu utilises mysqli)
    A défaut d'échappement, tu peux au moins nettoyer la variable. Vu qu'il s'agit d'un id, je suppose que c'est un nombre. Tu peux donc utiliser filter_​var ou filter_​input avec le filtre FILTER_SANITIZE_NUMBER_INT.
    Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $id = filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT);
    $resultat = executeRequete("SELECT * FROM produit WHERE id=$id");
    EDIT :
    J'ai jeté un coup d'oeil à ton tuto, notamment la partie "Approche de la sécurité". La démonstration du fonctionnement d'une injection SQL est très bien illustrée. En revanche, la façon de contrer l'injection SQL est totalement fausse ! Les fonctions htmlentities et htmlspecialchars ne sont pas du tout faites pour ça, quand bien même cela fonctionnerait. Autant dire que tu peux faire la cuisine avec un lave-vaisselle : il se trouve que c'est possible sous certaines conditions, mais ce n'est pas du tout prévu pour.
    Pour contrer les injections SQL, il faut échapper les valeurs avec les fonctions faites pour. Pour mysqli, il s'agit de mysqli::real_​escape_​string, et un peu de validation/nettoyage en amont est toujours une bonne idée (du genre : si le champ doit être un nombre, vérifier que c'est bien le cas ou le forcer à être un nombre, à lire sur ce sujet : Les filtres PHP : une fonctionnalité importante de sécurité)

    Et toujours niveau sécurité : stocker un mot de passe en clair en base est une TRES mauvaise idée. A lire sur ce sujet : Mots de passe sécurisés avec PHP 5.5
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ajouterProduitDansPanier($produit['nom'],$_POST['id'],$_POST['quantite'],$produit['prix']);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function ajouterProduitDansPanier($id, $nom, $quantite, $prix)
    Tu ne vois pas comme un problème ?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Actif ouais
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Actif ouais

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Merci d'avoir pris le temps de repondre.

    Pourtant sur d´autres requetes ca marche tres bien. Je ne suis pas chez moi. Je vais essayer d'echapper comme tu m´as dis.

    Pour la sécurité, le tuto est clair, il ne protege en rien. Merci pour les infos.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas parce que tu ne comprends pas une réponse que tu dois lui mettre un


    Tu as mis ($produit['nom'],$_POST['id'],... au lieu de ($produit['id'],$_POST['nom'],....

    Ouvre les yeux.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Actif ouais
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Actif ouais

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Mdrr j'ai mis pouce rouge parce que ca fait deux messages pour rien, tu pouvais le dire directement.

    Merci en tout cas, tu as raison.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Alors, enlève-le (re-clique dessus).
    Merci.


    Citation Envoyé par ishaq74 Voir le message
    ...tu pouvais le dire directement...
    Je pense que pousser l'autre à réfléchir/chercher PAR LUI-MEME (ou ici, à ouvrir les yeux) est plus pédagogique que de donner une réponse toute cuite.

    "Quand le sage désigne la lune, l'idiot regarde le doigt."

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Actif ouais
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Actif ouais

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Non non, je confirme le pouce rouge. La preuve on en est a 4 messayes inutiles deja.

    Je sais bien que la reponse est devant mes yeux.

    EDIT :
    -Echapper ou filter n'a pas marché.
    -Inverser l'odre n'a pas marché non plus.


    DOUBLE EDIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $resultat = executeRequete("SELECT * FROM produit WHERE id='".mysqli_real_escape_string($mysqli, $_POST['id'])."'");
    J'ai toujours le meme probleme.

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Résolu sur le chat...
    penser à mettre la bonne valeur d'id article dans l'input hidden ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/08/2012, 15h06
  2. [MySQL] Ajout quantité dans panier s'ajoute à tout le panier
    Par pinpin97 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 08/11/2011, 19h38
  3. Panoplie de produits dans panier - calcul de reduc
    Par Creanet dans le forum Langage
    Réponses: 4
    Dernier message: 01/12/2009, 17h07
  4. Impossible d'ajouter .dll dans visual
    Par yohan0262 dans le forum Visual Studio
    Réponses: 2
    Dernier message: 18/01/2008, 09h28
  5. Impossible d'ajouter données dans base de données
    Par spartaxhit dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/01/2008, 02h58

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