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 Syntaxe SQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Par défaut Erreur Syntaxe SQL
    Bonjour bonjour,

    Voila j'aimerai créer un module de modification de données depuis un formulaire j'ai commencé et voila le résultat :
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
    <div id="aft">
     <!-- frm Search
    ================================================== -->
    <fieldset class="frmsearch">
            <legend class="ttr1"><h4>Rechercher d'un salarié</h4></legend>
            <p class="txt">Saisir le<b> matricule :</b></p>
              <form  method="POST">
                <input type="text" placeholder="Matricule du salarié" name="matricule">
                <p class="txt">Ou saisir le <b>Nom</b> et <b>Prenom :</b></p>
                <input type="text" placeholder="Nom du salarié" name="nom">
                <input type="text" placeholder="Prénom du salarié" name="prenom">
                <input class="bigbtn" type="submit" value="Rechercher" name="searchbtn" action="creationfeuille.html">
                <input class="bigbtn" type="reset" name="reset" value="Réinitialiser">
              </form>
    </fieldset>
    <?php
    // 1- récupération
        $matricule_search = ( !empty($_POST['matricule_search']) )? $_POST['matricule_search'] : '';
        $nom_search = ( !empty($_POST['nom_search']) )? $_POST['nom_search'] : '';
        $prenom_search = ( !empty($_POST['prenom_search']) )? $_POST['prenom_search'] : '';
     
    // 2- initialisation 
        $where = array();
        $params = array();
     
     
    // 3- construction de la requête 
    if( !empty($matricule_search) )
      {
        $where[] = " (matricule_employe LIKE ?) ";
        $params[] = '%'.$matricule_search.'%';
      }
     
     
    if( !empty($nom_search) && !empty($prenom_search) )
      {
        $where[] = " (nom_employe LIKE ? AND prenom_employe LIKE ?) ";
        $params[] = '%'.$nom_search.'%';
        $params[] = '%'.$prenom_search.'%';
      }
     
     
    // 4- clause WHERE
      $where = ( !empty($where) )? " WHERE " . implode( " OR ", $where ) : ""; // OR : l'un OU l'autre
     
        $matricule_employe=$_POST['matricule_employe'];
        $nom_employe=$_POST['nom_employe'];
        $prenom_employe=$_POST['prenom_employe'];
        $datenaiss_employe=$_POST['datenaiss_employe'];
        $date_embauche_employe=$_POST['date_embauche_employe'];
        $photo_employe=$_POST['photo_employe'];
        $contrat_employe=$_POST['contrat_employe'];
        $fonction_employe=$_POST['fonction_employe'];
        $statut_employe=$_POST['statut_employe'];
        $carte_identite_employe=$_POST['carte_identite_employe'];
        $carte_btp_employe=$_POST['carte_btp_employe'];
     
    // 5- finalisation :
      $sql = "UDAPTE employe_table SET matricule_employe =".$_POST['matricule_employe'].", nom_employe =".$_POST['nom_employe'].", prenom_employe =".$_POST['prenom_employe'].", datenaiss_employe =".$_POST['datenaiss_employe'].", date_embauche_employe =".$_POST['date_embauche_employe'].", 
      photo_employe =".$_POST['photo_employe']." , contrat_employe =".$_POST['contrat_employe']." , fonction_employe =".$_POST['fonction_employe'].", statut_employe =".$_POST['statut_employe']." , carte_identite_employe =".$_POST['carte_identite_employe'].", carte_btp_employe =".$_POST['carte_btp_employe']."" . $where . "";
     
      $db = include 'includes/connect_bdd.php';
      try { 
        //la ligne qui lance la requête préparée
        $stmt = $db->prepare($sql);
        //on affecte les marqueurs précis sur les filtres
        $stmt->execute(array('matricule_employe' => $matricule_employe,'nom_employe' => $nom_employe,'prenom_employe' => $prenom_employe,
        'datenaiss_employe' => $datenaiss_employe,'date_embauche_employe' => $date_embauche_employe,'photo_employe' => $photo_employe,'contrat_employe' => $contrat_employe,
        'fonction_employe' => $fonction_employe,'statut_employe' =>$statut_employe,'carte_identite_employe' =>$carte_identite_employe,'carte_btp_employe' =>$carte_btp_employe));
     } 
     catch (Exception $e) {
        //s'il y a un problème PHP ou SQL, tout s'affichera ici
        print "Erreur ! " . $e->getMessage() . "<br/>";
     }
    ?>
    <!-- frm de création de fiche signalitique 
     
    ================================================== -->
    <fieldset  class="form">
            <legend class="ttr1"><h4>Fiche signalétique</h4></legend>
        <form action="index.php" method="post">
     
        <p class="contact"><label class="txt2"> Saisir le <b>Matricule :</b></label><br/></p>
            <input type="text" placeholder="Matricule du salarié" name="matricule" required >
     
         <p class="contact"> <label class="txt2"> Saisir le <b>Nom</b>:</label></p>
            <input type="text" placeholder="Nom du salarié" name="nomslr"><br/>
     
        <p class="contact"><label class="txt2"> Saisir le <b>Prenom</b> : </label></p>
            <input type="text" placeholder="Prénom du salarié" name="prenomslr"></label><br/>
     
        <p class="contact"><label class="txt2"> Saisir la <b>Date de naissance</b> : </label></p>
            <input type="date" placeholder="Date de naissance du salarié" name="datedenaissanceslr"><br/>
     
        <p class="contact"><label class="txt2"> Saisir la <b>Date d'entrée dans l'entreprise</b> :</label></p>
            <input type="date" placeholder="Date d'entrée dans l'entreprise" name="dateentreeentreprise"><br/>
     
        <p class="contact"><label class="txt2" for="photoprofil">Fichier <b> Photo de profil</b> (PDF, PNG, JPG |max. 1 Mo):</label></p>
          <input type="hidden" name="MAX_FILE_SIZE" id="1048576" >
          <input type="file" name="photoprofil" id="photoprofil"><br/>
     
        <p class="contact"><label class="txt2"> Saisir le <b>Contrat</b> :</label></p>
                <select name="contrat">
                    <option value="CDI">CDI</option>
                </select><br/><br/>
        <p class="contact"><label class="txt2"> Saisir la <b>Fonction</b> : </label></p>
             <select name="fonction">
             <optgroup label="Cadre">
                                <option value="Responsable_administratif_et_comptable">Responsable administratif et comptable</option>
                                <option >Chef</option>
                        </optgroup>
                        <optgroup label="Etam">
     
                                <option >Employée administratif</option>
     
                        </optgroup>
     
                        <optgroup label="Ouvrier">
                                <option >Ouvrier</option>
                        </optgroup>
             </select> <br/><br/>
     
            <p class="contact"><label class="txt2"> Saisir le <b>Statut</b> : </label></p>
             <select name="Statut">
                <option value="cadre">Cadre</option>
              </select><br/>
     
            <p class="contact"><label class="txt2" for="carteidentite">Fichier <b>carte d'identité </b>(PDF, PNG, JPG |max. 1 Mo):</label></p>
              <input type="hidden" name="MAX_FILE_SIZE" id="1048576" >
              <input type="file" name="carteidentite" id="carteidentite"><br/>
     
            <p class="contact"><label class="txt2" for="carteBTP">Fichier <b>carte identification professionnelle  BTP </b>(PDF, PNG, JPG |max. 1 Mo):</label></p>
              <input type="hidden" name="MAX_FILE_SIZE" id="1048576" >
              <input type="file" name="carteBTP" id="carteBTP">
     
            </br><label class="txt2"> <input type="submit" value="Valider" name="Valider" action="creationfeuille.html"></label><br/>
              <label class="txt2"> <input type="reset" value="Reinitialiser" name="Réinitialiser" action="creationfeuille.html"></label><br/>
        </form>
    </fieldset>
     
    </div>
    </body>
    </html>
    Voici le message d'erreur :

    Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UDAPTE employe_table SET matricule_employe =, nom_employe =, prenom_employe =, d' at line 1
    Donc il y a bien une erreur de syntaxe

    Donc je voulais savoir si vous pouvez m'aider

    PS : Si vous voulez plus informations n'hésitez pas

  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
    Une requête préparée ça fonctionne comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = "UDAPTE employe_table SET matricule_employe = :matricule_employe , nom_employe = :nom_employe, prenom_employe = :prenom_employe, datenaiss_employe = :datenaiss_employe, etc.;
    Par contre il faut revoir la logique : tu ne peux pas lancer l'update sans savoir quels sont tes résultats de recherche.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    1- UDAPTE ??

    2- tu mélanges le code que je t'ai donné pour une recherche multi-critères avec un code de modification...

    3- il faut être plus rigoureux et logique.
    1. Récupération des données
    2. Gestion des erreurs
    3. Construction de la requête
    4. Preparation / Exécution

    Mais d'abord, on fait une recherche personnelle : ce ne sont pas les exemples de codes qui manquent.

  4. #4
    Membre confirmé Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Par défaut
    Ok merci pour ta réponse

    Ce que j'aimerai faire c'est un module de modification en fonction du matricule

    c'est pour ça que j'ai le module de recherche mais c'est une mauvaise idée

  5. #5
    Invité
    Invité(e)
    Par défaut
    Non. C'est une mauvaise connaissance.

    Au lieu de vouloir ré-inventer la roue : recherche ce qui a déjà été fait !!

    Et prends un papier et un crayon pour noter tout, logiquement, et étape par étape.
    Dernière modification par Invité ; 02/07/2018 à 12h15.

  6. #6
    Membre confirmé Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Par défaut
    Ok merci du conseil

  7. #7
    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
    Un exemple d'étapes à suivre :
    1. l'utilisateur fait une recherche via un formulaire
    2. le script recherche en base et affiche les résultats, en général dans un tableau
    3. l'utilisateur sélectionne un élément à modifier dans le tableau
    4. le script affiche le formulaire de modification pré-rempli avec les données de l'élément sélectionné
    5. l'utilisateur modifie et envoie le formulaire
    6. le script enregistre en base les modifications envoyées

    Il y a des variations possibles. Par exemple, si tu fais une recherche exacte sur un champ unique (je suppose que le matricule est unique), ou une sélection dans une liste déroulante, tu peux sauter directement de la recherche au formulaire de modification.
    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]

  8. #8
    Membre confirmé Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Par défaut
    Ok merci mais je sens que je vais galérer comme même

  9. #9
    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
    Un bon début est de faire une étape à la fois
    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]

  10. #10
    Membre confirmé Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Par défaut
    Citation Envoyé par Celira Voir le message
    Un bon début est de faire une étape à la fois
    Je suis d'accord avec vous mais je ne comprends mon erreur de syntaxe la :
    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
     
    <?php
     
    try {
     $db = include 'includes/connect_bdd.php';
     
    if(isset($_POST['update'])) {
     
      $matricule_employe=$_POST['matricule_employe'];
      $nom_employe=$_POST['nom_employe'];
      $prenom_employe=$_POST['prenom_employe'];
      $datenaiss_employe=$_POST['datenaiss_employe'];
      $date_embauche_employe=$_POST['date_embauche_employe'];
      $photo_employe=$_POST['photo_employe'];
      $contrat_employe=$_POST['contrat_employe'];
      $fonction_employe=$_POST['fonction_employe'];
      $statut_employe=$_POST['statut_employe'];
      $carte_identite_employe=$_POST['carte_identite_employe'];
      $carte_btp_employe=$_POST['carte_btp_employe'];
     
    $sql =("UPDATE `employe_table` SET `nom_employe` = :nom_employe,
                                       `prenom_employe` = :prenom_employe, 
                                       `datenaiss_employe` = :datenaiss_employe, 
                                       `date_embauche_employe` = :date_embauche_employe, 
                                       `photo_employe` = :photo_employe, 
                                       `contrat_employe` = :contrat_employe, 
                                       `fonction_employe` = :fonction_employe, 
                                       `statut_employe` = :statut_employe, 
                                       `carte_identite_employe` = :carte_identite_employe, 
                                       `carte_btp_employe` = :carte_btp_employe,
                                    WHERE `matricule_employe` = :matricule_employe");
     
      $stmt = $db->prepare($sql);
     
      $stmt->execute($sql);
    }
    }
    catch (Exception $e) {
      //s'il y a un problème PHP ou SQL, tout s'affichera ici
      print "Erreur ! " . $e->getMessage() . "<br/>";
    }
     
    ?>
    Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `matricule_employe` = ?' at line 11
    c'est cette erreur j'aimerai bien savoir si elle vient de la syntaxe
    ou de moi (je pense que c'est moi mais je vois pas où)

  11. #11
    Invité
    Invité(e)
    Par défaut
    1- Tu as déjà fait la 1ere étape (recherche multi-critères).

    2- Passe à la suivante :
    • Afficher les résultats, dans un tableau <table> (car il peut y en avoir plusieurs)
    • Pour chaque résultat, mettre un bouton ou un lien "modifier" (avec en paramètre l'id de la ligne)

    3- la 3eme étape consiste alors, APRES clic sur le bouton/lien :
    • À récupérer l'id transmis
    • À récupérer en BDD les autres infos de la ligne grâce à cet id
    • À afficher un formulaire, pré-rempli avec ces infos (dans des input/textarea/select)

    4- étape 4, Traiter ce formulaire après soumission :
    • Récupération / gestion d'erreur
    • Enregistrement en bdd
    • Ou Ré-affichage du formulaire en cas d'erreur


    Important :
    Chaque étape nécessite une action (clic sur un bouton/lien, soumission de formulaire) pour passer à la suivante.
    Tu ne peux donc PAS tout faire en vrac, à la suite, dans un seul script (en tout cas, pas quand on débute !)
    Dernière modification par Invité ; 02/07/2018 à 15h54.

  12. #12
    Invité
    Invité(e)
    Par défaut
    L'erreur (WHERE `matricule_employe` = ?) ne correspond pas
    à la requête que tu montres (WHERE `matricule_employe` = :matricule_employe)

    N.B. le message d'erreur indique un numéro de ligne (...line...): c'est là qu'il faut regarder.

  13. #13
    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
    BOn, sinon, il y a une virgule en trop juste avant le where dans ta requête.
    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]

  14. #14
    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
    ♫ ♪ Maman, les petits programmes ont ils des jambes ?

    Sérieusement, non, ça ne va pas pas fonctionner :
    Là tu es censé passer en paramètres les valeurs des champs de ta requête préparée.

    PDO une soupe et au lit ! et son grande frère Comprendre PDO
    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]

  15. #15
    Membre confirmé Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Par défaut
    Bonjour,

    Voici le code avec les valeurs des champs de ta requête préparée. (Que j'avais oublié effectivement)

    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
    <?php
     
    try {
      //Connection à la base de données
     $db = include 'includes/connect_bdd.php';
     
      $matricule_employe=$_POST['matricule_employe'];
      $nom_employe=$_POST['nom_employe'];
      $prenom_employe=$_POST['prenom_employe'];
      $datenaiss_employe=$_POST['datenaiss_employe'];
      $date_embauche_employe=$_POST['date_embauche_employe'];
      $photo_employe=$_POST['photo_employe'];
      $contrat_employe=$_POST['contrat_employe'];
      $fonction_employe=$_POST['fonction_employe'];
      $statut_employe=$_POST['statut_employe'];
      $carte_identite_employe=$_POST['carte_identite_employe'];
      $carte_btp_employe=$_POST['carte_btp_employe'];
      //Requete SQL 
    $sql =("UPDATE `employe_table` SET nom_employe = :nom_employe,
                                       prenom_employe = :prenom_employe, 
                                       datenaiss_employe = :datenaiss_employe, 
                                       date_embauche_employe = :date_embauche_employe, 
                                       photo_employe = :photo_employe, 
                                       contrat_employe = :contrat_employe, 
                                       fonction_employe = :fonction_employe, 
                                       statut_employe = :statut_employe, 
                                       carte_identite_employe = :carte_identite_employe, 
                                       carte_btp_employe = :carte_btp_employe
                                    WHERE matricule_employe = :matricule_employe");
      //PREPARE                
      $stmt = $db->prepare($sql);
      //EXECUTE
      $stmt->execute(array($matricule_employe, $nom_employe, $prenom_employe, $datenaiss_employe, $date_embauche_employe, $photo_employe, $contrat_employe, $fonction_employe,$statut_employe,$carte_identite_employe,$carte_btp_employe));
     
    $nb_update = $stmt->rowCount();
    echo $nb_update.' modif effectuée<br/>';
    unset($db);
    }
     
    catch (Exception $e) {
      //s'il y a un problème PHP ou SQL, tout s'affichera ici
      print "Erreur ! " . $e->getMessage() . "<br/>";
    }
     
    ?>
    Y a t'il encore quelques chose que j'ai oublié

  16. #16
    Invité
    Invité(e)
    Par défaut
    Oui.

    Tu mélanges les 2 syntaxes :
    • avec placeholders anonymes (?)
    • avec placeholders nommés (:blabla)

    execute(array(...)) n'est pas le même dans les 2 cas.

  17. #17
    Membre confirmé Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Par défaut
    euh je suis un peu perdu j'aimerai utiliser la syntaxe (:blabla)

    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
     
    try {
      //Connection à la base de données
     $db = include 'includes/connect_bdd.php';
     
     
      $nom_employe=$_POST['nom_employe'];
      $prenom_employe=$_POST['prenom_employe'];
      $datenaiss_employe=$_POST['datenaiss_employe'];
      $date_embauche_employe=$_POST['date_embauche_employe'];
      $photo_employe=$_POST['photo_employe'];
      $contrat_employe=$_POST['contrat_employe'];
      $fonction_employe=$_POST['fonction_employe'];
      $statut_employe=$_POST['statut_employe'];
      $carte_identite_employe=$_POST['carte_identite_employe'];
      $carte_btp_employe=$_POST['carte_btp_employe'];
      $matricule_employe=$_POST['matricule_employe'];
      //Requete SQL 
    $sql =("UPDATE `employe_table` SET nom_employe = :nom_employe,
                                       prenom_employe = :prenom_employe, 
                                       datenaiss_employe = :datenaiss_employe, 
                                       date_embauche_employe = :date_embauche_employe, 
                                       photo_employe = :photo_employe, 
                                       contrat_employe = :contrat_employe, 
                                       fonction_employe = :fonction_employe, 
                                       statut_employe = :statut_employe, 
                                       carte_identite_employe = :carte_identite_employe, 
                                       carte_btp_employe = :carte_btp_employe
                                    WHERE matricule_employe = :matricule_employe");
      //PREPARE                
      $stmt = $db->prepare($sql);
      //EXECUTE
      $stmt->execute(array(
        'nom_employe' => $nom_employe,
        'prenom_employe' => $prenom_employe,
        'datenaiss_employe' => $datenaiss_employe,
        'date_embauche_employe' => $date_embauche_employe,
        'photo_employe' => $photo_employe,
        'contrat_employe' => $contrat_employe,
        'fonction_employe' => $fonction_employe,
        'statut_employe' => $statut_employe,
        'carte_identite_employe' => $carte_identite_employe,
        'nom_emcarte_btp_employeploye' => $carte_btp_employe,
        'matricule_employe' => $matricule_employe
        ));
     
    $nb_update = $stmt->rowCount();
    echo $nb_update.' modif effectuée<br/>';
    unset($db);
    }
     
    catch (Exception $e) {
      //s'il y a un problème PHP ou SQL, tout s'affichera ici
      print "Erreur ! " . $e->getMessage() . "<br/>";
    }
     
    ?>
    Du coup j'ai fait ça

  18. #18
    Invité
    Invité(e)
    Par défaut
    C'est presque ça !
    Il faut ajouter les ":"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      $stmt->execute(array(
        ':nom_employe' => $nom_employe,
        ':prenom_employe' => $prenom_employe,
     
    .....
    Et il faut corriger 'nom_emcarte_btp_employeploye' !

  19. #19
    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
    Pour explication : le principe de la syntaxe avec des marqueurs nommés, c'est d'utiliser le nom du marqueur pour identifier le paramètre.
    Exemple :
    Si j'ai une requête de ce type en SQL
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE utilisateur SET usr_name = 'Celira' where usr_id = 42
    En requête préparée, ça va donner quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sth = $pdo->prepare('UPDATE utilisateur SET usr_name = :nom where usr_id = :id');
    $sth->execute([':nom' => 'Celira', ':id' => '42']);
    Les marqueurs étant ":nom" et ":id" dans la requête et on les retrouve comme clés du tableau (Note : on a les ":" au début du nom dans la clé aussi).
    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]

  20. #20
    Membre confirmé Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Par défaut
    Oups j'avais oublié

    Mais y a une erreur
    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
    <?php
     
    try {
      //Connection à la base de données
     $db = include 'includes/connect_bdd.php';
     
     $matricule_employe=$_POST['matricule_employe'];
      $nom_employe=$_POST['nom_employe'];
      $prenom_employe=$_POST['prenom_employe'];
      $datenaiss_employe=$_POST['datenaiss_employe'];
      $date_embauche_employe=$_POST['date_embauche_employe'];
      $photo_employe=$_POST['photo_employe'];
      $contrat_employe=$_POST['contrat_employe'];
      $fonction_employe=$_POST['fonction_employe'];
      $statut_employe=$_POST['statut_employe'];
      $carte_identite_employe=$_POST['carte_identite_employe'];
      $carte_btp_employe=$_POST['carte_btp_employe'];
     
      //Requete SQL 
    $sql =("UPDATE `employe_table` SET nom_employe = :nom_employe,
                                       prenom_employe = :prenom_employe, 
                                       datenaiss_employe = :datenaiss_employe, 
                                       date_embauche_employe = :date_embauche_employe, 
                                       photo_employe = :photo_employe, 
                                       contrat_employe = :contrat_employe, 
                                       fonction_employe = :fonction_employe, 
                                       statut_employe = :statut_employe, 
                                       carte_identite_employe = :carte_identite_employe, 
                                       carte_btp_employe = :carte_btp_employe
                                    WHERE matricule_employe = :matricule_employe");
      //PREPARE                
      $stmt = $db->prepare($sql);
      //EXECUTE
      $stmt->execute(array(
        ':matricule_employe' => $matricule_employe,
        ':nom_employe' => $nom_employe,
        ':prenom_employe' => $prenom_employe,
        ':datenaiss_employe' => $datenaiss_employe,
        ':date_embauche_employe' => $date_embauche_employe,
        ':photo_employe' => $photo_employe,
        ':contrat_employe' => $contrat_employe,
        ':fonction_employe' => $fonction_employe,
        ':statut_employe' => $statut_employe,
        ':carte_identite_employe' => $carte_identite_employe,
        ':nom_emcarte_btp_employeploye' => $carte_btp_employe
     
        ));
     
    $nb_update = $stmt->rowCount();
    echo $nb_update.' modif effectuée<br/>';
    unset($db);
    }
     
    catch (Exception $e) {
      //s'il y a un problème PHP ou SQL, tout s'affichera ici
      print "Erreur ! " . $e->getMessage() . "<br/>";
    }
     
    ?>

    L'erreur est la suivante :
    Erreur ! SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

    Erreur! SQLSTATE [HY093]: Numéro de paramètre non valide: le paramètre n'a pas été défini

    Pourtant tout les parametres ont été fait

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

Discussions similaires

  1. Erreur syntaxe SQL
    Par _developpeur_ dans le forum VBA Access
    Réponses: 4
    Dernier message: 04/07/2011, 21h14
  2. Erreur syntaxe SQL
    Par sgcb01 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 20/11/2008, 10h18
  3. Erreur syntaxe SQL DELETE avec sous requête
    Par jeanbenoit1987 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/12/2007, 12h14
  4. Erreur syntaxe SQL
    Par diaboloche dans le forum Access
    Réponses: 2
    Dernier message: 02/02/2007, 17h30
  5. Erreur syntaxe SQL
    Par SaeZ dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/06/2006, 13h04

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