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 :

PDO insert into depuis un formulaire n'ecrit pas dans ma bdd [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Points : 15
    Points
    15
    Par défaut PDO insert into depuis un formulaire n'ecrit pas dans ma bdd
    PDO insert into depuis un formulaire n'ecrit pas dans ma bdd

    Messagepar petinico Aujourd’hui, 08:30
    Bonjour à tous,

    Nouveau venu et débutant avec PDO, je bloque sur ce probleme :

    J'ai crée une bdd db_ventes, un formulaire avec <FORM Method="POST" Action="admin_ventes.php3">

    et admin_ventes.php3 que voici :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
     
    try
    {
    // initilisation de PDO
    // On stocke la connection à MySQL dans une variable en précisant le type de table, l'hote, le mon de la bdd, le pseudo et mot de passe
    $bdd = new PDO('mysql:host=localhost;dbname=db_ventes', 'root', '');
    }
     
    catch (Exception $e)
    {
    // En cas d'erreur, on affiche un message et on arrête tout
    die('Erreur : ' . $e->getMessage());
    }
     
     
     
    //récupération des valeurs des champs:
     
    $article = $_POST['article'];
    $cat_price = $_POST['cat_price'];
    $date_creation = $_POST['date_creation'];
    $pseudo_acheteur = $_POST['pseudo_acheteur'];
    $date_vente = $_POST['date_vente'];
    $prix = $_POST['prix'];
    $rangement = $_POST['rangement'];
    $etat = $_POST['etat'];
    $provenance = $_POST['provenance'];
    $annee_vente = $_POST['annee_vente'];
     
    $tab = array(
    'article' => '$article',
    'cat_price' => '$cat_price',
    'date_creation' => '$date_creation',
    'pseudo_acheteur' => '$pseudo_acheteur',
    'date_vente' => '$date_vente',
    'prix' => '$prix',
    'rangement' => '$rangement',
    'etat' => '$etat',
    'provenance' => '$provenance',
    'annee_vente' => '$annee_vente');
     
     
    //création de la requête SQL:
     
     
    $sql = "INSERT INTO `tab_ventes` (`article`, `cat_price`, `date_creation`, `pseudo_acheteur`, `date_vente`, `prix`, `rangement`, `etat`, `provenance`, `annee_vente`)
    VALUES (':article', ':cat_price', ':date_creation', ':pseudo_acheteur', ':date_vente', ':prix', ':rangement', ':etat' , ':provenance', ':annee_vente')" or die("Erreur SQL !".mysql_error());
     
     
     
    $req = $bdd->prepare($sql);
    $req->execute($tab);
     
     
    // fermeture de la connection à la bdd
     
    if($bdd){
    $bdd = NULL;
    }
    ?>
    quand je rempli les champs de mon formulaire, je valide et la bdd reste vide. je bloque dessus depuis 2 jours et un peu d'aide me serait utile... #-o

    merci par 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 n'as pas mis les deux points dans le nom de l'index
    - tes variables intermediaires $articles etc. ne servent à rien
    - comme tu as mis des guillemets autour de tes variables, elles ne sont pas interpretées
    - mysql_error() ne fonctionne pas avec PDO, il faut activer les erreurs PDO si tu veux avoir un retour d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tab = array(
    ':article' => $_POST['article'],
    ':cat_price' => $_POST['cat_price'],
    etc.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Points : 15
    Points
    15
    Par défaut
    merci pour ton aide Sabotage !

    - tu n'as pas mis les deux points dans le nom de l'index

    C'est quoi le "nom de l'index" ?

    - tes variables intermediaires $articles etc. ne servent à rien

    Elles ne servent à rien parce que je les exploitent pas comme il faut ? ce sont ces variables qui contiennent les entrees du formulaire, je dois les recuperer malgré tout..

    je vais donc virer mysql_error() et quand ça fonctionnera, je chercherai à activer les erreurs PDO...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Points : 15
    Points
    15
    Par défaut
    ah j'ai ecrit trop vite, les deux points dont tu parles pour l'index, c'est le bout de code que tu as rajouté si je ne m'abuse... je regarde ça...

  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
    Regarde dans mon code, je n'utilise pas de variable intermédiaire.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je dirais que les variables intermédiaires n'ont d'intérêt que si tu fais (notamment) une gestion d'erreur avant insertion en BdD.

    gestion d'erreur :
    • champs obligatoires,
    • validité d'email/num. de tél./...
    • ...

    (voir ici un exemple concret)

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Points : 15
    Points
    15
    Par défaut
    -je dirais que les variables intermédiaires n'ont d'intérêt que si tu fais (notamment) une gestion d'erreur avant insertion en BdD.

    merci jreaux62, j'ai bien compris ça.

    - Regarde dans mon code, je n'utilise pas de variable intermédiaire.

    effectivement, j'ai suivi l'exemple, et après quelques essais, je n'ai plus d'erreur, mais toujours aucune inscription dans la bdd...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Après VALUES, il faut enlever les '

    + remontrer ton code (corrigé)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Points : 15
    Points
    15
    Par défaut
    oui je les ai enlevé, mais pas mieux, revoici le code corrigé :

    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
    49
    50
    <?php
     
    try
    {
    	// initilisation de PDO
         	// On stocke la connection à MySQL dans une variable en précisant le type de table, l'hote, le mon de la bdd, le pseudo et mot de passe
    	$bdd = new PDO('mysql:host=localhost;dbname=db_ventes', 'root', '');
    }
     
    catch (Exception $e)
    {
            // En cas d'erreur, on affiche un message et on arrête tout
    	die('Erreur : ' . $e->getMessage());
    }
     
     
    $tab = array(
    ':article' => $_POST['article'],
    ':cat_price' => $_POST['cat_price'],
    ':date_creation' => $_POST['date_creation'],
    ':pseudo_acheteur' => $_POST['pseudo_acheteur'],
    ':date_vente' => $_POST['date_vente'],
    ':prix' => $_POST['prix'],
    ':rangement' => $_POST['rangement'],
    ':etat' => $_POST['etat'],
    ':provenance' => $_POST['provenance'],
    ':annee_vente' => $_POST['annee_vente']);
     
     
     
    //création de la requête SQL:
     
     
    $sql = "INSERT INTO `tab_ventes` (`article`, `cat_price`, `date_creation`, `pseudo_acheteur`, `date_vente`, `prix`, `rangement`, `etat`, `provenance`, `annee_vente`) 
    		VALUES (:article, :cat_price, :date_creation, :pseudo_acheteur, :date_vente, :prix, :rangement, :etat, :provenance, :annee_vente)" ;
     
    echo "$sql";
     
    $req = $bdd->prepare($sql);
    $req->execute($tab);
     
     
    // fermeture de la connection à la bdd
     
    if($bdd){
        $bdd = NULL;
    	}
     
     
    ?>
    et le echo $sql; me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `tab_ventes` (`article`, `cat_price`, `date_creation`, `pseudo_acheteur`, `date_vente`, `prix`, `rangement`, `etat`, `provenance`, `annee_vente`) VALUES (:article, :cat_price, :date_creation, :pseudo_acheteur, :date_vente, :prix, :rangement, :etat, :provenance, :annee_vente)
    en gros il renvoie mon code, serait-ce qu'il le lit sans l'interpreter ?...

  10. #10
    Invité
    Invité(e)
    Par défaut
    Que donne var_dump($tab) ?

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Points : 15
    Points
    15
    Par défaut
    le var_dump($tab) me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(10) { [":article"]=> string(2) "bv" [":cat_price"]=> string(6) "livres" [":date_creation"]=> string(0) "" [":pseudo_acheteur"]=> string(4) "vcxb" [":date_vente"]=> string(0) "" [":prix"]=> string(0) "" [":rangement"]=> string(4) "vcxb" [":etat"]=> string(0) "" [":provenance"]=> string(5) "perso" [":annee_vente"]=> string(4) "2003" }

  12. #12
    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
    active les erreurs PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Points : 15
    Points
    15
    Par défaut
    Bon me revoilà avec un peu de temps dispo. merci à vous deux pour votre aide.
    J'ai donc activé les erreurs PDO et voici le retour :

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'annee_vente' in 'field list'' in J:\ventes\admin_ventes.php3:43 Stack trace: #0 J:\ventes\admin_ventes.php3(43): PDOStatement->execute(Array) #1 {main} thrown in J:\ventes\admin_ventes.php3 on line 43
    et la ligne 43 c'est :

    maintenant, il faut traduire le code d'erreur ....

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Points : 15
    Points
    15
    Par défaut
    BINGO ! la colonne annee_vente a été creee annee-vente dans la bdd. j'ai corrigé, ça fonctionne. merci à tous les deux, à bientôt pour un autre probleme qui apparaitra certainement...

    merci encore

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

Discussions similaires

  1. INSERT INTO seulement s'il n'existe pas dans la table.
    Par kOrt3x dans le forum Langage SQL
    Réponses: 13
    Dernier message: 16/09/2014, 17h13
  2. INSERT INTO et le formulaire type="file"
    Par abdellah63 dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2008, 17h47
  3. insert into depuis formulaire avec condition
    Par vinc54 dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/05/2008, 10h37
  4. Insert into depuis une autre base
    Par frikazoide dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 27/07/2007, 21h29
  5. Requete insert into depuis une zone de liste
    Par fredhali2000 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 07/06/2006, 14h23

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