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 -
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
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
A voir également:
- Controler formulaire
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Formulaire de reclamation instagram - Guide
- Confirmer le nouvel envoi du formulaire err_cache_miss - Forum Webmastering
- Problème avec Google Chrome - Forum Google Chrome
14 réponses
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
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
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 !
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
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 !
<?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 !
Outch.
Ton code a des failles monstrueuses.
Il faut toujours contrôler les valeurs reçues par l'utilisateur.
Ton code a des failles monstrueuses.
Il faut toujours contrôler les valeurs reçues par l'utilisateur.
SVP aider moi !!
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
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
Eh, doucement :)
Je te montre un exemple.
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.
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.