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 :

erreur creation de boucle [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 erreur creation de boucle
    bonjour à tous,

    j'ai modifié mon code pour ajouter une fonctionnalité et il ne fonctionne plus...

    Je recupere les valeur d'un formulaire que j'ecris dans une bdd et je veux creer une boucle qui me permettrait depuis une case ajoutée au formulaire de rentrer X fois le meme enregistrement, dans la base (differenciés par leur id auto-incrementé).

    voici mon 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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    <?php
     
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=db_ventes', 'root', '');
     
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
     
    catch (Exception $e)
    {
     
        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'],
    ':note_acheteur' => $_POST['note_acheteur'],
    ':blacklist' => $_POST['blacklist'],
    ':nombre_exemplaires' => $_POST['nombre_exemplaires']); 
     
     
    //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`, `note_acheteur`, `blacklist`)
            VALUES (:article, :cat_price, :date_creation, :pseudo_acheteur, :date_vente, :prix, :rangement, :etat, :provenance, :annee_vente, :note_acheteur, :blacklist)" ;
     
    echo '$sql';
    $req = $bdd->prepare($sql);
     
    // création de la boucle pour inserer le nombre d'annonces identiques
     
     
    $compteur = 1;
     
    //Notre condition est : tant que la variable est plus petit ou égal à $nombre_exemplaires
     
    while( $compteur <= intval($_POST["nombre_exemplaires"])
     
     
    //On affiche le résultat
     
    $req->execute($tab);
    echo 'L\'annonce a été crée';
    echo "$compteur";
    echo ' fois.';
     
    //On incrémente la boucle de +1
     
    $compteur++;
     
    }
     
     
    var_dump($tab);
     
     
    echo 'insertion du champ ok' ;
     
     
     
    if($bdd){
        $bdd = NULL;
        }
    actuellement, j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected '$req' (T_VARIABLE) in J:\ventes\admin_ventes.php3 on line 56
    et la ligne 56 ;

    merci de votre aide...

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( $compteur <= intval($_POST["nombre_exemplaires"])) {
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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 Sabotage, plus de parse error, par contre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in...
    toujours sur la meme ligne, ça doit vouloir dire que le nombre de paramètres de la requête n'est pas correct ?

  4. #4
    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
    Toutafé, il manque ":nombre_exemplaires" dans ta requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    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
    ce qui est etonnant, car il n'existe aucune colonne nombre_exemplaires dans ma bdd. C'est seulement une case du formulaire qui reçoit un intégré (1 ou 2 ou 3 ou plus) qui doit determiner le nombre de tours que doit faire la boucle avant d'en sortir...

  6. #6
    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
    C'est toi qui l'a mis dans les paramètres de la requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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 l'ai mis dans la declaration de variables, mais il n'apparait pas dans la requete sql insert into...

  8. #8
    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
    oui donc ca fait un paramètre de plus en donnée que dans la requête.
    C'est simple a comprendre non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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, sauf que ce que je comprends pas, c'est comment declarer ma variable pour pouvoir en extraire les infos pour la boucle sans qu'elle soit declarée dans la requete d'insert into !...

  10. #10
    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
    1 - qu'est ce que tu appelles "declarer ta variable" ?
    2 - quelle variable ? quelles informations ? pour en faire quoi dans la boucle ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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
    je me suis mal expliqué, je reprends :

    - j'ai un formulaire qui contient 13 cases de saisie. (`article`, `cat_price`, `date_creation`, `pseudo_acheteur`, `date_vente`, `prix`, `rangement`, `etat`, `provenance`, `annee_vente`, `note_acheteur`, `blacklist`et 'nombre_exemplaire')

    - ma bdd contient une colonne id auto-incrementée + 12 colonnes
    (`article`, `cat_price`, `date_creation`, `pseudo_acheteur`, `date_vente`, `prix`, `rangement`, `etat`, `provenance`, `annee_vente`, `note_acheteur`et `blacklist')

    - La colonne nombre_exemplaires n'existe pas puiqu'elle n'est pas replie par la requete, mais qu'elle sert uniquement à faire faire tourner X fois ma boucle.

    Ce que j'appelle declarer la variable, c'est recuperer la valeur de la case de saisie du formulaire par la methode POST comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ':nombre_exemplaires' => $_POST['nombre_exemplaires']
    Ce qui a l'air de poser probleme, c'est que j'ai l'impression que le code d'erreur s'attend a ce que toutes les variables de mon tableau array soit declarées dans ma requete or c'est pas ce que je veux.

    Peut-on par exemple sortir la ligne de code ci-dessus et ne la remettre qu'apres la requete pour pas qu'il en tienne compte tout de suite, mais seulement au moment on je demarre la boucle.

    voilà, j'espere que c'est pas trop confus...merci pour ton aide en tout cas.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ':nombre_exemplaires' => $_POST['nombre_exemplaires']
    est la définition du paramètre utilisé dans la requête.
    Ca ne fait rien d'autre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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
    d'accord.

    donc si j'enleve ce parametre de mon array et que je le mets juste avant la boucle ça devrait deja solutionner cette erreur fatale logiquement...

  14. #14
    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
    Qu'est ce que tu veux "mettre avant la boucle" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    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
    cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ':nombre_exemplaires' => $_POST['nombre_exemplaires']
    apparemment elle crée l'erreur fatale puisque il y a trop de parametres par rapport à ma requete et que je ne veux pas l'utiliser dans ma requete puisqu'il n'y a aucune colonne du meme nom à remplir...

  16. #16
    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
    Comme je t'ai dit : cette déclaration ne sert QUE pour l'execution de la requête.
    Si tu ne veux pas de ce paramètre dans la requête, tu l'enlèves purement et simplement.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    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
    on est bien d'accord sur ce point !
    maintenant la case de mon formulaire qui s'appelle nombre_exemplaire et qui contiendra un nombre qui va faire tourner X fois ma boucle, il faut bien que par un moyen quelconque, je recupere sa valeur par un POST dans ma boucle ou juste avant, donc en tout cas apres ma requete...

  18. #18
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 350
    Points : 507
    Points
    507
    Par défaut
    Sa valeur est dans $_POST["nombre_exemplaires"] Comme tu viens de le dire.
    Tu peux l'utiliser ou tu veux et comme tu veux, mais si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ':nombre_exemplaires' => $_POST['nombre_exemplaires']
    alors tu ajoutes une variable a ta requete, tu dois tout simplement SUPPRIMER cette ligne.
    Marcuscircus : La seule différence entre un rêve et sa réalisation, c'est l'envie

  19. #19
    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
    ok, merci à tous les deux, j'ai eu du mal avec ça...

    ceci dit, mon fichier a progressé :

    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
    <?php
     
    $bdd = null;
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=db_ventes', 'root', '');
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch (Exception $e)
    {
        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'],
    ':note_acheteur' => $_POST['note_acheteur'],
    ':blacklist' => $_POST['blacklist']
    ); 
     
    $sql = "INSERT INTO `tab_ventes` (`article`, `cat_price`, `date_creation`, `pseudo_acheteur`, `date_vente`, `prix`, `rangement`, `etat`, `provenance`, `annee_vente`, `note_acheteur`, `blacklist`)
            VALUES (:article, :cat_price, :date_creation, :pseudo_acheteur, :date_vente, :prix, :rangement, :etat, :provenance, :annee_vente, :note_acheteur, :blacklist)" ;
     
     
    $bdd->beginTransaction();
     
    try {
        $req = $bdd->prepare($sql);
    }
    catch (PDOException $e) {
        echo 'echec du prepare : ' . $e->getMessage();
    } 
     
     
    $nbExemplaires = intval($tab[':nombre_exemplaires']);
     
    for($i = 1 ; $i < $nbExemplaires  ; $i++){   
        try{
            $req->execute($tab);
        }
        catch (PDOException $e) {
            echo 'echec du execute : ' . $e->getMessage();
        } 
     
        echo "L'annonce a été créee ".$i." fois";
    }
     
    $bdd->commit();
     
    ?>
    je n'ai plus une seule erreur affichée, pourtant je n'ai toujours aucune entrée dans la bdd...

  20. #20
    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 toujours du mal avec cette histoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbExemplaires = intval($_POST['nombre_exemplaires']);
    Affiche tous les types d'erreurs quand tu developpes, ce que tu avais écrit provoque une erreur Notice.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PHP] Erreur creation RSS
    Par MiloLee dans le forum XML/XSL et SOAP
    Réponses: 16
    Dernier message: 18/05/2006, 00h52
  2. erreur creation de table firebird
    Par BigNoze dans le forum Bases de données
    Réponses: 9
    Dernier message: 15/05/2006, 18h44
  3. ora-27040 erreur creation control file
    Par pascale86 dans le forum Oracle
    Réponses: 23
    Dernier message: 19/01/2006, 16h54
  4. Shell - Erreur dans une boucle for
    Par claralavraie dans le forum Linux
    Réponses: 4
    Dernier message: 11/01/2006, 13h45
  5. Erreur avec la boucle For
    Par Harvester dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2005, 16h46

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