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 :

Insertion données avec une requête préparée [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Par défaut Insertion données avec une requête préparée
    Bonjour,

    Je vous expose mon problème simplifié.
    J'ai une table produit :
    produit (ref_produit,nom_produit,num_sav)
    La clé étrangère num_sav est clé primaire de la table SAV
    sav-constructeur (num_sav,nom_sav,adresse_sav)

    Le base est crée sur phpmyadmin.
    Voici ma requête implémentée dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $req = $bdd->prepare('INSERT INTO `produits`(`REF_PRODUIT`, `NOM_PRODUIT`, `NUM_SAV`) VALUES (:ref-produit,:nom-produit,:num-sav)'); // On prépare la requète
    $req->execute(array( // et on insère
     'ref-produit' => $_POST['ref-produit'],
     'nom-produit' => $_POST['nom-produit'],
     'num-sav' => $donnees[0]
    ));
    $donnees[0] est la clé du sav auquel le produit est associé.

    Evidemment cette requête ne marche pas et je ne comprend absolument pas pourquoi ...

    Des idées ? Suggestions ? Remarques ?

    Cordialement.

  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
    Par défaut
    C'est mieux de mettre les : dans le nom des paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req->execute(array( // et on insère
     ':ref-produit' => $_POST['ref-produit'],
     ':nom-produit' => $_POST['nom-produit'],
     ':num-sav' => $donnees[0]
    ));
    Sinon quelle erreur as-tu ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Par défaut Merci
    Tout d'abord merci pour la réponse rapide.

    J'ai exactement cette erreur :
    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

  4. #4
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    A priori, une des données que tu utilises comme paramètre est vide.
    Est-ce que tu contrôles ces données avant ?
    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]

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    Peut-être un problème de quote autour du nom du produit ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = $bdd->prepare("INSERT INTO `produits`(`REF_PRODUIT`, `NOM_PRODUIT`, `NUM_SAV`) VALUES (':ref-produit',':nom-produit',':num-sav')");

    Je n'utilise pas PDO (je suis passé directement du mysql_... à Doctrine) donc à prendre avec des pincettes, mais c'est une des erreurs que je faisais régulièrement

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Par défaut
    Apparemment c'était un problème de quotes, je n'ai plus l'erreur.
    Le problème maintenant est que lors de l'ajout, ça ajoute :
    0 pour ref-produit
    :nom-produit pour nom-produit
    0 pour num-sav
    ....

    Je vous re-montre mon code que j'ai désormais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $req = $bdd->prepare("INSERT INTO `produits`(`REF_PRODUIT`, `NOM_PRODUIT`, `NUM_SAV`) VALUES (':ref-produit',':nom-produit',':num-sav')");
    $req->execute(array(
     ':ref-produit' => $_POST['ref-produit'],
     ':nom-produit' => $_POST['nom-produit'],
     ':num-sav' => $donnees[0]
    ));

    Edit : en fait j'ai enlevé les quotes autour de :ref-produit etc ... l'erreur me revient encore, je trouve ça assez énorme ...
    Du coup je vous met le code entier de la page :

    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
    <!DOCTYPE html>
    <html>
    <head>
    <title>Ajout d'un produit</title>
     
    <meta charset="utf-8" /></head>
     
    <body>
    	<?php 
     
     
     
    try
    {
        // On se connecte en MySQL
        $bdd = new PDO('mysql:host=localhost;dbname=toutebo', 'root', '');
     
    }
    catch(Exception $e)
    {
        // En cas d'erreur, on affiche un message et on arrète tout
            die('Erreur : '.$e->getMessage());
    }
     
    $reponse = $bdd->query("SELECT NUM_SAV from `toutebo`.`sav-constructeurs` WHERE NOM_SAV='".$_POST['choix']."'");
    $donnees = $reponse->fetch();
    echo $donnees[0];
     
    $req = $bdd->prepare("INSERT INTO `produits`(`REF_PRODUIT`, `NOM_PRODUIT`, `NUM_SAV`) VALUES (:ref-produit,:nom-produit,:num-sav)");
     // On prépare la requète
    $req->execute(array( // et on insère
     ':ref-produit' => $_POST['ref-produit'],
     ':nom-produit' => $_POST['nom-produit'],
     ':num-sav' => $donnees[0]
    ));
     
    echo "Le produit ";
    echo $_POST['nom-produit'] ;
    echo " a été ajouté <br/>";
    echo "Il a pour référence : ";
    echo $_POST['ref-produit'];
    $reponse->closeCursor();
     
    ?>
     
     
     
    </br>
    <a href="index.php">Revenir au menu</a>
     
    </body>
    </html>

    Si je fais echo de tous 3 paramètres ça m'affiche bien ce que j'ai entré dans le formulaire

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

Discussions similaires

  1. [MySQL] Supprimer une entrée avec une requête préparée
    Par safron dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 20/02/2013, 19h06
  2. [MySQL] Probleme avec une requête préparée
    Par lucduke dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 14/12/2012, 06h59
  3. probleme avec une requête préparée
    Par stc074 dans le forum JDBC
    Réponses: 5
    Dernier message: 19/08/2010, 22h04
  4. [MySQL] Création de variables dans une boucle et récupération de données avec une requête
    Par lavande4 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/09/2008, 11h10
  5. [PDO] une requête préparée pour un insert avec jointure?
    Par seïna dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/08/2008, 00h34

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