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 :

Formulaire [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 386
    Par défaut Formulaire
    Bonjour le forum,

    Je me permets de venir poster un problème important que je rencontre sur un formulaire d'envoi.

    Je possède un formulaire de contact composé de 4 champs que le visiteur doit remplir pour pouvoir me contacter.

    Les 4 champs sont obligatoires car vérifié avec javascript.

    Voici le script java utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script src="js/jquery.js" type="text/javascript"></script>
    <script src="js/jquery.validate.js" type="text/javascript"></script>
    <script src="js/form.js" type="text/javascript"></script>
    Voici le html :
    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
     <form class="contacty" id="contactf" method="post" action="creation_contact.php">
       <fieldset>
    		<legend>Formulaire de contact</legend>
    		<p>
    			<label for="nom">Votre Nom</label>
    			<input id="nom" name="nom" class="required" minlength="2" />
    		<p>
    			<label for="mail">Votre E-mail</label>
    			<input id="mail" name="mail" class="required email" />
    		</p>
    		<p>
    			<label for="tel">Votre Téléphone</label>
    			<input id="tel" name="tel" class="" value="" />
    		</p>
    		<p>
    			<label for="texte">Votre Message</label>
    			<textarea name="texte" cols="60" rows="10" class="required" maxlength="1000" id="texte"></textarea>
    		</p>
    		<p>
    			<input class="submit" type="submit" value="Envoyer"/>
    		</p>
    	</fieldset>
    </form>
    et voici le code php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $msg = "nom:\t" . $_POST["nom"] . "\n\n";
    $msg .= "mail:\t" . $_POST["mail"] . "\n\n";
    $msg .= "tel:\t" . $_POST["tel"] . "\n\n";
    $msg .= "texte:\t" . $_POST["texte"] . "\n\n\n";
    $recipient = "mail@mail.fr";
    $subject = "Demande de contact";
    $mailheaders = "From: Contact formule<> \n";
    $mailheaders .= "Reply-To: " . $_POST["mail"] . "\n\n";
    mail($recipient, $subject, $msg, $mailheaders);
    Header("Location:contact_envoye.html");
    ?>
    Or je reçois toujours des mails vides du type:
    nom :
    mail:
    téléphone:
    texte:

    Je ne comprend pas car cela n'est pas possible. Quand je fais le test de mon coté sous IE 6,7,8 , firefox chrome je ne recontre aucun problème.

    Je perd pas mal de contacts à cause de cela et je serais intéréssé par une réponse car je ne trouve pas.

    merci par avance !

  2. #2
    Membre expérimenté Avatar de sayari.dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 142
    Par défaut
    Essaye de vérifier ton POST en insérant cette ligne
    juste avant
    $msg = .....

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 386
    Par défaut
    Merci de votre réponse

    J'ai également supprimer ma fonction Javascript qui vérifie les champs saisis.

    J'ai tester les modifications et j'obtient ce message : Parse error: syntax error, unexpected T_VARIABLE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    print_r($_POST) $msg = "nom:\t" . $_POST["nom"] . "\n\n";
    $msg .= "mail:\t" . $_POST["mail"] . "\n\n";
    $msg .= "tel:\t" . $_POST["tel"] . "\n\n";
    $msg .= "texte:\t" . $_POST["texte"] . "\n\n\n";
    $recipient = "mail@mail.fr";
    $subject = "Demande de contact";
    $mailheaders = "From: contact<> \n";
    $mailheaders .= "Reply-To: " . $_POST["mail"] . "\n\n";
    mail($recipient, $subject, $msg, $mailheaders);
    Header("Location:contact_envoye.html");
    ?>

  4. #4
    Membre expérimenté Avatar de sayari.dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 142
    Par défaut
    print_r($_POST) $msg = "nom:\t" . $_POST["nom"] . "\n\n";
    T'as oublié un point-virgule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print_r($_POST);
     $msg = "nom:\t" . $_POST["nom"] . "\n\n";

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 386
    Par défaut
    Merci.

    J'ai corrigé mon erreur et j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Array ( [nom] => toto [mail] => toto@gmail.com [tel] => 0606060606 [texte] => message test )
    Warning: Cannot modify header information - headers already sent by (output started at www/creation_contact.php:2) in www/creation_contact.php on line 13
    ligne 13 étant : Header("Location:contact_envoye.html");

    ( je ne connais pas grand chose en php) que dois je en déduire ?

  6. #6
    Membre expérimenté Avatar de sayari.dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 142
    Par défaut
    Pour l'erreur du header, c'est normal car nous avons déjà envoyé de l'output au navigateur avec le print_r().

    je me demande est-ce que t'as encore les emails avec des données vides?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 386
    Par défaut
    Ok pour le header.

    Quand j'envoie un email de chez moi ( tester sur 3 pc, avec firefox, IE 6,7 8 et chrome ) sa fonctionne parfaitement.

    Mais encore hier, j'ai reçu un mail du type :
    nom:
    mail:
    tel:
    texte:

    Or avec le javascript qui vérifie si les champs sont bien remplis ce genre de message ne devrait pas être envoyé.
    Donc la j'ai viré la vérification javascript et de mon coté toujours aucun problème.

    A voir sur le prochain message d'un visiteur.

    Pour toi le code php et html est correcte ?

  8. #8
    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

    Or avec le javascript qui vérifie si les champs sont bien remplis ce genre de message ne devrait pas être envoyé.
    Donc la j'ai viré la vérification javascript et de mon coté toujours aucun problème.
    Faire des vérifs par Javascript, pourquoi pas, mais ça reste avant tout un mécanisme coté client (navigateur), donc par définition on ne peu pas considérer ceci comme fiable.

    Il faudrait éviter de construire ton mail directement avec $_POST, mais faire un minimum de vérifications avant.
    Il faudrait s'assurer que $_POST contient un nom, un email, un message, etc ...
    Donc des vérifs coté serveur.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (isset($_POST['nom'], $_POST['mail'], $_POST['texte']) && !empty($_POST['nom']) && !empty($_POST['mail']) && !empty($_POST['texte'])) {
      // Ok. On construit le mail
      ... etc ...
      header("Location: contact_envoye.html");
    }
    else {
      // Erreur. Manque une des valeurs
    }

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 386
    Par défaut
    Ok je comprend mieux, avoir une vérification des champs me semble important.
    je vire donc le JS, mon code html reste identique et en 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
    <?php
    if (isset($_POST['nom'], $_POST['mail'], $_POST['texte']) && !empty($_POST['nom']) && !empty($_POST['mail']) && !empty($_POST['texte'])) {
      // Ok. On construit le mail
    $msg = "nom:\t" . $_POST["nom"] . "\n\n";
    $msg .= "mail:\t" . $_POST["mail"] . "\n\n";
    $msg .= "tel:\t" . $_POST["tel"] . "\n\n";
    $msg .= "texte:\t" . $_POST["texte"] . "\n\n\n";
    $recipient = "mail@mail.fr";
    $subject = "Demande de contact";
    $mailheaders = "From: contact<> \n";
    $mailheaders .= "Reply-To: " . $_POST["mail"] . "\n\n";
    mail($recipient, $subject, $msg, $mailheaders);
      header("Location: contact_envoye.html");
    }
    else {
      // Erreur. Manque une des valeurs
      echo "Erreur...";
    }
     
    Header("Location:contact_envoye.html");
    ?>
    Le code fonctionne big merci !
    Par contre en cas de champ non remplie j'obtients ,toujours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Cannot modify header information - headers already sent by (output started at www/creation_contact.php:17) in www/creation_contact.php on line 20
    Comment passer outre ?

  10. #10
    Membre expérimenté Avatar de sayari.dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 142
    Par défaut
    Tu enlève le dernier header, celui juste avant le ?> car si l'un des champs est vide le script affichera 'erreur' et à partir de là une redirection avec le header est "impossible".

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 386
    Par défaut
    Ok je vais tester.

    Grand merci pour l'aide

  12. #12
    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
    Il faudrait aussi au moins rajouter une condition sur la fonction mail, car si le la personne saisie 'tralala tsoin tsoin' en guise d'adresses mail, la fonction mail() va "planter".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (mail($recipient, $subject, $msg, $mailheaders)) {
      header(... etc ...)
    }
    else {
      // Erreur sur la fonction mail()
    }
    Il faudrait peut être aussi vérifier la structure de cette adresse mail, comme voir si elle contient un arobase, etc ...
    Si tu fais des recherche sur le Net, tu verra qu'il y a une full de moyen pour faire un minimum de vérif.

    Puis ce n'est pas parce que j'ai dit que Javascript n'est pas fiable qu'il faut tout mettre à la poubelle
    Ce n'est pas fiable, c'est une certitude, mais ça reste utile néanmoins.
    En faite, et en règle général, les vérifs sont faites en double : JS et Php.
    Le JS est là pour éventuellement éviter de solliciter le serveur pour rien, faut le voir comme un pré-contrôle.
    Mais les vérifs en Php restent les plus important à faire.
    On va dire qu'on fait d'abord la couche Php. Quand c'est satisfaisant, on rajoute la couche JS. Ca ne mange pas d'pain.
    Enfin, c'est mon avis.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 386
    Par défaut
    Ok merci des informations.

    Je vais l'améliorer au fur et a mesure.
    Je vais déjà être sur que les visiteurs arrivent à m'envoyer un message sans problème, ca serait déjà un gros progrès :-)

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

Discussions similaires

  1. Création d'un formulaire sous flash?
    Par ultrakas dans le forum Flash
    Réponses: 5
    Dernier message: 11/01/2005, 19h33
  2. [CR][Access] intégrer un viewer dans un formulaire access
    Par nicolak dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 13/01/2003, 16h52
  3. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 10h59
  4. [VB6][Formulaire]Appliquer un Scrollbar a une Form
    Par Boil dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/11/2002, 04h51
  5. [CR] Tranfert de formulaire a travers une page HTMl
    Par LIEU dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 12/09/2002, 09h37

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