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 :

bug pour update un formulaire !


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut bug pour update un formulaire !
    Bonjour
    Aidez-moi svp, merci !
    Je fais un petit TP de facturation. J'aimerais mettre la facture à jour à partir de son identifiant mais j'ai ce message d'erreur :
    Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Facturation\updateFacture.php:21Stack trace:#0 C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Facturation\updateFacture.php(21): PDOStatement->execute(Array)#1 {main} thrown in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Facturation\updateFacture.php on line 21
    Voici mon formulaire qui récupère les données de la facture,
    modifierFacture.php :
    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
    <?phprequire_once 'connexion.php';
     
     
    $resFC = $base->prepare('SELECT * FROM facturation WHERE id= ?');
    $resFC->execute(array($_GET['id']));
    ?>
    <!DOCTYPE html>
    <html lang="fr">
      <head>
        <meta charset="utf-8">
        <title>Créer une facture</title>
        <link rel="stylesheet" href="style.css" media="all" />
      </head>
      <body>
        <br/><br/>
        <main>
    <?php require_once('includes/menu.php') ?>
    <br/><br/><br/>
    <?php foreach ($resFC as $req): ?>
    <?= '<form action="updateFacture.php?id='.$req['id'].'" method="post">' ?>
      <fieldset>
        <legend>Infos de votre entreprise</legend>
        <textarea id="facturede" name="facturede" rows="4" cols="45"
          placeholder="Votre entreprise: Raison sociale, adresse.." required><?php echo $req['facturede'] ?></textarea><br/><br/>
        <label for="file">Sélectionner votre logo</label>
        <input name="logo" type="file" size=50>
        <input type="hidden" name="MAX_FILE_SIZE" value="250000" />
      </fieldset><br/>
     
     
      <fieldset>
        <legend>Infos de base</legend>
        <input type="text" placeholder="Numéro de la facture" name="num" value="<?php echo $req['num'] ?>"><br/><br/>
        <label>Date de la facture </label>
        <input type="date" name="dateFacture" value="<?php echo $req['dateFacture'] ?>"><br/><br/>
        <textarea name="client" rows="4" cols="45"
            placeholder="Facturé à: Raison sociale, adresse.." required><?php echo $req['client'] ?>
        </textarea>
        <br/><br/>
        <textarea name="conditions" rows="10" cols="45"
            placeholder="Conditions et paiements" required><?php echo $req['conditions'] ?></textarea>
      </fieldset><br/>
     
     
                <fieldset>
                <legend>Contenu de la facture formation</legend>
                <textarea name="prestation" rows="4"
                  placeholder="Prestation" required><?php echo $req['prestation'] ?></textarea><br/><br/>
                <input type="number" placeholder="Nombre de jours" name="nbjours" value="<?php echo $req['nbjours'] ?>" required><br/><br/>
                <input type="number" placeholder="Tarif journalier" name="tarifjour" value="<?php echo $req['tarifjour'] ?>" required><br/><br/>
                <!-- <input type="number" placeholder="Taxe" name="taxe"><br/><br/> -->
                <!-- <input type="number" placeholder="Total du montant HT" name="montantHT"><br/><br/> -->
                </fieldset>
    <br/>
        <input type="submit" value ="Mettre à jour une facture" />
          </form>
          <?php endforeach; ?>
          <br/>
        </main>
          <?php require_once('includes/footer.php') ?>
      </body>
    </html>
    updateFacture.php
    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
    <?phprequire_once 'connexion.php';
    $req = $base->prepare('UPDATE facturation
      SET num = :num,
      client = :client,
      prestation = :prestation,
      nbjours = :nbjours,
      tarifjour = :tarifjour,
      dateFacture = :dateFacture,
      facturede = :facturede,
      conditions = :conditions
      WHERE id= ?');
      $req->execute(array('num' => $num,
                              'client' => $client,
                              'prestation'=> $prestation,
                              'nbjours'=> $nbjours,
                              'tarifjour'=> $tarifjour,
                              'dateFacture'=> $dateFacture,
                              'facturede'=> $facturede,
                              'conditions'=> $conditions,
                              'id'=> $id));
    ?>
    <!DOCTYPE html>
    <html lang="fr">
      <head>
        <meta charset="utf-8">
        <title>Mise à jour Facture</title>
        <link rel="stylesheet" href="style.css" media="all" />
      </head>
      <body>
        <header class="clearfix">
     
     
        </header>
        <?php require_once('includes/menu.php') ?>
        <br/> <br/>
        <main>
          <p> Les données ont bien été mise à jour</p>
        </main>
        <?=   $base = null; ?>
        <?php require_once('includes/footer.php') ?>
      </body>
    </html>

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 399
    Points : 15 761
    Points
    15 761
    Par défaut
    quel est la ligne 21 dans le fichier d'origine qui provoque cette erreur ?
    et à cette ligne 21, qu'est ce qui pourrait correspondre à "named and positional parameters" ?

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Voici la ligne 21 : Je ne vois pas à quoi correspond
    "named and positional parameters"

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

    l'erreur est classique.

    Elle signifie que le nombre de paramètres ne correspond pas entre :
    • les place holders (dans la requête)
    • et les données passées en paramètres (dans execute).


    Ici, tu t'es trompée pour l'id :

    Il faut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $req = $base->prepare('UPDATE facturation
    ...
      WHERE id= ?');
      $req->execute(array('num' => $num,
    ...
                              'id'=> $id));
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $req = $base->prepare('UPDATE facturation
    ...
      WHERE id= :id');
      $req->execute(array('num' => $num,
    ...
                              ':id'=> $id));
    N.B. REMARQUE bien les deux points :
    Il est préférable de les mettre AUSSI pour les autres paramètres (même si ça peut fonctionner sans)

    Tu devrais faire un peu de LECTURE : Comprendre PDO

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Ok y a plus de bug mais les données ne sont pas mise à jour dans la base de données

  6. #6
    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
    Ce serait sans doute une bonne idée de vérifier ce que le formulaire t'envoie par un var_dump($_POST); ajouté au début du script de traitement du formulaire.

Discussions similaires

  1. [MySQL] Formulaire pour UPDATE
    Par temperature dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 30/10/2007, 11h36
  2. Réponses: 4
    Dernier message: 03/05/2005, 17h02
  3. problème pour updater une BD
    Par yoda_style dans le forum ASP
    Réponses: 6
    Dernier message: 17/03/2005, 10h56
  4. Réponses: 6
    Dernier message: 24/01/2005, 14h12
  5. code pour fermer un formulaire
    Par rippey dans le forum IHM
    Réponses: 2
    Dernier message: 21/10/2003, 15h51

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