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 :

Accepter des chiffres uniquement


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Accepter des chiffres uniquement
    Bonjour,
    J'apprend PHP et j'aimerais bien savoir comment créer un formulaire qui accepte que des chiffres. voici un petit test mais il accepte des lettres

    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
     
    <!DOCTYPE html>
    <html>
    <body>
     
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
        <label>x:</label><br>
        <input type="text"  name="xx" ><br>
        <input type="submit" value="Submit">
    </form>
     
    <?php
    if (isset($_POST['xx']) || !empty($_POST['xx']) || is_numeric($_POST['xx'])){
     
        $x = $_POST['xx'];
    }else{
        echo "vous devez taper des chiffres!";
    }
    echo $x . "<br />";
    ?>
     
    </body>
    </html>

    Merci d'avance ;-)

  2. #2
    Modérateur

    salut,

    utilise ctype_digit(), comme ça :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    if (empty($_POST['xx']) || ( ! ctype_digit($_POST['xx']))) {
        echo 'erreur';
    }

  3. #3
    Invité
    Invité(e)
    Bonjour,

    Tu t'es trompé dans la logique.
    • Tu as mis "ou" au lieu de "et".
    • D'autre part, isset() est inclus dans !empty().


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    if (!empty($_POST['xx']) && is_numeric($_POST['xx'])){. // Si "pas vide" ET numérique


    Attention : 0 est considéré comme "vide".

  4. #4
    Modératrice

    Au passage, si c'est juste un nombre (par exemple une quantité dans un site marchant) tu peux aussi utiliser un champ spécifique dans le formulaire : <input type="number">.
    Mais ça ne dispense pas de la validation en PHP
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre du Club
    Merci à tous pour les réponses

    Voici le nouveau code mais j'ai un message d'erreur
    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
     
    <!DOCTYPE html>
    <html>
    <body>
     
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8"); ?>">
        <label>x:</label><br>
        <input type="number"  name="xx" ><br>
        <input type="submit" value="Submit">
    </form>
     
    <?php
     
    if (!empty($_POST['xx']) && is_numeric($_POST['xx'])){
        $xxx = $_POST['xx'];
    } else {
        echo "vous devez taper des chiffres!";
    }
     
    echo $xxx . "<br />";
    ?>
    </body>
    </html>




  6. #6
    Membre actif
    Si vous faites le chemin de code, la partie dans le if n'est pas exécutée mais la partie dans le else si. Donc la variable $xxx n'est pas déclarée si on est dans le cas où la condition est fausse...
    Ajoutez $xxx = null; avant le if par exemple.

    Ou alors $xxx = $_POST['xx'] ?? null; avant le if et vous pourrez enlever le test !empty(...) :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $xxx = $_POST['xx'] ?? null;
    if (is_numeric($xxx)) {
        // ...
    }

  7. #7
    Membre du Club
    Merci beaucoup Trehinos
    ça fonctionne.

    Si j'ai plusieurs input c'est quoi la bonne methode?
    j'ai essayé avec ce code mais c'est pas bon.
    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
     
    <!DOCTYPE html>
    <html>
    <body>
     
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8"); ?>">
        <label>x:</label><br>
        <input type="number"  name="xx" ><br>
        <input type="number"  name="yy" ><br>
        <input type="number"  name="zz" ><br>
     
        <input type="submit" value="Submit">
    </form>
     
    <?php
    $xxx = $_POST['xx'] ?? null;
    $yyy = $_POST['yy'] ?? null;
    $zzz = $_POST['zz'] ?? null;
     
    if (is_numeric($xxx)) {
        $xxx = $_POST['xx'];
        } else {
        echo "Introduisez un chiffre!";
    }
     
    if (is_numeric($yyy)) {
        $yyy = $_POST['yy'];
       } else {
        echo "Introduisez un chiffre!";
    }
     
    if (is_numeric($zzz)) {
        $zzz = $_POST['zz'];
       } else {
        echo "Introduisez un chiffre!";
    }
     
    echo $xxx . "<br />";
    echo $yyy . "<br />";
    echo $zzz . "<br />";
    ?>
    </body>
    </html>



  8. #8
    Invité
    Invité(e)
    Bonjour,

    La bonne méthode serait d'apprendre les bases du PHP.
    Il existe des tutos pour ça.

    Là, il est clair que tu écris / recopies du code sans le comprendre.

  9. #9
    Membre à l'essai
    Revoir les bases en PHP
    Vous pouvez utilisez ctype_digit, ou faites des recherches sur FILTER_VALIDATE_INT et une 3em alternative revoir les notions d'expression régulières

  10. #10
    Membre du Club
    Merci à tous,
    Grace à votre aide et un peu de recherche j'ai réussis à réaliser ce que je voulais
    http://cadtuts.eu/page7.php