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 :

[INSERT] La requête ne s'effectue pas..


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Par défaut [INSERT] La requête ne s'effectue pas..
    Bonjour,

    Depuis ce matin je bloque sur une requête que j'ai modifié et qui fonctionnait correctement dans le passé, je ne sais pas d'où vient le problème mais lorsque je submit, je n'ai droit à aucune erreur et pourtant la requête ne s'effectue pas dans la base de donnée..
    J'ai compté les paramètres etc et tout est bon à ce niveau là, serai-ce une erreur de syntaxe ?..

    Je vous met le code à disposition pour qui voudra bien m'aider à résoudre ce mystère :

    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
    // Passer la date anglaise sous format français
    function datetofr($v)
    {
        $Date = new DateTime($v);
        $LaDate = $Date->format("d-m-Y"); // Notre format souhaite
        return $LaDate; //on retourne la valeur
    }
    // Récupérer et insérer les valeurs dans la BDD
    if (isset($_POST['submit'])) {
      $Nom = $_POST['Nom'];
      $Prenom = $_POST['Prenom'];
      $Datedenaissance = datetofr($_POST['Datedenaissance']);
      $Ville = $_POST['Ville'];
      $CodePostale = $_POST['CodePostale'];
      $Adresse = $_POST['Adresse'];
      $Telephone = $_POST['Telephone'];
      $Email = $_POST['Email'];
      $Sexe = $_POST['Sexe'];
      $Dernierdiplome = $_POST['Dernierdiplome'];
      $QPV = $_POST['QPV'];
      $Sourcing = $_POST['Sourcing'];
      $Formationvise = $_POST['Formationvise'];
      $Specialitee = $_POST['Specialitee'];
      $Niveau = $_POST['Niveau'];
      $Metier = $_POST['Metier'];
      $Contratvise = $_POST['Contratvise'];
      $Rythme = $_POST['Rythme'];
      $Structure = $_POST['Structure'];
      $Entreprise = $_POST['Entreprise'];
      $Commentaires = $_POST['Commentaires'];
      $Recrutement = $_POST['Recrutement'];
      $Prequalif = $_POST['Prequalif'];
      $Participation = $_POST['Participation'];
        // Vérifier si champs sourcing/rythme = Autres / Si vérif, prendre la valeur du champs Autres plutôt que la valeur Sourcing
        if ($_POST['Sourcing'] == "Autres") {
            $_POST['Sourcing'] = $_POST['SourcingAutres'];
        }
        if ($_POST['Rythme'] == "Autres") {
            $_POST['Rythme'] = $_POST['RythmeAutres'];
        }
        // Requête vers BDD
        $request = $db->prepare("INSERT INTO BDD (Nom, Prenom, Datedenaissance, Ville, CodePostale, Adresse, Telephone, Email, Sexe, Dernierdiplome, QPV, Sourcing, Formationvise, Specialitee, Niveau, Metier, Contratvise, Rythme, Structure, Entreprise, Commentaires, Recrutement, Prequalif, Participation) VALUES (:Nom, :Prenom, :Datedenaissance, :Ville, :CodePostale, :Adresse, :Telephone, :Email, :Sexe, :Dernierdiplome, :QPV, :Sourcing, :Formationvise, :Specialitee, :Niveau, :Metier, :Contratvise, :Rythme, :Structure, :Entreprise, :Commentaires, :Recrutement, :Prequalif, :Participation)");
        $request->bindParam(':Nom', $Nom);
        $request->bindParam(':Prenom', $Prenom);
        $request->bindParam(':Datedenaissance', $Datedenaissance);
        $request->bindParam(':Ville', $Ville);
        $request->bindParam(':CodePostale', $CodePostale);
        $request->bindParam(':Adresse', $Adresse);
        $request->bindParam(':Telephone', $Telephone);
        $request->bindParam(':Email', $Email);
        $request->bindParam(':Sexe', $Sexe);
        $request->bindParam(':Dernierdiplome', $Dernierdiplome);
        $request->bindParam(':QPV', $QPV);
        $request->bindParam(':Sourcing', $Sourcing);
        $request->bindParam(':Formationvise', $Formationvise);
        $request->bindParam(':Specialitee', $Specialitee);
        $request->bindParam(':Niveau', $Niveau);
        $request->bindParam(':Metier', $Metier);
        $request->bindParam(':Contratvise', $Contratvise);
        $request->bindParam(':Rythme', $Rythme);
        $request->bindParam(':Structure', $Structure);
        $request->bindParam(':Entreprise', $Entreprise);
        $request->bindParam(':Commentaires', $Commentaires);
        $request->bindParam(':Recrutement', $Recrutement);
        $request->bindParam(':Prequalif', $Prequalif);
        $request->bindParam(':Participation', $Participation);
        // Vérif si requête executée ou non
        if ($request) {
            $_SESSION['notifadd'] = "success";
            header('Location: list.php');
        } else {
            $_SESSION['notifadd'] = "error";
            header('Location: list.php');
        }
    Un grand merci d'avance.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    salut,

    elle est où la commande d'exécution de la requête d'insertion : $request->execute(); ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Par défaut
    Bonjour rawsrc,

    Ahahahah, quel idiot je suis, effectivement à force de modifier toute la matinée mon code je suis passé à côté du plus important
    Malheureusement, cela n'a pas résolut le soucis mais un grand merci ahah..

    Je remet le code entier si ça peut aider :

    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
    <?php
    session_start(); // AU TOUT DEBUT du fichier
    // ----------------------
    // Connexion BDD
    include('include_db.php');
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    // ----------------------
    // Vérif si utilisateur connecté
    if (empty($_SESSION['Prenom'])) {
        header('Location: index.php');
    }
    // Passer la date anglaise sous format français
    function datetofr($v)
    {
        $Date = new DateTime($v);
        $LaDate = $Date->format("d-m-Y"); // Notre format souhaite
        return $LaDate; //on retourne la valeur
    }
    // Récupérer et insérer les valeurs dans la BDD
    if (isset($_POST['submit'])) {
      $Nom = $_POST['Nom'];
      $Prenom = $_POST['Prenom'];
      $Datedenaissance = datetofr($_POST['Datedenaissance']);
      $Ville = $_POST['Ville'];
      $CodePostale = $_POST['CodePostale'];
      $Adresse = $_POST['Adresse'];
      $Telephone = $_POST['Telephone'];
      $Email = $_POST['Email'];
      $Sexe = $_POST['Sexe'];
      $Dernierdiplome = $_POST['Dernierdiplome'];
      $QPV = $_POST['QPV'];
      $Sourcing = $_POST['Sourcing'];
      $Formationvise = $_POST['Formationvise'];
      $Specialitee = $_POST['Specialitee'];
      $Niveau = $_POST['Niveau'];
      $Metier = $_POST['Metier'];
      $Contratvise = $_POST['Contratvise'];
      $Rythme = $_POST['Rythme'];
      $Structure = $_POST['Structure'];
      $Entreprise = $_POST['Entreprise'];
      $Commentaires = $_POST['Commentaires'];
      $Recrutement = $_POST['Recrutement'];
      $Prequalif = $_POST['Prequalif'];
      $Participation = $_POST['Participation'];
        // Vérifier si champs sourcing/rythme = Autres / Si vérif, prendre la valeur du champs Autres plutôt que la valeur Sourcing
        if ($_POST['Sourcing'] == "Autres") {
            $_POST['Sourcing'] = $_POST['SourcingAutres'];
        }
        if ($_POST['Rythme'] == "Autres") {
            $_POST['Rythme'] = $_POST['RythmeAutres'];
        }
        // Requête vers BDD
        try {
        $request = $db->prepare("INSERT INTO BDD (Nom, Prenom, Datedenaissance, Ville, CodePostale, Adresse, Telephone, Email, Sexe, Dernierdiplome, QPV, Sourcing, Formationvise, Specialitee, Niveau, Metier, Contratvise, Rythme, Structure, Entreprise, Commentaires, Recrutement, Prequalif, Participation) VALUES (:Nom, :Prenom, :Datedenaissance, :Ville, :CodePostale, :Adresse, :Telephone, :Email, :Sexe, :Dernierdiplome, :QPV, :Sourcing, :Formationvise, :Specialitee, :Niveau, :Metier, :Contratvise, :Rythme, :Structure, :Entreprise, :Commentaires, :Recrutement, :Prequalif, :Participation)");
        $request->bindParam(':Nom', $Nom);
        $request->bindParam(':Prenom', $Prenom);
        $request->bindParam(':Datedenaissance', $Datedenaissance);
        $request->bindParam(':Ville', $Ville);
        $request->bindParam(':CodePostale', $CodePostale);
        $request->bindParam(':Adresse', $Adresse);
        $request->bindParam(':Telephone', $Telephone);
        $request->bindParam(':Email', $Email);
        $request->bindParam(':Sexe', $Sexe);
        $request->bindParam(':Dernierdiplome', $Dernierdiplome);
        $request->bindParam(':QPV', $QPV);
        $request->bindParam(':Sourcing', $Sourcing);
        $request->bindParam(':Formationvise', $Formationvise);
        $request->bindParam(':Specialitee', $Specialitee);
        $request->bindParam(':Niveau', $Niveau);
        $request->bindParam(':Metier', $Metier);
        $request->bindParam(':Contratvise', $Contratvise);
        $request->bindParam(':Rythme', $Rythme);
        $request->bindParam(':Structure', $Structure);
        $request->bindParam(':Entreprise', $Entreprise);
        $request->bindParam(':Commentaires', $Commentaires);
        $request->bindParam(':Recrutement', $Recrutement);
        $request->bindParam(':Prequalif', $Prequalif);
        $request->bindParam(':Participation', $Participation);
        $request->execute();
        } catch (Exception $e) {
          echo $e->getMessage();
      }
        // Vérif si requête executée ou non
        if ($request) {
            $_SESSION['notifadd'] = "success";
        } else {
            $_SESSION['notifadd'] = "error";
        }
    }
    ?>

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    tu ne t'assures pas assez de la présence ou de l'absence des données, tu ne dois pas faire confiance mais alors pas du tout à ce qui est censé arriver de l'extérieur : tu dois toujours tout vérifier.
    Quelle version de PHP visée ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Par défaut
    C'est à dire ? Disons que j'ai mis les champs en défaut = NULL du côté de la bdd donc pas réellement besoin de vérifier la présence de valeurs dans les différents posts il devrait insérer les éléments présents ?
    Actuellement en version 7.2.1

    Je te remercie,

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    du tout, il y a une différence entre une chaîne vide "" et null. Si la valeur par défaut dans la base de données est NULL, le mieux c'est d'ignorer en PHP le champ en question et de construire la chaîne sql en conséquence.
    Après pour savoir ce qui est attendu par la base de données pour tous les champs, c'est une autre histoire.
    Je me rends compte que dans ton code, que les données soient présentes ou pas, qu'elles soient valides ou pas, tu acceptes tout !
    Tu ne vérifie même pas la validité de l'adresse email, la date pareil : tu supposes qu'elle doit être bien formatée, le sexe idem...
    Bref, faut d'abord que tu t'attardes sur comment faire pour remonter les erreurs de saisie quand les données reçues ne sont pas valides.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Par défaut
    Ah d'accord, je n'avais jamais eu de soucis du côté des requêtes du coup je n'avais pas réellement pris soin de faire ça, du coup rajouter une condition if entre chaque récupération d'info au niveau des variables ? else = NULL ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Par défaut
    Je viens de voir la modification de ton message précédent, si si, je vérifie tout ça du côté du formulaire en HTML grâce aux patterns et aux input type !
    C'est pour cela que je n'ai pas besoin d'effectuer la gestion d'erreur du côté php..

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

    Quelques remarques...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Vérif si utilisateur connecté
    if (empty($_SESSION['Prenom'])) {
        header('Location: index.php');
    }
    Généralement, on met plutôt l'id du membre (index auto-incrémenté donc UNIQUE) en SESSION.
    Ça facilite notamment la récupération de toutes ses données si nécessaire ($_SESSION['Prenom'] ne permet pas de cibler formellement le membre, puisque plusieurs membres peuvent avoir le même prénom !)
    Optionnellement (pour éviter du requête SQL), on peut mettre aussi en SESSION son prénom/nom/...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        $request->bindParam(':Nom', $Nom);
    Tel que ton code est écrit, il est préférable d'utiliser bindValue() au lieu de bindParam().
    Contrairement à PDOStatement::bindValue(), la variable est liée en tant que référence et ne sera évaluée qu'au moment de l'appel à la fonction PDOStatement::execute().
    De plus, l'intérêt d'utiliser cette syntaxe (avec bindParam() ou bindValue()), et de définir le $data_type : PDO::PARAM_STR, PDO::PARAM_INT,....
    Sinon, autant utiliser la syntaxe avec un array dans le ->execute().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom <font color="red">*</font>
    La balise <font> est obsolète. On utilise un <span class="..."> et du CSS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input ... onclick="this.value='';" .../>
    A quoi sert ce onclick ? (inutile)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select ...>
         <option>OUI AD</option>
    Il est toujours préférable de mettre un attribut value="..." aux <option> (dont la valeur peut être différente du texte affiché).
    Dernière modification par Invité ; 07/02/2020 à 17h07.

Discussions similaires

  1. [PDO] Requête ne s'effectue pas
    Par totalgaara dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 27/03/2018, 11h15
  2. [MySQL] Requête de mise à jour qui n'effectue pas la modif
    Par Zhebulon dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 23/07/2009, 14h54
  3. [MySQL] Ma requête php n'effectue pas la modification
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 01/03/2006, 17h18
  4. Ma requête n'effectue pas la modification
    Par leloup84 dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/03/2006, 16h43
  5. [sgbd] [CGI + MySQL] Insert ne s'effectuant pas
    Par GLDavid dans le forum SGBD
    Réponses: 3
    Dernier message: 27/07/2004, 02h43

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