Erreur index.php?erreur=intru

Signaler
Messages postés
1
Date d'inscription
jeudi 29 juin 2017
Statut
Membre
Dernière intervention
29 juin 2017
-
Messages postés
32451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 mai 2021
-
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

Messages postés
32451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 mai 2021
347
Messages postés
32451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 mai 2021
347
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.