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 :

Accepter des chiffres uniquement


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    mars 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut 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
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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
    Points : 16 466
    Points
    16 466
    Billets dans le blog
    12
    Par défaut
    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)
    Par défaut
    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".
    Dernière modification par Invité ; 25/03/2020 à 12h04.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    avril 2007
    Messages
    8 615
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2007
    Messages : 8 615
    Points : 16 353
    Points
    16 353
    Par défaut
    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
    Profil pro
    Inscrit en
    mars 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut
    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>

    Nom : php2.png
Affichages : 67
Taille : 13,3 Ko

  6. #6
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    novembre 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : novembre 2012
    Messages : 96
    Points : 214
    Points
    214
    Par défaut
    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
    Profil pro
    Inscrit en
    mars 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut
    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>
    Nom : php1.png
Affichages : 58
Taille : 8,7 Ko

  8. #8
    Invité
    Invité(e)
    Par défaut
    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
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2018
    Messages : 11
    Points : 20
    Points
    20
    Par défaut 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
    Profil pro
    Inscrit en
    mars 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut
    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

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/04/2008, 15h26
  2. Obliger a entrer uniquement des chiffres dans un champs
    Par seb591 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/07/2007, 09h59
  3. un wxtextCtrl qui accepte que des chiffres
    Par boubou00 dans le forum wxWidgets
    Réponses: 9
    Dernier message: 27/06/2007, 11h11
  4. Taper uniquement des chiffres dans une TextBox?
    Par christopher07 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/06/2007, 17h22
  5. forcer un TextField à n'accepter que des chiffres
    Par intik dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 01/02/2007, 16h43

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