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 :

test de !Empty() qui ne teste pas, apparemment :/


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Homme Profil pro
    sans
    Inscrit en
    Octobre 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Octobre 2019
    Messages : 205
    Par défaut test de !Empty() qui ne teste pas, apparemment :/
    Salut

    Je ne comprend pas ce qui se passe avec mon code :/ pourtant il me semble juste.


    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
     
    if( isset($_POST['valide']) ) 
    {
    	if(!empty($_POST['pseudo'])and !empty($_POST['pass'])and !empty($_POST['email']) )
    	{
    		$ok=0; // 0=Tous les champs sont correctement remplis.
    		$info='';
    		$pseudo=htmlspecialchars($_POST['pseudo']);
    		$pass=htmlspecialchars($_POST['pass']);
    		$passhash=password_hash($pass, PASSWORD_DEFAULT);
    		$email=htmlspecialchars($_POST['email']);
     
                   // tests champs 1 donne $ok=1 si le champ est mauvais.
                   // tests champs 2 donne $ok=2 si le champ est mauvais.
                   // tests champs 3 donne $ok=3 si le champ est mauvais.
                   // tests champs 4 donne $ok=4 si le champ est mauvais.
              }
              else
              {
    	       $info="Erreur : Tous les champs doivent êtres corrects !";
              }
     
    	if ($ok==0)
    	{
                   // Enregistrement dans la base
                   $info="C'est enregistré !";
            }
     
            // ici j'affiche $info.
            echo $info;
    }
    Quand j'oublie un champ ou que j'en mets aucun, il donne l'erreur indiquée ci-dessus.
    Quand je remplis bien tous les champs, il valide sans rien dire, mais rien ne s'enregistre dans la base, car $ok vaut plus que 0 apparemment.
    On remarque que le 4eme test de champ, n'est pas inclu dans les tests des Empty, mais c'est parce que c'est un champ radio et je sais pas comment tester son empty mais c'est pas important puisque je le teste ensuite non ? (dans les 4 tests de champs)

    EDIT : Désolé, ça venait de ce que j'avais mis plus que 4 champs dans l'insertion BDD, avec (?,?, etc...)


    EDIT : SALUT !!!
    Mon probleme est résolu mais il me cause un autre soucis :
    Fatal error: Call to a member function insert() on a non-object in C:\wamp\www\beserious\index.php on line 156
    C'est cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $DB->insert("INSERT INTO identité(activation,genre,pseudo,pass,mail,jour,heure) VALUES(?,?,?,?,?,?,?)",array($activation,$genre,$pseudo,$passhash,$email,$jour,$heure));
    Ma question est : ça veut dire quoi cette erreur systeme PHP ?

    MON CODE EN ENTIER :
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <?php
     
    if( isset($_POST['valide']) ) 
    {
    	include ('connection.php');
     
    	if(!empty($_POST['genre'])and !empty($_POST['pseudo'])and !empty($_POST['pass'])and !empty($_POST['email']) )
    	{
    		$ok=0; // 0=Tous les champs sont correctement remplis.
    		$info='';
    		$pseudo=htmlspecialchars($_POST['pseudo']);
    		$pass=htmlspecialchars($_POST['pass']);
    		$passhash=password_hash($pass, PASSWORD_DEFAULT);
    		$email=htmlspecialchars($_POST['email']);
     
    		// ici on vérifie si le genre a été choisi.
    		if(!isset($_POST['genre']))
    		{
    			$info=$info.'<span class="erreur">GENRE</span> : "un homme" ou "une femme" !<br/>';
    			$ok=1;
    		}else $genre=$_POST['genre'];
     
    		// ici on teste si le pseudo a été saisi et s'il a plus de 7 caractères.
    		if(($pseudo=='') or (strlen($pseudo)<8))
    		{
    			$info=$info.'<span class="erreur">PSEUDO</span> : Il doit avoir au moins  8 caractères !<br/>';
    			$ok=2;
    		}
     
    		// ici on teste si le mot de passe est inférieur à 8 caractères.
    		if(mb_strlen($pass)<8)
    		{
    			$info=$info.'<span class="erreur">MOT DE PASSE</span> : Il doit avoir au moins  8 caractères !<br/>';
    			$ok=3;
    		}
     
    		// ici on teste si l'email saisi est bien une adresse email.
    		if(filter_var($email, FILTER_VALIDATE_EMAIL)==false)
    		{
    			$info=$info.'<span class="erreur">EMAIL</span> : IL n\'est pas valide !<br/>';
    			$ok=4;
    		}
     
    		// ici on teste si tout est OK.
    		if($ok==0)
    		{
     
    			$jour=date("j-m-Y");
     
    			$heure=date("H:i:s");
    			// ici on crée un code INT aléatoire pour activation du compte.
    			$activation=mt_rand(1000000, 100000000);
     
    			// ici Insertion dans la base, du membre et de son code d'activation.
    			$DB->insert("INSERT INTO identité(activation,genre,pseudo,pass,mail,jour,heure) VALUES(?,?,?,?,?,?,?)",array($activation,$genre,$pseudo,$passhash,$email,$jour,$heure));
    			$info="<span class='gras'>$pseudo</span> :<p/>inscrit !<p/>
    			Un code pour activer votre compte va être envoyé par mail<p/>";
     
     
    		}
    	}
    	else
    	{
    		$info="Erreur : Tous les champs doivent êtres corrects !";
    	}
     
    	$variable="<html><head><meta charset=\"UTF-8\"><title>Inscription</title><link rel=\"stylesheet\" href=\"erreurs.css\" />
    				<script type=\"text/javascript\" src=\"js/erreurs.js\"></script></head>
    				<div class=\"panneau\" id=\"panneau\">
    				<div id=\"contenu\">$info<br/>
    				<input type=\"button\" id=\"fermer\" value=\"fermer\" onclick=\"ferme()\"><br/></div></div>
    				<script language=\"javascript\">
    				centre_pannel();
    				</script>
    				</html>";
     
    	echo htmlspecialchars_decode($variable);
     
    }
     
     $pdo = null;
     
     
    ?>

  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,

    deux remarques :
    - avec ton approche si plusieurs valeurs sont mauvaises, $ok vaut quoi ?
    - c'est contre-intuitif de considérer $ok == 0 comme indicateur de bonne continuation

    Tu ne devrais pas utiliser and mais &&, un jour tu vas avoir un effet de bord avec and et tu ne comprendras pas pourquoi

  3. #3
    Membre très actif

    Homme Profil pro
    sans
    Inscrit en
    Octobre 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Octobre 2019
    Messages : 205
    Par défaut
    Salut

    Merci Rawsrc pour ton aide !!!

    $ok vaut le chiffre qui lui est donné dans la ligne de test, $ok=1 pour le premier test, etc... chaque test donne un numéro pour $ok, ça me permet de savoir où se situe l'erreur de saisie. C'est seulement quand y a plus d'erreurs de saisie que $ok=0 et que l'enregistrement se fait, et $info vaut "c'est enregistré !".

    Pour le and je savais pas, merci beaucoup

  4. #4
    Membre très actif

    Homme Profil pro
    sans
    Inscrit en
    Octobre 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Octobre 2019
    Messages : 205
    Par défaut
    Salut

    C'est pour le fatal erreur, rien ne s'inscrit dans la base et pourtant les champs sont bien remplis.

    Fatal error: Call to a member function insert() on a non-object in C:\wamp\www\beserious\index.php on line 156
    C'est la ligne $DB INSERT() qui est la ligne 156.

    Je remet mon code ici parce que j'ai peur qu'on le voit pas bien dans le premier post :

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <?php
     
    if( isset($_POST['valide']) ) 
    {
    	include ('connection.php');
     
    	if(!empty($_POST['genre'])and !empty($_POST['pseudo'])and !empty($_POST['pass'])and !empty($_POST['email']) )
    	{
    		$ok=0; // 0=Tous les champs sont correctement remplis.
    		$info='';
    		$pseudo=htmlspecialchars($_POST['pseudo']);
    		$pass=htmlspecialchars($_POST['pass']);
    		$passhash=password_hash($pass, PASSWORD_DEFAULT);
    		$email=htmlspecialchars($_POST['email']);
     
    		// ici on vérifie si le genre a été choisi.
    		if(!isset($_POST['genre']))
    		{
    			$info=$info.'<span class="erreur">GENRE</span> : "un homme" ou "une femme" !<br/>';
    			$ok=1;
    		}else $genre=$_POST['genre'];
     
    		// ici on teste si le pseudo a été saisi et s'il a plus de 7 caractères.
    		if(($pseudo=='') or (strlen($pseudo)<8))
    		{
    			$info=$info.'<span class="erreur">PSEUDO</span> : Il doit avoir au moins  8 caractères !<br/>';
    			$ok=2;
    		}
     
    		// ici on teste si le mot de passe est inférieur à 8 caractères.
    		if(mb_strlen($pass)<8)
    		{
    			$info=$info.'<span class="erreur">MOT DE PASSE</span> : Il doit avoir au moins  8 caractères !<br/>';
    			$ok=3;
    		}
     
    		// ici on teste si l'email saisi est bien une adresse email.
    		if(filter_var($email, FILTER_VALIDATE_EMAIL)==false)
    		{
    			$info=$info.'<span class="erreur">EMAIL</span> : IL n\'est pas valide !<br/>';
    			$ok=4;
    		}
     
    		// ici on teste si tout est OK.
    		if($ok==0)
    		{
    			$jour=date("j-m-Y");
     
    			$heure=date("H:i:s");
    			// ici on crée un code INT aléatoire pour activation du compte.
    			$activation=mt_rand(1000000, 100000000);
     
    			// ici Insertion dans la base, du membre et de son code d'activation.
    			$DB->insert("INSERT INTO identité(activation,genre,pseudo,pass,mail,jour,heure) VALUES(?,?,?,?,?,?,?)",array($activation,$genre,$pseudo,$passhash,$email,$jour,$heure));
    			$info="<span class='gras'>$pseudo</span> :<p/>inscrit !<p/>
    			Un code pour activer votre compte va être envoyé par mail<p/>";
     
    		}
    	}
    	else
    	{
    		$info="Erreur : Tous les champs doivent êtres corrects !";
    	}
     
    	$variable="<html><head><meta charset=\"UTF-8\"><title>Inscription</title><link rel=\"stylesheet\" href=\"erreurs.css\" />
    				<script type=\"text/javascript\" src=\"js/erreurs.js\"></script></head>
    				<div class=\"panneau\" id=\"panneau\">
    				<div id=\"contenu\">$info<br/>
    				<input type=\"button\" id=\"fermer\" value=\"fermer\" onclick=\"ferme()\"><br/></div></div>
    				<script language=\"javascript\">
    				centre_pannel();
    				</script>
    				</html>";
     
    	echo htmlspecialchars_decode($variable);
     
    }
     
     $pdo = null;
     
     
    ?>

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 137
    Par défaut
    Salut
    Citation Envoyé par amateurprg Voir le message
    Salut

    C'est pour le fatal erreur, rien ne s'inscrit dans la base et pourtant les champs sont bien remplis.

    Fatal error: Call to a member function insert() on a non-object in C:\wamp\www\beserious\index.php on line 156

    C'est la ligne $DB INSERT() qui est la ligne 156.
    Plutôt ligne 54 dans code posté, non ?
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    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
    il faut que tu lises un peu la doc, c'est utile tu sais
    empty() vérifie déjà si la valeur est isset() et si == '', donc refaire les tests ($pseudo == '') ou (!isset($_POST['genre'])) ne sert strictement à rien.
    Ensuite, tu ne dois pas utiliser htmlspecialchars() pour échapper les données avant de les insérer en base de données. La base de données a son propre mécanisme d'échappement, htmlspecialchars() correspond au mécanisme d'échappement d'un navigateur. D'ailleurs, les caractères pouvant poser problème entre un navigateur et une base de données ne sont pas du tout les mêmes, donc respecte cette logique : à chaque univers, ses mécanismes.

    Jamais d'accents en informatique, JAMAIS, ta table identité c'est juste catastrophique.
    J'ai essayé de reprendre ton code mais c'est pas facile :
    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
    70
    71
    <?php
     
    // échappement des caractères dangereux
    $hsc = function($p) { return htmlspecialchars((string)$p, ENT_QUOTES, 'utf-8'); };
     
    if (isset($_POST['valide'])) {
        include 'connection.php';
     
        $msg = [];
     
        if (empty($_POST['genre'])) {
            $msg[] = '<span class="erreur">GENRE</span> : "un homme" ou "une femme" !<br/>';
        }
     
        if (empty($_POST['pseudo']) || (mb_strlen($_POST['pseudo']) < 7)) {
            $msg[] = '<span class="erreur">PSEUDO</span> : 8 caractères minimum !<br/>';
        }
     
        if (empty($_POST['pass']) || (mb_strlen($_POST['pass']) < 7)) {
            $msg[] = '<span class="erreur">MOT DE PASSE</span> : 8 caractères minimum !<br/>';
        }
     
        if (empty($_POST['email']) || (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false)) {
            $msg[] = '<span class="erreur">EMAIL</span> : invalide !<br/>';
        }
     
        if (empty($msg)) {
            $now = new DateTime();
            $data = [
                ':activation' => mt_rand(1000000, 100000000),
                ':genre'      => $_POST['genre'],
                ':pseudo'     => $_POST['pseudo'],
                ':pass'       => $_POST['pass'],
                ':mail'       => $_POST['email'],
                ':jour'       => $now->format('d-m-Y'),
                ':heure'      => $now->format('H:i:s')
            ];
            $sql = 'INSERT INTO identité (activation, genre, pseudo, pass, mail, jour, heure) VALUES (:activation, :genre, :pseudo, :pass, :mail, :jour, :heure)';
            // ici tu dois préparer la requête et l'exécuter : faut voir le code de connection.php
            // exemple :
            $stmt = $db->prepare($sql);
            $exec = $stmt->execute($data);
            if ($exec) {
                $msg[] = <<<html
    <p><span class="gras">{$hsc($_POST['pseudo'])}</span> : inscrit !<p/>
    <p>Un code pour activer votre compte va être envoyé par mail<p/>
    html;
            } else {
                $msg[] = 'Erreur système à la création du profile';
            }
        }
    } else {
        $msg = ['Soumission invalide'];
    }
    ?>    
    <html>
    <head>
    <meta charset="utf-8">
    <title>Inscription</title>
    <link rel="stylesheet" href="erreurs.css" />
    <script type="text/javascript" src="js/erreurs.js"></script>
    </head>
    <body>
    <div class="panneau" id="panneau">
      <div id="contenu"><?= implode('', $msg) ?><br/>
          <input type="button" id="fermer" value="fermer" onclick="ferme()"><br/>
      </div>
    </div>
    <script>centre_pannel();</script>
    </body>
    </html>

Discussions similaires

  1. .empty() qui ne fonctionne pas
    Par Vincent Valentine dans le forum jQuery
    Réponses: 4
    Dernier message: 04/03/2015, 17h51
  2. Test d'un dossier FTP qui n'exise pas
    Par speed034 dans le forum Langage
    Réponses: 1
    Dernier message: 03/06/2008, 19h47
  3. test qui ne marche pas
    Par debutantasp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/03/2008, 14h44
  4. Un test if qui ne fonctionne pas correctement
    Par Shinjuku dans le forum Langage
    Réponses: 6
    Dernier message: 26/02/2008, 11h52
  5. [RegEx] Test d'un format spécifique qui ne fonctionne pas
    Par Alvaten dans le forum Langage
    Réponses: 2
    Dernier message: 11/01/2008, 09h25

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