Controler formulaire

Résolu/Fermé
mart03 Messages postés 279 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 5 juin 2012 - 15 avril 2009 à 17:43
mart03 Messages postés 279 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 5 juin 2012 - 15 avril 2009 à 21:00
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 mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 avril 2009 à 18:16
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
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 mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 avril 2009 à 18:34
+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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
15 avril 2009 à 18:39
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 mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 avril 2009 à 18:58
mdr en effet :D
0

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

Posez votre question
mart03 Messages postés 279 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 5 juin 2012 21
15 avril 2009 à 19:05
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
15 avril 2009 à 19:33
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 mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 avril 2009 à 19:43
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 279 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 5 juin 2012 21
15 avril 2009 à 19:51
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
15 avril 2009 à 19:56
Outch.

Ton code a des failles monstrueuses.

Il faut toujours contrôler les valeurs reçues par l'utilisateur.
0
mart03 Messages postés 279 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 5 juin 2012 21
15 avril 2009 à 19:57
Et voila mais comment faire ?
0
mart03 Messages postés 279 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 5 juin 2012 21
15 avril 2009 à 20:31
SVP aider moi !!
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 avril 2009 à 20:45
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
15 avril 2009 à 20:42
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
15 avril 2009 à 20:45
Oups, un bout de code a été transformé en lien.

Rajoute 2 paires de crochets autour de :ALPHA:
0
mart03 Messages postés 279 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 5 juin 2012 21
15 avril 2009 à 21:00
Merci beaucoup a vous tous !!! Merci a toi P@t@ch0n pour la page !
0