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 :

POST et EMPTY


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 37
    Points : 29
    Points
    29
    Par défaut POST et EMPTY
    Bonjour à tous,
    pour un formulaire de contact, j'utilise ce 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
    <?php
        //création de noms abrégés pour les vatiables
        $nom = $_POST['nom'];
        $mail = $_POST['mail'];
        $sujet = $_POST['sujet'];
        $commentaires = $_POST['commentaires'];
     
        //initialisation d'informations
        $adresse_dest = "nom@fai.fr";
        $contenu_message = "Nom du client : ".$nom."\n"."Email du client : ".$mail."\n"."Commentaires du client : \n".$commentaires."\n";
        $adresse_exp = "From : ".$mail." ";
     
        //verification de l'envoi des données et appel de la fonction mail()
        if(!empty($_POST['nom']) && !empty($_POST['mail']) && !empty($_POST['sujet']) && !empty($_POST['commentaires'])){
            echo "Merci de remplir tous les champs du formulaire";
        }
        else{
            mail($adresse_dest,$sujet,$contenu_message,$adresse_exp);
        }
    ?>
    et il me semblait que le if avec la condition "n'est pas remplie (!empty)" pour chaque POST enverrait sur le message d'erreur si un seul des champs n'est pas remplis.

    Mais ce n'est pas le cas et le formulaire est transmis dans tous les cas, même sans information.

    Que faudrait_il faire pour que la condition soit remplie ??

    Merci

  2. #2
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 130
    Points : 373
    Points
    373
    Par défaut
    Salut,

    dans ta condition utilise des $nom ( comme tu l'as définie avant ) à la place de $_POST['nom']

    et essaie à la place de !empty de mettre != NULL comme ca :

    if($nom != NULL && .... )

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Il faut en 1er vérifier l'existence de tous les éléments, c'est après qu'il faudra vérifier 1 par 1 s'ils contiennent rien, et en dernier initialiser les variables $nom, $email, etc ...
    Tu fais tout l'inverse.

    Puis tu dois avoir un bouton submit, avec un nom et une valeurs, vérifier son existence est utile aussi, c'est un petit plus.

    Exemple :
    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
     
    <?php
    $erreur = false;
    $msg_erreurs = array();
    //
    if (isset($_POST['Envoyer'], $_POST['nom'], $_POST['mail'], $_POST['sujet'])) {
        if (empty($_POST['nom'])) {
            $erreur = true;
            $msg_erreurs[] = 'Veuillez saisir votre nom';
        }
        //
        if (empty($_POST['mail'])) {
            $erreur = true;
            $msg_erreurs[] = 'Veuillez saisir votre adresse e-mail';
        }
        //
     
        ... etc ...
     
        if ($erreur == false) {
            $nom = $_POST['nom'];
     
            ... etc ...
     
            $verif = mail($adresse_dest,$sujet,$contenu_message,$adresse_exp);
            if ($verif == false) {
                $erreur = true;
                $msg_erreurs[] = 'Mail non envoyé ???';
            }
            else {
                // On effectue une redirection (la même page éventuellement).
                header('Location: page.php?sendmail=envoye');
            }
        }
    }
     
    // PARTIE HTML
    ?>
    <!DOCTYPE ... etc ...>
    <html>
     
    ... etc ...
     
    <?php
    // Affichage des éventuels erreurs
    if ($erreur === true) {
        foreach ($msg_erreurs as $erreur) {
            echo $erreur.'<br />';
        }
    }
    else if (isset($_GET['sendmail']) && $_GET['sendmail'] == 'envoye') {
        echo 'Le mail a bien été envoyé ...<br />';
    }
    ?>
     
    <!-- Formulaire de contact -->
    ... etc ...
     
    </html>
    Je n'est pas testé (et pas du tout complet), c'est juste pour exemple.
    Un empty() est malgré tout très peu restrictif, ça ne veut pas dire que l'adresse e-mail est valide par exemple, pour ça faut pousser plus loin normalement.

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    si tu laisses ton script en l'état, donne moi url, que j'envoie du spam avec.

    il y a en php une fonction qui vérifie un mail, elle est buildin, elle est conforme à la RFC, elle permet d'utiliser les adresses du genre gene69+php@ , ce qui est tout à fait autorisé, et en plus c'est un feature chez google.

    l'une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filter_var('bob@example.com', FILTER_VALIDATE_EMAIL);
    l'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filter_var('bob@example.com', FILTER_SANITIZE_EMAIL);

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci à tous pour vos réponse.

    RunCodePhp, je vais essayer ton code cet après-midi et je reviens te dire si ça marche.

    Merci

  6. #6
    Membre averti
    Avatar de antoinev2
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 177
    Points : 376
    Points
    376
    Par défaut
    Bonjour,

    si j'ai bien lu, tu as simplement inversé les instructions...
    Car "!empty" signifie "n'est pas vide", et non pas "n'est pas rempli".

    Donc là, tu dis que si chacun de tes champs contient une valeur, il faut afficher le message qui demande de remplir tous les champs...

    c'est l'inverse qu'il faudrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //verification de l'envoi des données et appel de la fonction mail()
        if(!empty($_POST['nom']) && !empty($_POST['mail']) && !empty($_POST['sujet']) && !empty($_POST['commentaires'])){
     
            mail($adresse_dest,$sujet,$contenu_message,$adresse_exp);
        }
        else{
            echo "Merci de remplir tous les champs du formulaire";
        }

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Effectivement "empty" veut dire vide !!!

    Mais juste inverser les actions ne change rien, ça envoi directement le mail.

    Je vais donc prendre du temps pour bien étoffer ce code, comme me l'a proposé RunCodePhp et gene69.

    Merci pour votre aide.

Discussions similaires

  1. [CR6][CR8] cohabitation sur un même poste
    Par obi dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 27/11/2003, 21h24
  2. Réponses: 1
    Dernier message: 19/05/2003, 16h47
  3. [Choix SGBD] Application mono-poste mais beaucoup de données
    Par Wavyx dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 16/03/2003, 19h24
  4. Post incrémentation?
    Par Defrag dans le forum C
    Réponses: 4
    Dernier message: 08/10/2002, 11h36
  5. probleme d'installation sur d'autres postes
    Par VBkiller dans le forum Composants VCL
    Réponses: 4
    Dernier message: 18/09/2002, 19h14

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