IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Controle saisie sur formulaire


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 92
    Points : 47
    Points
    47
    Par défaut Controle saisie sur formulaire
    Bonjour à tous et bonne année.

    Je viens vers vous dans le but de résoudre un problème auquel je suis confronté depuis 3 jours et dont je ne me sors pas.

    J'ai dans ma page register.php le code suivant qui permet certains controles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <?php
    session_start();
     
    // on teste si le visiteur a soumis le formulaire
    if (isset($_POST['register']) && $_POST['register'] == 'register') {  
       // on teste l'existence de nos variables. On teste également si elles ne sont pas vides
       if (	(isset($_POST['account_type']) && !empty($_POST['account_type'])) &&
    			(isset($_POST['mail_address']) && !empty($_POST['mail_address']) && filter_var($_POST['mail_address'], FILTER_VALIDATE_EMAIL)) &&
    			(isset($_POST['username']) && !empty($_POST['username'])) && 
    			(isset($_POST['password']) && !empty($_POST['password'])) && 
    			(isset($_POST['confirm_password']) && !empty($_POST['confirm_password']))
    	  ) 
    	{ 
     
    	  //On enleve lechappement si get_magic_quotes_gpc est active
            if(get_magic_quotes_gpc())
            {
    			$_POST['username'] = stripslashes($_POST['username']);
    			$_POST['password'] = stripslashes($_POST['password']);
    			$_POST['confirm_password'] = stripslashes($_POST['confirm_password']);
    			$_POST['mail_address'] = stripslashes($_POST['mail_address']);
            }
     
    			// on teste les deux mots de passe
    			if ($_POST['password'] != $_POST['confirm_password']) 
    			{ 
    				$erreurpass = 'The two passwords are different.'; 
    			} 
     
    		else { 
    			$base = mysql_connect ('localhost', 'root', ''); 
    			mysql_select_db ('BASE', $base); 
     
    			// on recherche si ce username est déjà utilisé par un autre membre
    			$sql = 'SELECT id FROM user WHERE username="'.mysql_real_escape_string($_POST['username']).'"'; 
    			$req = mysql_query($sql) or die('erreur SQL !<br />'.
    				$sql.'<br />'.
    				mysql_error()); 
    			$data = mysql_fetch_array($req);
     
    				if ($data[0] == 0) 
    				{  
    					$sql = 'INSERT INTO user VALUES("" ,"'.mysql_real_escape_string($_POST['account_type']).'",
    													"'.mysql_real_escape_string($_POST['mail_address']).'",
    													"'.mysql_real_escape_string($_POST['username']).'", 
    													"'.mysql_real_escape_string(md5($_POST['password'].$salt)).'")';
    					mysql_query($sql) or die('erreur SQL !'.$sql.'<br />'.mysql_error()); 
     
    				// on récupère l'id de notre nouveau membre
    				$id = mysql_insert_id();
     
    				session_start(); 
    				$_SESSION['username'] = $_POST['username']; 
     
    				// on stocke cet id dans une variable de session
    				$_SESSION['id'] = $id; 
    				header('Location: home.php'); 
    				exit(); 
    				} 
    				else { 
    					$erreurlogin = 'Another member is already using this pseudo.'; 
    				} 
    			}	 
    	} 
    	else {
    		$erreur = 'Please fill in all the fields.';
    	}
    }
    ?>
    J'ai plusieurs soucis.
    Le premier est qu'il ne m'affiche aucun message si je valide le formulaire alors qu'aucun champs n'est rempli.
    En second, plutôt que d'afficher les erreurs les unes après les autres et attendre la correction de l'utilisateur, j'aimerai pouvoir toutes les afficher en même temps.
    En troisième, j'ai deux fonctions qui doivent permettre le contrôle de la disponibilité d'un login :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function file(fichier) {
         if(window.XMLHttpRequest) // FIREFOX
              xhr_object = new XMLHttpRequest();
         else if(window.ActiveXObject) // IE
              xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
         else
              return(false);
         xhr_object.open("GET", fichier, false);
         xhr_object.send(null);
         if(xhr_object.readyState == 4) return(xhr_object.responseText);
         else return(false);
         }
     
     
    function verif(c,v,d){
       result = file('verif.php?c='+c+'&v='+v);
       document.getElementById(d).innerHTML=result;
    }
    et qui sont appelé de la façon suivante dans mon formulaire :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" class="inputform" id="username" name="username" onBlur="verif('username',this.value,'username_verif')"  required /> <div name='pseudo_verif'></div>

    et enfin le verif.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
     
    if(isset($_GET['c']) && isset($_GET['v'])){ //verification que les variables c et v existent
       if($_GET['c']!='' && $_GET['v']!=''){ //verification que les variables c et v ne sonts pas vides
          if($_GET['c']=='username'){ //si c=pseudo
             $link = mysql_connect('localhost','root','mot de passe'); //connection à la bdd
             $result = mysql_db_query('ma_bdd','SELECT * FROM ma_table WHERE username=`'.$_GET['v'].'`',$link); //requete
             if(mysql_num_rows($result)<1){
                echo('Ce pseudo est libre'); //envoi du message si libre
             }else{
                echo('Ce pseudo est deja pris'); // envoi du message si deja pris
             }
          }
       }
    }
     
    ?>
    et donc je n'arrive pas à mixer les deux register.php et verif.php.

    Voila je crois que se sera tous... C'est pas mal déjà et merci à tous ceux qui prendront le temps de me lire et surtout de m'aider.

  2. #2
    Membre averti Avatar de bourvil
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : Israël

    Informations forums :
    Inscription : Juin 2002
    Messages : 411
    Points : 329
    Points
    329
    Par défaut
    Bonjour,

    pour verifier les champs du formulaire, je te conseil de faire ca en javascript, comme ca tu auras les message d'erreur avant d'envoyer le formulaire.
    pour la verification du mot de passe, tu dois utiliser ajax.

    je te propose de te tourner vers JQuery qui te permettra de faire tout cela tres simplement, voici 2 liens qui pourront t'aider:
    http://www.pierrefay.fr/jquery-valid...n-tutoriel-455

    http://javascript.developpez.com/faq/jquery/?page=Ajax

    http://javascript.developpez.com/faq/jquery/
    Franchement, je suis capable du meilleur comme du pire, mais, dans le pire, c'est moi le meilleur.
    Coluche

  3. #3
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Le premier est qu'il ne m'affiche aucun message si je valide le formulaire alors qu'aucun champs n'est rempli.
    Sans avoir le formulaire, difficile de savoir ce qui ne va pas mais tu peux déjà mettre des traces (un var_dump($_POST) tout en haut de ta page par exemple) pour voir ce qui se passe exactement !

    En second, plutôt que d'afficher les erreurs les unes après les autres et attendre la correction de l'utilisateur, j'aimerai pouvoir toutes les afficher en même temps.
    Tu as juste pour cela à faire les trois tests indépendamment les uns des autres.
    Une pratique courante est d'utiliser un tableau d'erreurs (ce qui te permettrait aussi de vérifier chaque valeur et d'affiner un peu ta gestion d'erreur, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $formValues = array('account_type', 'mail_address', ...)
    foreach ($formValues as $value)
    {
        if (empty($value))
        {
            $erreur[$value] = 'This field must be filled';
        }
    }
    if (empty($erreur['password']) && $_POST['password'] != $_POST['confirm_password'])
    {
        $erreur['password'] = 'The two passwords are different.';
    }
    etc...
    Par ailleurs, je suis d'accord avec bourvil : mettre des vérifications en JS améliore l'expérience utilisateur, qui n'aura pas à attendre que sa page se recharge pour savoir qu'il a oublié de remplir certains champs !
    Attention : ça ne change pas le fait que tu dois vérifier tes valeurs en php, ne serait que pour ceux qui auraient désactivé le javascript ou pour les petits malins qui veulent tester ta sécurité - voir pire

    Petite info en passant : la fonction empty vérifie déjà que ta variable existe avant de tester sa valeur, inutile donc de tester un isset si tu mets un empty.

    je n'arrive pas à mixer les deux register.php et verif.php.
    Tu entends quoi par mixer ?
    Si tu souhaites éviter ta duplication de code, mets le dans une fonction, dans un autre fichier qui sera inclus et utilisé par register et par verif
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Bonjour,
    Avec HTML5 il est possible de vérifier si un champ est vide ou non avec l'attribut required.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" required>

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Oui mais c'est du même niveau qu'un contrôle javascript, c'est à dire que cela sert pour le confort de l'utilisateur mais cela ne vaut strictement rien concernant la sécurité ou le contrôle du formulaire. Comme l'a déjà souligné k'amm, on doit effectuer le contrôle côté php. Et si l'on ne fait qu'un contrôle c'est de ce côté là qu'il faut le faire. Les autres contrôles en javascript ou html peuvent être faits en complément mais jamais en remplacement.

Discussions similaires

  1. Imprimer état dans l'odre de Saisie sur Formulaire
    Par CLASSIQUE dans le forum IHM
    Réponses: 5
    Dernier message: 02/11/2012, 19h07
  2. Annuler saisie sur formulaire continu
    Par sayangma dans le forum IHM
    Réponses: 1
    Dernier message: 25/05/2012, 15h23
  3. Controle saisie sur TextBox
    Par Addict` dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/04/2009, 17h22
  4. Débutant-Insertion dans table valeurs saisies sur formulaire
    Par Michel Hubert dans le forum Access
    Réponses: 2
    Dernier message: 14/04/2006, 19h38
  5. débutant-Insertion dans table valeurs saisies sur formulaire
    Par Michel Hubert dans le forum Access
    Réponses: 2
    Dernier message: 13/04/2006, 09h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo