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

PHP & Base de données Discussion :

Pourquoi mon message d'erreur ne s'affiche pas ? [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Par défaut Pourquoi mon message d'erreur ne s'affiche pas ?
    bonjour,
    J'ai créé un formulaire d'inscription, le message d'erreur doit afficher si le login existe déjà, ou si le mot de passe répété ne correspond pas à celui déjà saisi, ou encore si l'on a saisi tous les champs.
    Le message d'erreur marche bien dans le cas d'un simple formulaire à 3 cases. Mais cela ne marche pas dans ma page qui contient un menu. En fait lorsque je valide le formulaire, rien ne s'affiche, le menu est décalé vers le haut et les sous-menus deviennent tous petits!
    Le problème est sur les lignes 16,32, 33
    Voici le code :
    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
    <?PHP
    if (isset($_POST['submit']))
    { $nom=htmlentities(trim($_POST['nom']));
      $prenom=htmlentities(trim($_POST['prenom']));
      $sexe=htmlentities(trim($_POST['sexe']));
      $date=htmlentities(trim($_POST['date']));
      $num=htmlentities(trim($_POST['num']));
      $code=htmlentities(trim($_POST['code']));
      $username=htmlentities(trim($_POST['username'])); //virer espaces et tag
      $password=htmlentities(trim($_POST['password']));
      $repeatpassword=htmlentities(trim($_POST['repeatpassword']));
      $type=htmlentities(trim($_POST['type']));
      if ($username&&$password&&$repeatpassword)
      { if($password==$repeatpassword)
         {
    	 }else echo"Les deux passwords doivent être identiques";
    	/* 
        //Crypter le password ;*/
        $password=md5($password);
    	//Se connecter à la BDD
        $connect=mysql_connect('localhost','root','') or die(Error);
        mysql_select_db('bdd__messagerie'); //sélectionner BDD
    //
    	$reg=mysql_query("SELECT * FROM personne WHERE login='$username'")or die(mysql_error());
    	$rows=mysql_num_rows($reg); 
    	if ($rows==0) //il n'a pas trouvé de raouf
    	{
    //	
    	$query=mysql_query("INSERT INTO personne VALUES('','$nom','$prenom','$sexe','$date','$num','$code','$username','$password','','$type')"); //Requête sql
    	die("Inscription terminee <a href='Ajouter_employe_FIN.php'> Connectez-vous </a>"); 
       }//redirige vers la page connexion
       else echo"Ce pseudo n'est pas disponible";
      }else echo"Veuillez saisir tous les champs";
    }
    ?>

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu codes sur un post-it ? Parce qu'on dirait que tu cherches l'économie de place...
    J'ai repris ton code en le commentant
    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
    <?php
     
    // pour le travail répétitif, tu as  la possibilité d'utiliser une closure (très pratique)
    $get = function($key) { return (isset($_POST[$key])) ? htmlspecialchars(trim($_POST[$key])) : ''; };
     
    if (isset($_POST['submit']))
    {
        $nom            = $get('nom');
        $prenom         = $get('prenom');
        $sexe           = $get('sexe');
        $date           = $get('date');
        $num            = $get('num');
        $code           = $get('code');
        $username       = $get('username');
        $password       = $get('password');
        $repeatpassword = $get('repeatpassword');
        $type           = $get('type');
     
        if ($username && $password && $repeatpassword)
        {
            if ($password !== $repeatpassword)
            {
                echo "Les deux passwords doivent être identiques";
                exit; // ici si tu ne sors pas, le code va continuer à s'exécuter
            }
     
            $password = md5($password); // Hash password et pas cryptage
     
            // Se connecter à la BDD
            // commentaire inutile : _connect _select_db... parlent d'eux-même
            mysql_connect('localhost','root','') or die(mysql_error());
            mysql_select_db('bdd__messagerie');
     
            $esc = function($p) { return mysql_real_escape_string($p); };
            // pense à échapper les valeurs avant de les utiliser dans les requêtes (sécurité pour les injections)
            $qry  = mysql_query("SELECT * FROM personne WHERE login = '{$esc($username)}'") or die(mysql_error());
            $rows = mysql_num_rows($qry);
     
            if ($rows === 0) // ici tu peux typer la comparaison
            {
                $qry = mysql_query("INSERT INTO personne VALUES (NULL, '{$esc($nom)}','{$esc($prenom)}','{$esc($sexe)}','{$esc($date)}','{$esc($num)}','{$esc($code)}','{$esc($username)}','{$esc($password)}','','{$esc($type)}')") or die (mysql_error());
     
                // on affiche un message standard sans le gérer comme une erreur die() provoque un autre comportement
                echo "Inscription terminee <a href='Ajouter_employe_FIN.php'> Connectez-vous </a>";
            }
            else
            {
                echo "Ce pseudo n'est pas disponible";
            }
        }
        else
        {
            echo"Veuillez saisir tous les champs";
        }
    }
     
    ?>
    Autre chose : la lib mysql_xxx est obsolète et va être retirée, tu devrais passer par mysqli_ ou PDO.

  3. #3
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    raw m'a doublé...
    Mais je mets quand même ma proposition qui te donne d'autres petits trucs...
    Merci pour la closure Raw, je ne connaissais pas...
    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
    session_start();
    if (isset($_POST['submit'])){ 
    	$ok=isset($_POST['nom']) && $_POST['nom'] != '' && $_POST['nom'] != NULL 
    	&& isset($_POST['prenom']) && $_POST['prenom'] != '' && $_POST['prenom'] != NULL 
    	&& isset($_POST['sexe']) && $_POST['sexe'] != '' && $_POST['sexe'] != NULL ;//etc. etc.
    	//ici bien sûr, il faut que tu termines la vérification exhaustive !
     
    	if($ok){
    		$nom=htmlentities(trim($_POST['nom']));
    		$prenom=htmlentities(trim($_POST['prenom']));
    		$sexe=htmlentities(trim($_POST['sexe']));
    		$date=htmlentities(trim($_POST['date']));
    		$num=htmlentities(trim($_POST['num']));
    		$code=htmlentities(trim($_POST['code']));
    		$username=htmlentities(trim($_POST['username'])); //virer espaces et tag
    		$password=htmlentities(trim($_POST['password']));
    		$repeatpassword=htmlentities(trim($_POST['repeatpassword']));
    		$type=htmlentities(trim($_POST['type']));
     
    		if($password==$repeatpassword){
    			//Crypter le password ;*/
    			$password=md5($password);
    			//Se connecter à la BDD
    			$connect=mysql_connect('localhost','root','') or die(Error);
    			mysql_select_db('bdd__messagerie'); //sélectionner BDD
    			//vérifier que pseudo pas déjà pris
    			$reg=mysql_query("SELECT * FROM personne WHERE login='$username'")or die(mysql_error());
    			$rows=mysql_num_rows($reg); 
    			if ($rows==0){
    				if(mysql_query("INSERT INTO personne VALUES('','$nom','$prenom','$sexe','$date','$num','$code','$username','$password','','$type')")){
    					mysql_close();
    					//ça a marché, tu le connectes et tu le diriges vers l'accueil.
    					header('location:lasuite.php');
    				}
    				else{
    					$_SESSION['info']= "Il y a eu un problème à l'insertion !";
    					mysql_close();
    				}
    			}
    			else{
    				$_SESSION['info']= "Ce pseudo n'est pas disponible";
    				mysql_close();
    			}
    		}else $_SESSION['info']= "Les deux passwords doivent être identiques"; 
    	}else $_SESSION['info']="Veuillez saisir tous les champs";
    }else $_SESSION['info']="Il faut passer par un formulaire";
    header('location:login.php');
     
    //et sur login.php, tu ajouteras
    if(isset($_SESSION['info'])){
    	echo '<p style="color:red;">'.$_SESSION['info'].'</p>';
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Par défaut
    Bonjour.

    - Dendrite, cette instruction est parfaitement inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ok = isset($_POST['nom']) && $_POST['nom'] != '' && $_POST['nom'] != NULL 
    	&& isset($_POST['prenom']) && $_POST['prenom'] != '' && $_POST['prenom'] != NULL 
    	&& isset($_POST['sexe']) && $_POST['sexe'] != '' && $_POST['sexe'] != NULL ;
    Voici un excellent article pour vous : http://www.expreg.com/expreg_article...rt=isset_empty

    - Rawsrc, vous vous êtes également concentré sur la forme, mais hélas vous n'avez pas non plus trouvé l'erreur...

    - geeka, désolé de faire de votre POST un terrain d'affrontement, mais il semble que cela provienne de l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( isset($_POST['submit']) ) {
    Submit est une "touche" pas une zone de saisie !
    IE ne renvoie rien dans $_POST pour l'input submit. Les autres 'nav' je ne sais pas... (pas testé)
    Il faut écrire tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( ! empty($_POST) ) {
    qui sous-entend que le formulaire a été soumis, si $_POST est effectivement renseigné...

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par iakou Voir le message
    - Rawsrc, vous vous êtes également concentré sur la forme, mais hélas vous n'avez pas non plus trouvé l'erreur...

    - geeka, désolé de faire de votre POST un terrain d'affrontement, mais il semble que cela provienne de l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( isset($_POST['submit']) ) {
    Submit est une "touche" pas une zone de saisie !
    IE ne renvoie rien dans $_POST pour l'input submit. Les autres 'nav' je ne sais pas... (pas testé)
    Il faut écrire tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( ! empty($_POST) ) {
    qui sous-entend que le formulaire a été soumis, si $_POST est effectivement renseigné...
    Ou alors tester tout autre input (un seul suffit, Mr Dendrite) mais pas le submit...
    Bon... avant de poster des âneries, il serait utile de lire le code en question.
    Le code de geeka était mal posé, en l'état il était tout à fait normal que son code ne produise pas le résultat escompté.
    Il vaut mieux parfois reprendre tout que d'essayer de corriger trop d'erreurs.

    Ensuite pour ce qui est du submit, c'est peut-être vrai avec IE6 (désolé, je ne l'ai plus sous la main) mais en tout cas avec les autres navigateurs (y compris IE récent) pour peu que le bouton de soumission ait un nom, il est également transmis avec le reste des données.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form action="" method="POST">
        <input type="text" name="abc">
        <input type="submit" name="submit" value="enregistrer">
    </form>
    ou même :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form action="" method="POST">
        <input type="text" name="abc">
        <input type="submit" name="submit">
    </form>

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Par défaut
    Bonjour.

    Pour vérifier, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( ! empty($_POST) )
         {
         print_r($_POST) ;
         }
    Qui vous dit que geeka a donné un 'name' à sa touche submit ?... Vous l'avez vu le code de son FORM ?...

  7. #7
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par iakou Voir le message
    - Dendrite, cette instruction est parfaitement inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ok = isset($_POST['nom']) && $_POST['nom'] != '' && $_POST['nom'] != NULL 
    	&& isset($_POST['prenom']) && $_POST['prenom'] != '' && $_POST['prenom'] != NULL 
    	&& isset($_POST['sexe']) && $_POST['sexe'] != '' && $_POST['sexe'] != NULL ;
    Voici un excellent article pour vous : http://www.expreg.com/expreg_article...rt=isset_empty

    Il faut écrire tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( ! empty($_POST) ) {
    qui sous-entend que le formulaire a été soumis, si $_POST est effectivement renseigné...
    D'accord, merci de cette précision, je ne l'oublierai pas... A ma décharge, je trouve les double négations peu intuitives...
    Les vérifications côté serveur deviendront donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if ( ! empty($_POST) ) { 
       $ok=! empty($_POST['nom']) &&  ! empty($_POST['prenom']) && ! empty($_POST['sexe']);//etc...
       if($ok){
          //on continue...
       } 
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  8. #8
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    @Dendrite

    Fais quand même attention à empty surtout si tu as des contrôles qui acceptent ces valeurs : (bonjour le débogage, crois-moi)

    doc empty()
    Valeurs de retour

    Retourne FALSE si var existe et est non-vide, et dont la valeur n'est pas zéro.

    Ce qui suit est considéré comme étant vide :

    "" (une chaîne vide)
    0 (0 en tant qu'entier)
    0.0 (0 en tant que nombre à virgule flottante)
    "0" (0 en tant que chaîne de caractères)
    NULL
    FALSE
    array() (un tableau vide)
    $var; (une variable déclarée, mais sans valeur)
    En clair pour toutes ces valeurs empty() retournera true.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/02/2014, 16h28
  2. Messages d'erreur ne s'affichent pas
    Par j_esti dans le forum JSF
    Réponses: 1
    Dernier message: 30/08/2013, 21h58
  3. Message d'erreur ne s'affiche pas en VbScript
    Par MAKSIM dans le forum VBScript
    Réponses: 2
    Dernier message: 24/07/2013, 16h55
  4. [debutant]mon message d'alerte ne s'affiche pas
    Par -Neo- dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 26/02/2008, 15h10
  5. [MySQL] Message d'erreur ne s'affiche pas !
    Par CaLeDo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/07/2007, 01h10

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