Problème traitement formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème traitement formulaire

Re: Problème traitement formulaire

par sirakawa » 14 août 2012, 09:32

Bonjour,
Juste une variation sur le thème en utilisant elseif
<?php
/**
Une fonction doit avoir un seul point de sortie.
Le résultat que renvoie celle-ci est facile à tester et à exploiter, plus qu'un résultat textuel*/
function checkmdp($pass)
{
        $valeur = 0;
        if($pass == '') _____________________________________________________________________________passe vide
        {
        	$valeur = -1;
        }
        /*il existe une construction elseif qui simplifie grandement*/
        elseif (strlen($pass) < 4) //______________________________________________passe pas vide et trop court
        {
        	$valeur = -2;
        }
        elseif(strlen($pass) > 50)  //__________passe pas vide et pas trop court et trop long
        { 
        	$valeur = -3;
        }
        elseif(!preg_match('#[0-9]{1,}#', $pass))   //___passe pas vide et pas trop court et pas trop long et sans chiffre
        {
              $valeur =  -4;
        }
        elseif(!preg_match('#[A-Z]{1,}#', $pass)) //___passe pas vide et pas trop court et pas trop long avec chiffre
        {
                $valeur = -5 ;
        }
        return $valeur;
}
$messages = array(0=>"ok", -1=> "trop court", -2 => "trop long", -3=> "sans chiffres", -4 => "sans maj");
$pass = "aaaaaaaaaaaaaaaaaaaaaa";
$result= checkmdp($pass);
$message = $messages[$result];
if ($result == 0)
{
//traitement normal
}
else
{
print "$message";
}
?>

Re: Problème traitement formulaire

par Zahnzao » 13 août 2012, 21:15

Salut,

tu apelles la fonction mais ne teste pas son retour.

La fonction retourne un string en fonction de l'erreur ou du succès. 'tooshort','toolong','ok' etc...
$checkmdp=checkmdp($pass);
if($checkmdp == 'ok')){
     // mot de passe ok
}else{
   // mot de passe pas ok on affiche l'erreur en fonction de $checkmdp
}
;)

Problème traitement formulaire

par RankOnePvP » 13 août 2012, 20:56

Bonjour,

je me suis lancé dans la création d'une site web, j'en suis à la création d'un espace membres.
Pour l'instant j'ai 3 fichiers:

- config.php
<?php
function ConnexionBDD()
{

  $acces = "localhost";
  $name = "RankOne";
  $ident = "root";
  $mdp = "";
	
	try
	{
		$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
		$bdd = new PDO('mysql:host='.$acces.';dbname='.$name.'', $ident, $mdp, $pdo_options);

                return $bdd;
	}
	catch (Exception $e)
	{
 	       die('Erreur : ' . $e->getMessage());
	}
}
$bdd = ConnexionBDD();
?>
-insciption.php
<?php
session_start();
include("config.php");
include("fonctions.php");
?>
<html>
    <head>
    <title>Inscription</title>
    </head>
    <body>
	<p>Inscription au site</p>

	<form name="inscription" method="post" action="inscription.php">
   	<p>
    <label for="pseudo">Votre pseudo :</label>
    <input type="text" name="pseudo" id="pseudo" required />
       
    <br />
    <label for="pass">Votre mot de passe :</label>
    <input type="password" name="pass" id="pass" required />
           
    <br />
    <label for="confirmpass">Confirmer le mot de pass :</label>
    <input type="password" name="confirmpass" id="confirmpass" required />
       
	<br />
	<label for="email">Votre adresse email :</label>
	<input type="email" name="email" id"email" required />

	<br />
	    <input type="submit" name="envoyer" value="Envoyer" />
       
   	</p>
	</form>
<?php
        if (isset($_POST['envoyer'])){
$pseudo=$_POST['pseudo'];
$pass=$_POST['pass'];
$confirmpass=$_POST['confirmpass'];
$email=$_POST['email'];
       
	   try
	   {    
$bdd->beginTransaction();
checkmdp($pass);
$insert = $bdd->query("INSERT INTO Membres VALUES('','$pseudo','$pass','$email',NOW())");
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->commit();
	   }
		
catch (PDOException $e)
    {
        echo 'Pseudo ou email deja utilise'; 
    }

$bdd = null;
		}
        ?>
	</body>
    </html> 
-fonctions.php
<?php
function checkmdp($pass)
{
	if($pass == '') return 'empty';
	else if(strlen($pass) < 4) return 'tooshort';
	else if(strlen($pass) > 50) return 'toolong';
	
	else
	{
		if(!preg_match('#[0-9]{1,}#', $pass)) return 'nofigure';
		else if(!preg_match('#[A-Z]{1,}#', $pass)) return 'noupcap';
		else return 'ok';
	}
}
?>
Le problème c'est que la fonction de vérif mot de passe ne marche pas j'ai modifier le code des dizaines de fois je ne vois pas :s