Erreur index.php?erreur=intru

gendark51 Messages postés 1 Date d'inscription jeudi 29 juin 2017 Statut Membre Dernière intervention 29 juin 2017 - Modifié le 29 juin 2017 à 20:21
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 30 juin 2017 à 02:18
bonjour, je suis novice.
qui peux m'aider? merci d'avance.

un simple formulaire de contacte et une fois remplis, je valider.
je me retrouve avec le message
index.php?erreur=intru
dans la barre d'exploration
et rien ne s'registre dans ma bdd.

mon php :




<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=itic', 'root', '');
if(isset($_POST['forminscription']))
{
  $nom_fem = htmlspecialchars($_POST['nom_fem']);
  $prenom_fem = htmlspecialchars($_POST['prenom_fem']);   
  $date_fem = htmlspecialchars($_POST['date_fem']);    
  $mail_fem = htmlspecialchars($_POST['mail_fem']);
  $mail_fem2 = htmlspecialchars($_POST['mail_fem2']);
  $mdp_fem = sha1($_POST['mdp_fem']);
  $mdp_fem2 = sha1($_POST['mdp_fem2']);
  
 if(!empty($_POST['nom_fem']) AND ($_POST['prenom_fem']) AND($_POST['date_fem']) AND($_POST['mail_fem']) AND($_POST['mail_fem2']) AND($_POST['mdp_fem']) AND($_POST['mdp_fem2']))
 {
  $nomlength = strlen($nom_fem);
  if($nomlength <=255)
  {
  if(empty($_POST['date_fem'])){
        $errors['date_fem'] = "Vous devez rentrer une date de naissance valide";
    } else {
      // date d'aujourd'hui
      $date = new DateTime();
      // date - 18 ans
      $date_18 = $date->sub(new DateInterval('P18Y'));
      // si $_POST['date_naissance'] est au format date par exemple = 2001-12-25
      $date_nfem = new DateTime($_POST['date_fem']);
      if($date_fem >= $date_18)
      {
      //le visiteur a PAS encore 18 ans
        $errors['date_fem'] = "Vous devez etre majeur pour vous inscrire";
      }
    }
    if($mail_fem==$mail_fem2) 
    if(filter_var($mail_fem,FILTER_VALIDATE_EMAIL))
     {
      $reqmail = $bdd->prepare("SELECT * FROM insc{_wom WHERE mail=?");
      $reqmail->execute(array($mail_fem));
      $mailexist= $reqmail->rowCount();
      if($mail_fem==0)
      
      if($mdp_fem==$mdp_fem2)
     {
      
     
    $insertmbr=$bdd->prepare("INSERT INTO insc_wom(nom_fem, prenom_fem, date_fem, mail_fem, mdp_fem) VALUES(?,?,?,?,?,?)");   
    $insertmbr->execute(array($nom_fem,$prenom_fem,$date_fem,$mail_fem,$mdp_fem));
    $erreur= "votre compte a bien été créer !";
      header("Location:accueil.php?erreur=intru");
      }
      else 
      {
      $erreur= "Vos mots de passe ne correspondent pas !"; 
      }
      {
      $erreur="adresse mail deja utilisé!"; 
      }
     }
    else
     {
      $erreur= "Vos adresses mail n'est pas valide !";
     }
  }
  else
  {
  $erreur= "Votre nom comtien trop de caractère, limite 255 !";
  }
 }
 else
 {
  $erreur="Tous les champs doivent être completés !";
 }
}
?>


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
29 juin 2017 à 20:19
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
30 juin 2017 à 02:18
Si tu as mis en pratique le lien que je t'ai donné (l'activation de l'affichage des erreurs PDO ....) tu as certainement trouvé où se trouvait l'erreur....



Au cas où ça ne serait pas le cas ....
- tu as 6 points d'interrogations dans ta requête d'insertion ... alors que tu ne cible que 5 champs dans ta table....(et tu n'as que 5 variables dans l'array du execute...)

- ta requête select me semble bizarre :
SELECT * FROM insc{_wom WHERE mail=?


- Il semble que tes accolades soient pas totalement ouvertes/fermées (surtout si tu as mis une dans la requête par erreur .... )


Sachant que pour voir les erreurs .... tu dois désactiver la redirection (au moins le temps des tests....) (donc mettre en commentaire la ligne header("Location:accueil.php?erreur=intru"); )

Bref... corrige ton code comme ceci :
 $sql = "INSERT INTO insc_wom
         (nom_fem, prenom_fem, date_fem, mail_fem, mdp_fem) 
         VALUES(?,?,?,?,?)";
  $datas = array($nom_fem,$prenom_fem,$date_fem,$mail_fem,$mdp_fem);
  
  try{
    $insertmbr=$bdd->prepare($sql); 
    $insertmbr->execute($datas);
  }catch(Exception $e){
     echo "<br> Erreur dans la requête ".$sql;
     echo "<br> avec les données :";
     print_r($datas);
     echo " <br>-->> Erreur : ".$e->getMessage();
  }


Ah.. et puis.... vire les "htmlspecialchars" ....
Cette instruction ne sert QUE POUR L'AFFICHAGE ... en AUCUN CAS lors de l'insertion en bdd !

Et enfin ... la fonction rowCount ne doit pas être utilisée pour les requêtes de type SELECT.
A la place ... tu peux faire un "fetchAll" sur le résultat de ta requête puis un COUNT (en php) sur la variable pour savoir le nombre de lignes retournées.



0
Rejoignez-nous