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 :

Ne pas accepter les champs NULL ou vide dans la BDD


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 148
    Par défaut Ne pas accepter les champs NULL ou vide dans la BDD
    Bonjour,

    Je suis actuellement occupé sur un système de connexion à un site mais je bloque sur un point:
    Si j'entre des valeurs vides dans un champ, elles sont envoyées dans la base de données quand même, j'aimerais que ce ne soit pas le cas.

    Pour l'instant j'ai ça:
    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
    <?php
    // inscription
    if(isset($_POST['submit']) && isset($_GET['inscription'])){
        $identifiant = isset($_POST['identifiant']) ? htmlspecialchars($_POST['identifiant']) : '';
        $mdp = isset($_POST['mdp']) ? md5(htmlspecialchars($_POST['mdp'])) : '';
        $nom = isset($_POST['nom']) ? htmlspecialchars($_POST['nom']) : '';
        $prenom = isset($_POST['prenom']) ? htmlspecialchars($_POST['prenom']) : '';
        $mail = isset($_POST['mail']) ? htmlspecialchars($_POST['mail']) : '';
     
        $reqAddUser=$bdd->prepare('INSERT INTO utilisateur (id, identifiant, mdp, nom, prenom, mail, niveau) VALUES (NULL, :identifiant, :mdp, :nom, :prenom, :mail, 1)');
        // Premiere méthode
        $resultatReq = $reqAddUser->execute([
            'identifiant' => $identifiant,
            'mdp' => $mdp,
            'nom' => $nom,
            'prenom' => $prenom,
            'mail' => $mail
        ]);
     
        // Pour vérifier si l'inscription a été faite ou pas (on affiche un message dans le formulaire d'inscription si TRUE ou FALSE)
        if($resultatReq) {
            $_SESSION['validation']=TRUE;
        } else {
            $_SESSION['validation']=FALSE;
            //echo print_r($reqAddUser->errorInfo());
        }
    }
    Et mon formulaire:
    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
     
    <?PHP
     
    if(!isset($_SESSION['prenomUtilisateur'])){
        echo '<span class="title">Inscription</span>
        <a href="?cacher" class="noDecoration"><input type="button" class="submit" value="Cacher"></a>
        <form method="post" action="">
            <span class="forme">Nom :</span><br>
            <input type="text" name="nom" class="champ" required><br>
            <span class="forme">Prenom :</span><br>
            <input type="text" name="prenom" class="champ" required><br>
            <span class="forme">Adresse mail :</span><br>
            <input type="text" name="mail" class="champ" required><br><br>
            <span class="forme">Identifiant :</span><br>
            <input type="text" name="identifiant" class="champ" required><br>
            <span class="forme">Mot de passe :</span><br>
            <input type="password" name="mdp" class="champ" required><br>';
     
            if(isset($_SESSION['validation']) && $_SESSION['validation']==TRUE){
                echo '<br>Inscription réussie';
                unset($_SESSION['validation']);
            } elseif (isset($_SESSION['validation']) && $_SESSION['validation']==FALSE) {
                echo '<br>Echec de l\'inscription';
                unset($_SESSION['validation']);
            }
     
            echo '<br><input type="submit" value="S\'inscrire" name="submit" class="submit">
            <a href="?connexion">Formulaire de connexion</a>
        </form>';
    }
     
     ?>
    J'ai justement ajouté des REQUIRED en attribut à mes champs pour que le formulaire ne puisse pas être envoyé vide, mais si je mets des espaces dans les champs, ils ne sont plus vides et sont envoyés comme ça.

    Merci

  2. #2
    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
    Bonjour,

    Pour tous tes champs "required", il te faut ajouter ceci du côté PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if( isset($_GET['inscription']) && trim ($_GET['inscription'])!=""){
     
    }
    Tu peux faire ce genre de choses pour aller plus vite, côté serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ok=true;
    $obligatoires=array('nom','prenom','mail','mdp');
    foreach($obligatoires as $obligatoire){
      if( ! (isset($_POST[$obligatoire]) && trim($_POST[$obligatoire])!='') ){
        $ok=false;
        break;
      }
    }
    if($ok){
     
    }
    else{
     
    }
    PS : ce n'est pas ta question, mais attention à ta façon d'encoder les mdp.
    Utilise les fonctions PHP faites pour ça password_hash et password_verify

    https://www.php.net/manual/fr/functi...sword-hash.php
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Coté html, tu peut utiliser l'attribut pattern à la place de required pour éviter un champ remplie en blanc.

    A+.

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 148
    Par défaut
    Merci Dendrite pour ta réponse.

    Je ne suis pas sûr d'avoir compris tout le code, mais je vais tenter pour voir ce que ça donne

    Concernant
    Citation Envoyé par Dendrite Voir le message
    PS : ce n'est pas ta question, mais attention à ta façon d'encoder les mdp.
    Utilise les fonctions PHP faites pour ça password_hash et password_verify
    https://www.php.net/manual/fr/functi...sword-hash.php
    Je me doute bien que le md5 n'est clairement pas sécurisé, mais vu que je n'ai pas encore appris à manipuler ces fonctions, je me suis contenté du md5 pour effectuer mes tests de connexion.
    Mais merci en tout cas!


    Je vais aussi essayer ça andry.aime. Merci

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 502
    Par défaut
    Bonjour,

    Par rapport à ta question : Ne pas accepter les champs NULL ou vide dans la BDD

    La régle est que si tu n'as pas de données à mettre dans un des attribut de ta table, alors le champs doit être null et non pas le texte 'null' qui est différents, null en db veux dire absence de données.

    Donc deux solution, soit tu mets une contrainte en db pour dire tel attribut si vide alors on met une valeur par défaut, sinon on met null.
    Donc si tu veux mettre null , ton code devrais ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ....
     
      $identifiant = isset($_POST['identifiant']) ? htmlspecialchars($_POST['identifiant']) : null;
        $mdp = isset($_POST['mdp']) ? md5(htmlspecialchars($_POST['mdp'])) : null;
        $nom = isset($_POST['nom']) ? htmlspecialchars($_POST['nom']) : null;
        $prenom = isset($_POST['prenom']) ? htmlspecialchars($_POST['prenom']) : null;
        $mail = isset($_POST['mail']) ? htmlspecialchars($_POST['mail']) : null;
     
    .....

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 148
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Bonjour,

    Donc deux solution, soit tu mets une contrainte en db pour dire tel attribut si vide alors on met une valeur par défaut, sinon on met null.
    Donc si tu veux mettre null , ton code devrais ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ....
     
      $identifiant = isset($_POST['identifiant']) ? htmlspecialchars($_POST['identifiant']) : null;
        $mdp = isset($_POST['mdp']) ? md5(htmlspecialchars($_POST['mdp'])) : null;
        $nom = isset($_POST['nom']) ? htmlspecialchars($_POST['nom']) : null;
        $prenom = isset($_POST['prenom']) ? htmlspecialchars($_POST['prenom']) : null;
        $mail = isset($_POST['mail']) ? htmlspecialchars($_POST['mail']) : null;
     
    .....
    Bonjour,

    J'avais effectivement testé cette méthode, mais cela ne changeait rien. Ça me permettait toujours d'envoyer un formulaire vide dans la base de données. Et comme c'est un formulaire utilisateur, c'est gênant d'avoir des utilisateurs "vides".
    Après c'est juste une petite application à présenter, qui ne sera jamais en développement, si ce n'est pas ultra optimisé, ce n'est pas grave. J'aurais juste aimé réussir à empêcher l'utilisateur d'envoyer des champs vides dans la base de données et avoir des valeurs null alors que ce sont des données "nécessaires".

    On voit que mon formulaire n'est vraiment pas sécurisé, on peut mettre des champs d'une lettre, ce qui ne devrait pas pouvoir être autorisé théoriquement. (Normalement je dois faire un site web en HTML/CSS pour ce projet, la partie PHP est un bonus. Mais vu que l'HTML/CSS m'énerve, que je n'aime vraiment pas ça, que je ne suis pas créatif, ... je m'oriente surtout sur le PHP, mais ce n'est pas vraiment utile ici, c'est juste pour dire d'avoir quelque chose de présentable vu que la partie HTML/CSS derrière ne sera pas top top lol)

Discussions similaires

  1. Requête n'affiche pas les champs null
    Par souf_87 dans le forum Oracle
    Réponses: 6
    Dernier message: 04/03/2011, 17h11
  2. [AC-2007] Faire accepter les champs vide
    Par theBinette dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/01/2010, 20h38
  3. [AC-2007] Ne pas imprimer les champs null
    Par toumack dans le forum IHM
    Réponses: 5
    Dernier message: 05/12/2009, 12h49
  4. expression reguliere qui accepte les champs vide
    Par mystro7200 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/03/2009, 12h02
  5. Ne pas afficher un champs qui est vide dans ma BD
    Par yoda_style dans le forum ASP
    Réponses: 3
    Dernier message: 27/04/2004, 11h40

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