Controler formulaire

Résolu
mart03 Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   -  
mart03 Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'ai crée un site avec un espace membre mais le problème est que lors de l'inscription il n'y a aucune vérification du formulaire donc en fait il suffit d'appuyer sur le bouton envoyer sans rein mettre et voila c'est inscrit dans ma bdd il peut accéder a tout sans être identifier
J'espère que vous comprenez mon problème !
Merci
Cordialement

14 réponses

Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention   58
 
fonctions de contrôle standard:
strlen() (taille des chaînes)
preg_match (recherche de motifs, complexe)
strip_tags (occulte les balises html)

à toi de voir, sinon il existe un paquet de tutos. Si tes conditions ne sont pas vérifiées lors de l'envoi, tu annules l'envoi^^ tout simple
0
patachon
 
Je rajouterais à cette liste, trilm(), les ctype_digit() et assimilés, filter_var() si tu disposes d'une version de php très récente.
0
Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention   58
 
+1 pour trim() et ctype_digit, mais filter_var, c'est pas un peu compliqué pour un débutant?
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Non, c'est pas très complexe à utiliser :)

Le dom, ça c'est complexe pour un débutant :D
0
Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention   58
 
mdr en effet :D
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mart03 Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   21
 
Merci mais je les mais a quelle endroit car comme je suis un peu débutant dans la matière je ne sait pas trop ou les mettre car mon formulaire et composer d'une adresse email, le nom et le mot de passe merci de m'indiquer la voit !
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
On peut visionner ton code ?

Sans ça, je ne vois pas comment on pourrait t'aiguiller.
0
Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention   58
 
je suggère de l'inciter à faire une visite sur siteduzero.com, histoire de voir un peu comment faire simplement ses traitements de données^^ (les tuto sont pas trop mal faits^^) :p
0
mart03 Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   21
 
Voici le code d'inscription.php :

