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 :

Obliger saisies de champs


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Par défaut Obliger saisies de champs
    Bonjour,

    j'ai beau essayé 40 facons différentes d'empecher la validation du formulaire si mon champs n'est pas rempli, ca ne marche pas. En meme temps j'ai pas pris la facon la plus orthodox pour codé le formulaire a l'origine.

    voici la chose : mon formulaire se trouve sur la page formulaire.html.
    Les gens le remplisse puis valide, ce qui nous amene a la page qui traite le formulaire : test.php

    Test.php traite mon formulaire, créé un pdf et m'envoie le resultat du formulaire en pdf sur mon email. Tout cela marche pafaitement, sauf que j'en ai marre de recevoir des formulaires vides donc je souhaite rendre dans un premier temps le remplissage de la premiere case obligatoire :

    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
    <?php
    require('../fpdf.php');
     
    if(isset($_POST['niveau'])) {
    $checkboxes = $_POST['niveau'];
    $niveau = implode($checkboxes,", ");
    }
    $entreprise = $_POST['textfield2'] ;
    $entreprise = utf8_decode($entreprise);
    //je vous épargne tous les autres champs
     
    $pdf=new FPDF();
    $pdf->AddPage();
    //je vous épargne toutes les lignes liées a la création du code
    $doc = $pdf->Output('', 'S');
     
    require "../class.phpmailer.php";
        $mail = new PHPmailer();
    //je vous épargne les lignes liées a la création du mail
    $mail->AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
     
         if(!$mail->Send()){
          echo $mail->ErrorInfo; 
        }
        else{      
          echo utf8_decode('Votre mail a été envoyé avec succès.<br />Merci.');
        }
        $mail->SmtpClose();
        unset($mail);
     
    ?>
    Donc je voudrais simplement qu'il me fasse une verification du genre si textfield2 est vide alors message d'erreur 'veuillez remplir le champs', et si il est rempli, alors on peut passer entamer la suite.

    J'ai essayé de mettre en tout début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(!isset($_POST['textfield2']))
      {echo "veuillez remplir le nom de l entreprise";}
    Ca ne marche pas.
    J'ai aussi essayé de choses avec des Elseif et des ifelse...
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(empty($_POST['textfield2']){'veuillez remplir le champ'}else{....
    fin voila, une erreur de synthaxe. Je ne suis pas très a l'aide avec les conditions. Je sais que mon probleme est tout simple et qu'il peut se résoudre tres facilement mais je n'y arrive pas...

    Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Déjà, un champ non rempli renvoit une chaine vide, donc la condition !isset() ne fonctionne pas.

    C'est donc bien empty() qui peut faire l'affaire.
    Si tu as une erreur de syntaxe, il faut nous dire laquelle et nous montrer le code.
    (dans le bout de code que tu nous montres, il manque le echo.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    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 : 60
    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
    Une syntaxe que j'aime bien pour les contrôles de saisie en PHP, c'est la suivante.

    je mets dans un booléen dès le départ tous mes champs obligatoires (il y en a beaucoup des fois);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $incomplet=empty($champ1) || empty($champ2) || empty($champ3);
     
    //Et quand j'en ai besoin, la syntaxe devient plus claire
     
    if($incomplet){
     echo 't\'as pas tout rempli banane ! ';
    }
    else{
    header("location: traitement.php");
    }
    Autre chose, ce que je préfère, c'est envoyer le formulaire de départ sur la page courante, sur formulaire.php dans ton cas.
    Là, je vérifie cette histoire de contrôle de saisie, et je n'envoie à la page de traitement que quand c'est bon.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    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
    Par défaut
    Salut

    voici la chose : mon formulaire se trouve sur la page formulaire.html.
    Les gens le remplisse puis valide, ce qui nous amene a la page qui traite le formulaire : test.php
    Le principe que tu utilise, (avoir 2 pages) n'est pas pratique, il te complique la tâche.

    Le plus simple à mon sens c'est de tout faire dans une seule et unique page, ce qui te permettras de mieux gérer les erreurs.
    (rien n'empêche d'exploiter un include() pour la partie création pdf par exemple)

    Exemple : (contact.php)
    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
     
    // Partie traitements
    $erreur = false;
    $msg_erreur = false;
     
    if (isset($_POST['envoi_mail'], $_POST['email'], $_POST['message'])) {
        // Initialisation
        $email = $_POST['email'];
        $message = $_POST['message'];
     
        // Vérification du mail
        if (empty($email)) {
            $erreur = true;
            $msg_erreur[] = 'Veuillez saisir votre adresse e-mail';
        }
     
        if (empty($message)) {
            $erreur = true;
            $msg_erreur[] = 'Veuillez saisir votre message';
        }
     
        // SI aucune erreur
        if ($erreur == false) {
            // On crée le PDF (on l'inclus le fichier éventuellement)
            // On construit le mail et on l'envoie
            if($mail->Send()) {
                header('Location: contact.php?envoye=ok');
            }
            else{
                $msg_erreur[] = $mail->ErrorInfo;
            }
        }
    }
     
     
    // Partie interface / HTML
    ?>
    <html>
    ... etc ...
     
    <?php
    if (isset($_GET['envoye']) && $_GET['envoye'] == 'ok') {
        echo 'Votre mail a été envoyé avec succès.<br />Merci.';
    }
    elseif ($erreur === true && !empty($msg_erreur)) {
        foreach ($msg_erreur as $erreur) {
            echo $erreur.'<br />';
        }
    }
    ?>
     
    ... etc ...
    <!-- Formulaire de contact -->
    <form name="contact" action="contact.php" method="post">
    ... etc ...
    </form>
     
    </html>

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Par défaut
    Ok, interessant !
    Je vais faire un mixe entre dendrite et runcodephp, je visualise le truc je pense que ca devrait marcher (je le ferais demain j'suis crevé la..).

    La raison pour laquelle ma page de traitement n'est pas sur la même que le formulaire est que mon formulaire est sur mon site (hébergé par Free) et que mon traitement est hébergé sur Webou (je possede un site sur webou qui n'a rien a voir avec ca).

    Je ne pouvais pas héberger le traitement sur Free car Free m'a blacklisté ou quelque chose comme ca je pense, pour les envois de mails en php. Car chez free, tu envois 3 mails en php ca passe tres bien, tu essayes d'en envoyer 20 d'un coup (c'était pour une classe, je ne suis pas un spammer) et bien Free te bloque la fonction... et je n'ai pas reussi a y remédier.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Par défaut
    re,

    finalement j'ai repris la technique de runcodephp (si je n'arrive pas à mes fins je prendrais l'autre) car elle necessitait moins de modif dans mon script (bien que l'autre n'en necessité pas beaucoup plus non plus).

    Lorsqu'au moins un des champs obligatoire n'est pas remplis, le message n'est pas envoyé donc c'est parfait. La page test.php (page de traitement) s'ouvre bien, mais il n'y a pas le message d'erreur du genre "veuillez remplir...". La page s'ouvre mais elle est vide... Peut etre ai je oublié une accolade quelque part..
    Et quand les champs obligatoires sont remplis, la page test.php s'ouvre bien, et me dis que le message a bien été envoyé (donc la pas de probleme).

    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
    <?php
    require('../fpdf.php');
     
    if(isset($_POST['niveau'])) {
    $checkboxes = $_POST['niveau'];
    $niveau = implode($checkboxes,", ");
    }
    $entreprise = $_POST['textfield2'] ;
    $entreprise = utf8_decode($entreprise);
    //je vous épargne tous les autres champs
     
    // Partie traitements
    $erreur = false;
    $msg_erreur = false;
     
    if (isset($_POST['textfield2'], $_POST['textfield6'], $_POST['textfield9'])) {
        // Initialisation
        $entreprise = $_POST['textfield2'] ;	 
        $sujet = $_POST['textfield6'] ;
        $email = $_POST['textfield9'] ;
     
        // Vérification des champs
        if (empty($entreprise)) {
            $erreur = true;
            $msg_erreur[] = 'Veuillez saisir le nom de l entreprise';
        }
     
        if (empty($sujet)) {
            $erreur = true;
            $msg_erreur[] = 'Veuillez saisir votre sujet';
     
        }
        if (empty($email)) {
            $erreur = true;
            $msg_erreur[] = 'Veuillez saisir votre adresse email';
        }
     
        // SI aucune erreur
        if ($erreur == false) {
     
     
    $pdf=new FPDF();
    $pdf->AddPage();
    //je vous épargne toutes les lignes liées a la création du code
    $doc = $pdf->Output('', 'S');
     
    require "../class.phpmailer.php";
        $mail = new PHPmailer();
    //je vous épargne les lignes liées a la création du mail
    $mail->AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
     
     if(!$mail->Send()){
          $msg_erreur[] = $mail->ErrorInfo;
             }
        else{      
          echo utf8_decode('Votre mail a été envoyé avec succès.<br />Merci.');
        }
        $mail->SmtpClose();
        unset($mail);
     
    }
    }
     
    ?>
    Je n'ai pas mis tous le code, je peux éventuellement le mettre. J'ai compté au niveau des accolades ouvertees/fermées, j'ai le même nombre, j'ai essayé de mettre un echo de la 12 ligne en partant de la fin ($msg_erreur), mais rien n'y fais, le message n'est pas envoyé (ca s'est bien) quand il manque un champs, mais aucun message d'erreur n'apparait.

    Merci encore pour votre aide, en espérant que nous pourrons résoudre cette petite chose qui m'ennuie.

Discussions similaires

  1. Obliger saisie champs uSF
    Par Kimaos dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/04/2010, 13h34
  2. Masque de saisie sur champs auto
    Par sam29 dans le forum Access
    Réponses: 8
    Dernier message: 21/08/2006, 15h25
  3. [PHP-JS] comment vérifier la saisie des champs ?
    Par tigzirt dans le forum Langage
    Réponses: 4
    Dernier message: 27/06/2006, 18h26
  4. Est-il possible de contrôler la saisie dans champ...
    Par hop&hop dans le forum Administration
    Réponses: 6
    Dernier message: 31/10/2005, 17h19
  5. PROBLEME : Forcer la saisie des Champs numériques!!!!!
    Par Grozeil dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 31/03/2005, 16h22

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