Insertion de données variables dans une base mysql

Résolu
kmorel Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous!
j'essaie d'insérer de nouvelles entrées dans ma base sql à partir de données variables récupérées à base d'un formulaire; et bien qu'aucune erreur ne s'affiche, les données ne sont pas enrégistrées dans la base de données.
j'ai besoin de votre aide.
Voici le code php mysql que j'ai saisi:

<?php try{$bdd = new PDO('mysql:host=localhost;dbname=réveil;charset=utf8', 'root', '',array(PDO::ATTR_ERRMODE =>PDO::ERRMODE_EXCEPTION));}catch(Exception $e){die('Erreur : '.$e->getMessage());} ?>

<?php $nom=$_POST['nom']; $prenom=$_POST['prenom']; $sexe=$_POST['sexe']; $naissance=$_POST['année']; $diplome=$_POST['diplome']; $metier= $_POST['metier'];
$pays=$_POST['pays']; $ville=$_POST['ville']; $code=$_POST['code_pays']; $phone=$_POST['phone']; $mail=$_POST['mail'];
$req = $bdd->prepare('INSERT INTO info_membres (Nom, Prénom, sexe, Date_de_naissance, Diplôme_professionnel, Métier_exercée, Pays, Ville, code_pays, Phone, Mail, Eglise, Statut_eglise, Année_conversion, Relation_Dieu, Motivations)
VALUES(:Nom, :Prénom, :sexe, :Date_de_naissance, :Diplôme_professionnel, :Métier_exercée, :Pays, :Ville, :code_pays, :Phone, :Mail, :Eglise, :Statut_eglise, :Année_conversion, :Relation_Dieu, :Motivations)');
$req->execute(array(
'Nom'=>$nom,
'Prénom'=>$prenom,
'sexe'=>$sexe,
'Date_de_naissance'=>$naissance,
'Diplôme_professionnel'=>$diplome,
'Métier_exercée'=>$metier,
'Pays'=>$pays,
'Ville'=>$ville,
'code_pays'=>$code,
'Phone'=>$phone,
'Mail'=>$mail));?>

Merci d'avance pour votre aide
A voir également:

4 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour
Place ta requete dans un bloc try catch
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Retire les caractères accentués dans le nom de tes variables

0
tyranausor Messages postés 3545 Date d'inscription   Statut Membre Dernière intervention   2 039
 
Bonjour, plusieurs conseils à te donner :
- Ta base de données et tes tables ne doivent pas avoir de caractères accentués (éèêëàä etc ...)
- Ne remplis jamais tes champs avec des données brutes (entrées directement par l'internaute) mais sécurises-les avant avec htmlspecialchars qui éviteras les injections sql et autres erreurs du genre.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

Ne remplis jamais tes champs avec des données brutes (entrées directement par l'internaute) mais sécurises-les avant avec htmlspecialchars

Tous les débutants font cette erreur...... htmlspecialchar ne doit servir qu'à l'affichage. Aucunement pour le stockage des données.
Comme il utilise PDO et les requête préparées, le risque d'injection est déjà fortement limité. Donc si... on stocke les données Brut... toujours !
0
kmorel Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
Meri a tous. j'ai retiré les accents dans ma base et ma table mais le pb est toujours pas réglé
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
As tu également suivi les consignes que je t'ai donné ?
As tu mis le try/catch à ta requête ?
Montre ton code modifié !
0
kmorel Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
oui Jordan je 'ai fait mais ca me signale une erreur au ivrau du '"{" qu'il ya juste devant le catch.

voici la requête avec le catch:
 <?php $nom=$_POST['nom']; $prenom=$_POST['prenom']; $sexe=$_POST['sexe']; $naissance=$_POST['année']; $diplome=$_POST['diplome']; $metier= $_POST['metier'];
  $pays=$_POST['pays']; $ville=$_POST['ville']; $code=$_POST['code_pays']; $phone=$_POST['phone']; $mail=$_POST['mail']; $eglise=$_POST['eglise']; $statut=$_POST['statut_eglise'];
  $conversion=$_POST['conversion']; $relation=$_POST['relation']; $objectif=$_POST['objectif'];
  
  try{
  $req = $bdd->prepare('INSERT INTO info_membres (Nom, Prenom, sexe, Date_de_naissance, Diplome_professionnel, Metier_exercee, Pays, Ville, code_pays, Phone, Mail, Eglise, Statut_eglise, Annee_conversion, Relation_Dieu, Motivations)
  VALUES(:Nom, :Prenom, :sexe, :Date_de_naissance, :Diplome_professionnel, :Metier_exercee, :Pays, :Ville, :code_pays, :Phone, :Mail, :Eglise, :Statut_eglise, :Annee_conversion, :Relation_Dieu, :Motivations)');
  $req->execute(array(
  'Nom'=>$nom,
  'Prenom'=>$prenom,
  'sexe'=>$sexe,
  'Date_de_naissance'=>$naissance, 
  'Diplome_professionnel'=>$diplome, 
  'Metier_exercee'=>$metier,
  'Pays'=>$pays,
  'Ville'=>$ville,
  'code_pays'=>$code,
  'Phone'=>$phone,
  'Mail'=>$mail,
  'Eglise'=>$eglise,
  'Statut_eglise'=>$statut,
  'Annee_conversion'=>$conversion,
  'Relation_Dieu'=>$relation,
  'Motivations'=>$objectif))
  }catch(Exception $e);?>


EDIT : Ajout des balises de code !
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
<?php 
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;
$prenom = !empty($_POST['prenom']) ? $_POST['prenom'] : NULL;  
$sexe= !empty($_POST['sexe']) ? $_POST['sexe'] : NULL;
$naissance= !empty($_POST['annee']) ? $_POST['annee'] : NULL;
$diplome= !empty($_POST['diplome']) ? $_POST['diplome'] : NULL;
$metier= !empty($_POST['metier']) ? $_POST['metier'] : NULL; 
$pays= !empty($_POST['pays']) ? $_POST['pays'] : NULL;
$ville= !empty($_POST['ville']) ? $_POST['ville'] : NULL;
$code= !empty($_POST['code_pays']) ? $_POST['code_pays'] : NULL;
$phone= !empty($_POST['phone']) ? $_POST['phone'] : NULL;
$mail= !empty($_POST['mail']) ? $_POST['mail'] : NULL; 
$eglise= !empty($_POST['eglise']) ? $_POST['eglise'] : NULL; 
$statut= !empty($_POST['statut_eglise']) ? $_POST['statut_eglise'] : NULL; 
$conversion= !empty($_POST['conversion']) ? $_POST['conversion'] : NULL; 
$relation= !empty($_POST['relation']) ? $_POST['relation'] : NULL; 
$objectif= !empty($_POST['objectif']) ? $_POST['objectif'] : NULL; 
  
  
  $sql = 'INSERT INTO info_membres (Nom, Prenom, sexe, Date_de_naissance, Diplome_professionnel, Metier_exercee, Pays, Ville, code_pays, Phone, Mail, Eglise, Statut_eglise, Annee_conversion, Relation_Dieu, Motivations)
  VALUES(:Nom, :Prenom, :sexe, :Date_de_naissance, :Diplome_professionnel, :Metier_exercee, :Pays, :Ville, :code_pays, :Phone, :Mail, :Eglise, :Statut_eglise, :Annee_conversion, :Relation_Dieu, :Motivations)';
  
  
  $datas = array(':Nom'=>$nom,
                ':Prenom'=>$prenom,
                ':sexe'=>$sexe,
                ':Date_de_naissance'=>$naissance, 
                ':Diplome_professionnel'=>$diplome, 
                ':Metier_exercee'=>$metier,
                ':Pays'=>$pays,
                ':Ville'=>$ville,
                ':code_pays'=>$code,
                ':Phone'=>$phone,
                ':Mail'=>$mail,
                ':Eglise'=>$eglise,
                ':Statut_eglise'=>$statut,
                ':Annee_conversion'=>$conversion,
                ':Relation_Dieu'=>$relation,
                ':Motivations'=>$objectif
                );
  try{
  $req = $bdd->prepare($sql);
  $req->execute($datas);
  
  }catch(Exception $e){
    echo "<br>ERREUR dans la requête ! " . $sql ."<br>" .$e->getMessage();
  } 
  ?>


EDIT : A l'avenir, merci d'utiliser LES BALISES DE CODE pour poster ton code sur le forum !
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
kmorel Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
ok Jordan. Merci beaucoup pour ton aide.
mais ouh laaaa! c'est du chinois tes 17 premières lignes. tu veux bien m'expliquer un peu?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > kmorel Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
c'est ce qu'on appel l'écriture ternaire (une sorte de IF ELSE )
Le tout couplé à !empty pour s'assurer que la variable existe et n'est pas vide.
0
jadu Messages postés 217 Date d'inscription   Statut Membre Dernière intervention  
 
Je croyais qu'il était interdit de faire des fichiers "discriminatoires" sur les religions , non ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
moi je croyais qu'il était interdit d'interdire.
heureusement, il est autorisé de croire!
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
moi je croyais qu'il était interdit d'interdire.

oui, et sous les pavés, la plage ;-)

heureusement, il est autorisé de croire!

Oui, bien sûr.

Sur l'intervention de jadu, je pense qu'il parle de ceci : https://www.cnil.fr/fr/reglement-europeen-protection-donnees/chapitre2#Article9

Il faut avoir de bonnes raisons pour que la collecte et le traitement de données sur les convictions religieuses soit permis, qui sont listées par ce texte (qui , en principe l'interdit, sauf si une ou plusieurs des exceptions prévues s'applique(nt)).

Quand à nous, en répondant sur ce sujet, on est face à un dilemme : le forum CCM n'est pas sensé porter assistance à des personnes enfreignant la loi ou ayant l'intention de le faire (cf. demande d'assistance à piratage, etc.), et donc il n'est pas absurde de de renseigner sur les motivations d'une personne posant des questions techniques tendancieuses, d'un autre côté les discussions juridiques sont, elles-aussi hors charte, ce type discussions n'étant pas l'objet du forum.

Pour clore là dessus, si on se résume : c'est interdit en principe, mais il y a des exception, et c'est le problème de kmorel de vérifier lui-même, ou avec l'assistance d'un juriste qu'il est dans un cadre légal en faisant ce qu'il fait :-)

Dal
0