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 :

Insérer une commande e-commerce dans MySQL


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur web
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Insérer une commande e-commerce dans MySQL
    Bonjour,

    je cherche à insérer une commande d'article(s) qu'un membre aura fait. Mes codes ci-dessous :

    la fonction préparée pour insérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function insert($sql, $data=array()){
    ***$req = $this->connexion->prepare($sql);
    ***$req->execute($data);
    }
    Mon PHP (j'ai un boutton submit name=""valider") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(isset($_POST['valider']))
    {
    **$data = array(
    ****'user_id' => $_SESSION['users']['id'],
    ****'amount' => number_format($panier->total(),2,',',' '),
    ****'created' => "date test je verrai comment faire plus tard, en attendant, ce texte. ('date') sûrement",
    ****'datas' => "datas test, idem"
    ****);
    *
    **$sql = 'INSERT INTO orders (user_id, amount, created, datas) VALUES (:user_id, :amount, :created, :datas)';
    **$req = $DB->insert($sql, $data);
    }
    Ma table se nomme bien orders, et ses champs : user_id, amount, created et datas.

    Avec ceci, rien n'est insérer dans ma bdd. Voyez-vous une problème ?

    Merci d'avance !

  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
    Tu as activé les erreurs PDO ?
    Que vaut le retour de execute() ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur web
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu as activé les erreurs PDO ?
    Que vaut le retour de execute() ?
    Bonjour Sabotage,

    Oui j'ai activé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
    execute est un PDOStatement, il retourne true ou false : je ne sais pas si je réponds exactement à ta question ?

    En tout cas j'utilise bien cette function insert pour les membres qui s'inscrivent, qui s'insèrent bien dans la base de données

    Entre temps de ce post; j'ai remarqué que mon "created" était en datetime dans MySQL donc je l'ai changé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(isset($_POST['valider']))
    {
      $data = array(
         'user_id' => $_SESSION['users']['id'],
         'amount' => number_format($panier->total(),2,',',' '),
         'created' => date("d-m-Y H:i:s"),
         'datas' => "datas test"
       );
     
       $sql = 'INSERT INTO orders (user_id, amount, created, datas) VALUES (:user_id, :amount, :created, :datas)';
       $req = $DB->insert($sql, $data);
    }
    Dans ma table orders, j'ai également "id" en primary et AI qui correspond à l'id unique de la commande, je ne le renseigne pas lors de mon INSERT n'est-ce pas ? (Je ne l'ai pas fait pour l'insertion de membres et ça fonctionne). "user_id" en int, "amount" en float, "created" en datetime, "datas" en text.
    Avec la MAJ du datetime (l'ai-je bien corrigé ?) ça ne fonctionne pas encore :s (je précise que je suis novice ^^)

    Merci d'avance

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur web
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Intéressant d'analyser un var_dump :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(4) { ["user_id"]=> NULL ["amount"]=> string(6) "999,00" ["created"]=> string(19) "31-08-2015 10:48:03" ["datas"]=> string(10) "datas test" }
    Donc mon 'user_id' => $_SESSION['users']['id'] n'est pas trouvé car j'ai mis un "s" à users donc je l'nelève et ça le trouve maintenant : string(2) "25"; mon "amount" est parametré en float dans MySQL et me retourne ici un string, y'a incohérence non ?

  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
    execute est un PDOStatement, il retourne true ou false : je ne sais pas si je réponds exactement à ta question ?
    oui ça d'accord mais tu obtiens TRUE ou FALSE justement ?

    Concernant le float, ta valeur va être tronquée car mysql ne comprendra que 999,00 c'est 999.00. Il faut que tu convertisses ce que l'utilisateur saisi.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Insérer une commande dans \addcontentsline
    Par Celano dans le forum Débuter
    Réponses: 1
    Dernier message: 16/07/2012, 11h33
  2. Insérer une "command window" dans une GUI
    Par guinotfr dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 09/03/2011, 12h53
  3. Comment insérer une commande sql dans un état éxistant
    Par Heytabernak dans le forum Formules
    Réponses: 0
    Dernier message: 08/08/2008, 10h14
  4. Réponses: 2
    Dernier message: 19/11/2004, 08h54
  5. [VB.NET] Insérer une colonne de CheckBox dans un DataGrid
    Par Manue.35 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2003, 11h44

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