Erreur index.php?erreur=intru

gendark51 1 Messages postés jeudi 29 juin 2017Date d'inscription 29 juin 2017 Dernière intervention - 29 juin 2017 à 20:14 - Dernière réponse : jordane45 21201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 27 mai 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

2 réponses

jordane45 21201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 27 mai 2018 Dernière intervention - 29 juin 2017 à 20:19
Commenter la réponse de jordane45
jordane45 21201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 27 mai 2018 Dernière intervention - 30 juin 2017 à 02:18
0
Merci
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.



Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.