<?php
session_start();// ici on lance la session
$erreur_mail=0;
if($_POST){
//mysql_select_db(martin_feau, clients); //sélection de la base de données
$FORMemail=$_POST['Email'];
$FORMpass=$_POST['password'];
include('dbconnect.php');
$query_rsClient = "SELECT LOGIN FROM identification_tbl WHERE LOGIN = '$FORMemail' ";
$rsClient = mysql_query($query_rsClient , $db) or die(mysql_error());
$totalRows_rsClient = mysql_num_rows($rsClient);
if ($totalRows_rsClient==0)
{
$insertSQL = "INSERT INTO identification_tbl (LOGIN,PASSWORD) VALUES ( '$FORMemail', '$FORMpass')";
$Result1 = mysql_query($insertSQL , $db) or die(mysql_error());
$clientID=mysql_insert_id();//récupère l'identifiant client attibué
// mémorisation des paramètres dans la session
$statut="client";
session_register("clientID");// on enregistre son ID
session_register("statut"); // on enregistre son statut de client
header("Location:index.php"); // ici si tout est ok on redirige le visiteur vers son menu

}
else
{
$erreur_mail=1;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Création d'un compte</title>
<style type="text/css">
<!--
body,td,th {
font-family: Georgia, Times New Roman, Times, serif;
font-size: 16px;
color: #000;
}
body {
background-color: #06F;
}
strong {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 16px;
color: #F00;
}
u {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 36px;
color: #000;
}

-->
</style><head></head>
<body>


<div align="center"><u>Création d'un compte</u><br />
<?php
if ($erreur_mail==1)
{
?>
<br />
<br />
<strong>L'émail :<?php echo $FORMemail ?> : existe déjà dans notre base de données Choisissez un autre mail ou utilisez le compte déjà créé <br />
<?php
$erreur_mail=0; // ici on efface la valeur de la variable erreur_mail
}
?>



</strong></div>
<div align="center">

<p> </p>
<form action="inscription.php" method="post" name="Inscription" id="Inscription">
<p>Nom :
<label>
<input type="text" name="Nom" id="Nom" tabindex="1" />
</label>
</p>
<p>Email :
<label>
<input type="text" name="Email" id="Email" tabindex="2" />
</label>
</p>

<p> Mot de passe :
<label>
<input name="password" type="password" id="password" tabindex="3" maxlength="6" />
</label>
6car. Max</p>
<p>

<label>
<input type="submit" name="Envoyer !" id="Envoyer !" value="Envoyer !" tabindex="4" />
</label>
</p>
</form>
</div>
</body>
</html>

Et j'ai un autre fichier dbconnect.php

<?
@$db= mysql_connect('localhost','martin.feau','martin') or die ("la connexion à la base a échoué");
mysql_select_db('martin_feau');
?>


En espèrant que cela vous aiguille
Merci beaucoup !
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Outch.

Ton code a des failles monstrueuses.

Il faut toujours contrôler les valeurs reçues par l'utilisateur.
0
mart03 Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   21
 
Et voila mais comment faire ?
0
mart03 Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   21
 
SVP aider moi !!
0
Smoking bird Messages postés 870 Date d'inscription   Statut Membre Dernière intervention   58
 
tu controles la taille
le type
le contenu

et tu purifies :D

if( strlen($taVar)<2 ){
echo "$taVar n'est pas une information valide"; //on suppose qu'elle est trop courte
}

le type, matte ici: https://www.php.net/manual/fr/function.ctype-alpha.php et là: https://www.php.net/manual/fr/function.is-string.php

le contenu avec du preg https://www.php.net/manual/fr/function.preg-match.php et là https://lumadis.be/regex/test_regex.php

et tu purifies avec https://www.php.net/manual/fr/function.strip-tags.php

sachant qu'avant le moindre traitement/controle, tu applique le trim($taVar) pour t'assurer qu'on n'a pas juste envoyé un espace
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Eh, doucement :)

Je te montre un exemple.

<?php

session_start(); // ici on lance la session
$erreur = array();
if( !empty($_POST) )
{
   if( !empty($_POST['Email']) && trim($_POST['Email']) )
   {
      if( !preg_match('`^[_-+.\w]{1,64}@[-.\w]{1,64}\.:ALPHA:{2,6}$`', $_POST['Email']) )
         $erreur['mail'] = 'Adresse email de format invalide';
   }
   else
      $erreur['mail'] = 'Adresse email non renseignée';

   if( !$erreur )
   {
      if( !empty($_POST['password']) && trim($_POST['password']) )
      {
         if( strlen($_POST['password']) < 6 )
            $erreur['password'] = 'Mot de passe trop court';
      }
      else
         $erreur['password'] = 'Mot de passe non renseigné'
   }

   if( !$erreur ) // si l'array est toujours vide
   {
      include('dbconnect.php');
      $query_rsClient = "SELECT LOGIN FROM identification_tbl WHERE LOGIN = '$FORMemail' ";
      $rsClient = mysql_query($query_rsClient , $db) or die(mysql_error());
      $totalRows_rsClient = mysql_num_rows($rsClient);

      if( $totalRows_rsClient == 0 )
      {
         // On hashe toujours les mots de passe
         $insertSQL = "INSERT INTO identification_tbl (LOGIN,PASSWORD) VALUES ('{$_POST['Email']}', '" . sha1($_POST['password']) . "')";
         $Result1 = mysql_query($insertSQL , $db) or die(mysql_error());

         $_SESSION['clientID'] = mysql_insert_id(); //récupère l'identifiant client attibué
         $_SESSION['statut'] = 'client';

         header("Location: index.php"); // ici si tout est ok on redirige le visiteur vers son menu
      }
      else
         $erreur['email'] = 'Adresse email déjà utilisée par un client';
   }
}
?> 


Il ne faut pas utiliser session_register(), je t'invite à consulter la doc php afin de savoir pourquoi.
Les mots de passes doivent-être toujours hashé avant insertion dans une table.
Comme tu peux le constater $erreur est un array servant à contenir les messages d'erreurs afin d'informer l'utilisateur.

Je te laisse faire pour les afficher.
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Oups, un bout de code a été transformé en lien.

Rajoute 2 paires de crochets autour de :ALPHA:
0
mart03 Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   21
 
Merci beaucoup a vous tous !!! Merci a toi P@t@ch0n pour la page !
0