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 :

update avec php


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 3
    Points
    3
    Par défaut update avec php
    bonsoir!! j'ai deux code update, l'autre pour afficher et selectionner l'id du champ a modifier et l'autre pour executer la modification, et pour le premier code sa va mais dans le duexieme code quand je valide la modification j'ai deux messages d'erreurs
    Notice: Undefined index: LIBELLE_CAT
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens'
    et si quelqu'un peux m'aider à m'éclaircir d'ou vient mon erreur s'il vous plait!!?
    voila 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
    <?php
    // on se connecte à notre base
    $hostdb = 'localhost';
    $userdb = 'root';
    $passdb = '';
    $namedb = 'mfb';
     
    try
       {
         $conn = new PDO("mysql:host=".$hostdb."; dbname=".$namedb."", $userdb, $passdb, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
         $conn->exec("SET CHARACTER SET utf8");
        }
    catch (PDOException $e)
       {
         echo 'La base de donnée n\'est pas disponible';
        }
    ?>
    <form action="modifi_cat1.php" method="GET">
    <?php
     
    $requete = $conn->query('SELECT * FROM categorie');
    ?>
     
    <select name="CODE_CATEGORIE">
    <?php
    while($donnees = $requete->fetch()){
    ?>
    <option value="<?php echo $donnees['CODE_CATEGORIE']; ?>"><?php echo htmlspecialchars($donnees['CODE_CATEGORIE']); ?></option>
    <?php
    }
    ?>
    </select>
    <?php
    $requete->closeCursor();
    ?>
    <a href='modifi_cat1.php'><input type="submit" name="modifier" value="OK" /></a>
    </form>
    et l'autre code qui a ces erreurs

    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
    <?php
    // on se connecte à notre base
    $hostdb = 'localhost';
    $userdb = 'root';
    $passdb = '';
    $namedb = 'mfb';
     
    try
       {
         $conn = new PDO("mysql:host=".$hostdb."; dbname=".$namedb."", $userdb, $passdb, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
         $conn->exec("SET CHARACTER SET utf8");
        }
    catch (PDOException $e)
       {
         echo 'La base de donnée n\'est pas disponible';
        }
    ?>
     
     
    <?php
     
    $requete = $conn->prepare('SELECT * FROM categorie WHERE CODE_CATEGORIE = :CODE_CATEGORIE');
    $requete->bindValue('CODE_CATEGORIE', $_GET['CODE_CATEGORIE'], PDO::PARAM_INT);
    $requete->execute();
     
    if($donnees = $requete->fetch())
    {
    if(isset($_POST['submit']))
    {
    $update = $conn->prepare('UPDATE categorie SET LIBELLE-CAT = :LIBELLE-CAT, caracteristique = :caracteristique WHERE CODE_CATEGORIE = :CODE_CATEGORIE');
    $requete->bindValue('CODE_CATEGORIE', $donnees['CODE_CATEGORIE'], PDO::PARAM_INT);
    $requete->bindValue('LIBELLE_CAT', $_POST['LIBELLE_CAT'], PDO::PARAM_STR);
    $requete->bindValue('caracteristique', $_POST['caracteristique'], PDO::PARAM_STR);
    $requete->execute();
     
    header('Location: categorie.php');
    exit();
    }
    ?>
     
    <form method="POST" action="modifi_cat1.php?CODE_CATEGORIE=<?php echo $donnees['CODE_CATEGORIE']; ?>">
    <label for="titre">Libell&eacute; du cat&eacute;gorie :</label>
    <input type="text" name="libelle" id="libelle" value="<?php echo htmlspecialchars($donnees['LIBELLE_CAT']); ?>" /><br />
    <label for="contenu">Caract&eacute;ristique :</label>
    <textarea rows="4" cols="50" name="caracteristique" id="caracteristique"><?php echo htmlspecialchars($donnees['caracteristique']); ?></textarea><br />
    <input type="submit" name="submit" value="Modifier" /><br/><br/>
    </form>
    <?php
    }
    else{
    // L'entrée n'existe pas
    }
    $requete->closeCursor();
     
    ?>
    et la ligne ou se trouve le premier erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete->bindValue('LIBELLE_CAT', $_POST['LIBELLE_CAT'], PDO::PARAM_STR);
    et la deuxieme erreur

    merci de bien m'aider!!

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Dans le code de préparation de la requête tu utilises la variable $update c'est donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $update->bindValue('CODE_CATEGORIE', $donnees['CODE_CATEGORIE'], PDO::PARAM_INT);
    et pareil pour les lignes suivantes.

  3. #3
    Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    toujours les même erreurs

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Et au passage puisque tu as déclaré le mode exception dans ta connexion, tu devrais également mettre toutes tes requêtes dans un bloc try/catch pour récupérer proprement les erreurs. Par exemple :

    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
    try {
    $update = $conn->prepare('UPDATE categorie SET LIBELLE-CAT = :LIBELLE-CAT, caracteristique = :caracteristique WHERE CODE_CATEGORIE = :CODE_CATEGORIE');
     
    $update->bindValue('CODE_CATEGORIE', $donnees['CODE_CATEGORIE'], PDO::PARAM_INT);
    $update->bindValue('LIBELLE_CAT', $_POST['LIBELLE_CAT'], PDO::PARAM_STR);
    $update->bindValue('caracteristique', $_POST['caracteristique'], PDO::PARAM_STR);
     
    $update->execute();
    }
    catch (PDOException $e)
    {
         // En phase de test pour faire afficher le détail des erreurs
         echo $e->getMessage();
     
         // En phase de production pour n'afficher que le minimum nécessaire
         echo 'Erreur dans la requête Update';
    }

  5. #5
    Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    ok merci, l'erreur n'y est plus, mais le donner que j'ai modifier ne sont pas du tout modifier et je ne comprend pas pourquoi

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Ta requête dépend d'un WHERE, la condition n'est peut-être pas remplie.

    Tu peux utiliser rowCount() pour voir le nombre de ligne affectées par l'update.

    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
    try 
    {
    //...
     
    //...
     
    $update->execute();
     
    // nombre de lignes affectées par l'update :
    echo 'Update = '.$update->rowCount();
    }
    catch (PDOException $e)
    {
         // ...
    }
    Si la requête n'affiche pas d'erreur et que Update = 0, c'est soit que la clause WHERE n'a pas été remplie, soit que tes
    nouvelles valeurs étaient identiques aux précédentes.

    Tu peux aussi faire afficher les variables que tu passe au requêtes pour vérifier leur contenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo 'CODE_CATEGORIE = '.$donnees['CODE_CATEGORIE'];
    echo 'LIBELLE_CAT = '.$_POST['LIBELLE_CAT'];
    echo 'caracteristique = '.$_POST['caracteristique'];
    Sinon je vois pas ce que tu gagne à faire une requête de sélection suivie d'une requête d'update. Pourquoi ne pas faire simplement que la requête d'update ?

  7. #7
    Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    donc, j'ai utilisé rowcount() et update=1 avec une erreur
    Notice: Undefined index: LIBELLE_CAT
    dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $update->bindValue('LIBELLE_CAT', $_POST['LIBELLE_CAT'], PDO::PARAM_STR);
    et je ne comprend toujours pas pourquoi cette variable est undefined!!? et l'autre a bien été modifié

  8. #8
    Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    et puis les données sensé être dans la variable undefined disprait tout simplement

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Et bien c'est que $_POST['LIBELLE_CAT'] n'existe pas.

    Le champ de ton formulaire doit certainement utiliser un nom différent, en tous cas si $_POST['LIBELLE_CAT'] n'existe pas c'est qu'aucun champ de ton formulaire ne porte le nom de 'LIBELLE_CAT' (sauf si c'est une case à cocher, auquel cas cela ne renvoie rien si l'on a rien coché)

    En tous cas cet exemple te montre que l'on ne devrait pas utiliser de variables externes sans les avoir testées.

    Un code correctement construit devrait ressembler à
    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
    //...
    if(isset($_POST['LIBELLE_CAT'],$_POST['caracteristique']))
    {
    try
    {
    //...
    $update->execute()
    }
    catch (PDOException $e)
    {
         // ...
    }
    }
    else
    {
    // pour debug
    echo 'une variable est manquante';
    }
    Pour le reste je reste persuadé que ta requête de sélection qui précède ta requête d'update ne sert à rien.

  10. #10
    Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    c'est toujours la même chose!!

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Je t'ai déjà répondu :

    Citation Envoyé par ABCIWEB Voir le message
    Le champ de ton formulaire doit certainement utiliser un nom différent, en tous cas si $_POST['LIBELLE_CAT'] n'existe pas c'est qu'aucun champ de ton formulaire ne porte le nom de 'LIBELLE_CAT' (sauf si c'est une case à cocher, auquel cas cela ne renvoie rien si l'on a rien coché)
    Quel est le nom de l'input de ton formulaire qui est censé envoyer $_POST['LIBELLE_CAT'] ?

  12. #12
    Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    ah ok, et c'est libelle le nom de l'input de LIBELLE_CAT

  13. #13
    Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    alors, j'ai donc changer le nom de l'input a LIBELLE_CAT et ça a marché, merci merci de ton aide!!

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

Discussions similaires

  1. [MySQL] requete update avec fonction php sur champs
    Par SpaceFrog dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/10/2008, 09h14
  2. [MySQL] fonction update en php avec mysql
    Par khamett dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/04/2008, 13h33
  3. [SQL] Requête UPDATE qui ne s'exécute pas avec PHP
    Par xplose dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 16/08/2007, 09h42
  4. [Conception] Pb update avec formulaires php
    Par Manu_Corp dans le forum PHP & Base de données
    Réponses: 47
    Dernier message: 28/08/2006, 17h51
  5. multi update avec php/ mysql
    Par arnoweb dans le forum Administration
    Réponses: 1
    Dernier message: 17/11/2005, 22h10

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