Aide formulaire contact

Bonjour,

j'ai trouvé un tuto. cool pour faire un formulaire de contact https://www.grafikart.fr/tutoriels/formulaire-php-21

Le problème c'est que j'ai du me tromper dans mes codes.

Donc si quelqu'un peut m'aider à trouver mes erreurs...

partie html : http://paste.pocoo.org/show/155930/

Partie php : http://paste.pocoo.org/show/155931/

Merci de votre aide!!!
Configuration: Mac OS X
Firefox 3.5.5

31 réponses

Résumé de la discussion

Problème de formulaire de contact en PHP: des erreurs de syntaxe et des vérifications de données en $_POST qui empêchent l’envoi du message et soulèvent des questions sur le codage côté serveur. Plusieurs propositions évoquent une erreur de parse et proposent d’utiliser des tests isset($_POST) et !empty sur les champs nom, email et message, puis d’ajuster les opérateurs logiques et les guillemets. D’autres corrections détaillent des structures conditionnelles correctes comme if (isset($_POST) && isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message']) && !empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['message'])) et l’usage sûr de extract($_POST). Enfin, plusieurs interventions insistent sur la gestion correcte du mail: destinataire, sujet et en-tête, et sur l’évitement des erreurs de syntaxe comme les points-virgules manquants ou les guillemets mal placés.

Bobot (l’IA à votre service)
  1. Je ne savais pas que cette phrase ne servait pas.
    Je l'ai supprimée.
    1. Hum, une question ...

      $message=str_replace("%body%", "black", "<body text='%body%'>"); 
      

      Pourquoi recopier bêtement un bout de code s'il n'a pas la moindre utilité sur ta page ?
      Tu peux supprimer cette ligne, elle ne sert strictement à rien.
      1. Ca y est le code fonctionne!!!!!
        Merci, merci beaucoup à tous pour votre aide.

        Voici le code :

        <?php
        if (isset($_POST) && !empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['message'])) {
        extract($_POST);
        $message=addslashes($message);
        $message=str_replace("%body%", "black", "<body text='%body%'>");
        $destinataire="heureslave@gmail.com";
        $sujet="Formulaire de contact";
        $msg="Une nouvelle question est arrivée \n
        Nom : $nom \n
        Email : $email \n
        Message : $message";
        $entete= "From: $nom \n Reply-To: $email";
        if (mail($destinataire, $sujet, $msg, $entete)) {
        echo "Le mail a bien été envoyé.";
        }
        else {
        echo "Le mail n'a pas pu être envoyée !";
        }
        }
        else {
        echo "Vous n'avez pas remplis tous les champs.";
        }

        ?>

        Le seule problème est que lorsqu'un message est envoyé, il y a écrit :

        le mail a bien ?t? envoy?e

        Comment afficher ces accents??
        1. Il ne faut pas mettre de guillemets dans cette ligne, ni de points-virgules, car ta variable est définie sur plusieurs lignes.

          $msg="Une nouvelle question est arrivée \n
          Nom : $nom \n
          Email : $email \n
          Message : $message";
          


          Si tu fermes les guillemets avant, PHP défini la valeur de ta variable avec ce qu'il y a entre les deux guillemets (une nouvelle question est arrivée), et comme en plus tes guillemets ne sont pas suivis d'un point-virgule, tu as le droit à une belle erreur de syntaxe ; )
          1. Ligne 9 :

            $msg="Une nouvelle question est arrivée" \n;

            Je saisi pas l'erreur.

            Merci de ta patience et de ton aide.
            1. Je fais ce que je peux...
              Je ne met pas des codes aux hasard...
              Je suis quasi débutant en php si tu préfères!

              Donc maintenant j'ai une erreur en ligne 6

              $message=str_replace("\' "," '", mixed search, mixed replace, mixed subject);

              Ce doit être ici : ("\' "," '",

              qui se transforme en : ("\' ","'",

              ???
              1. J'ai vraiment du mal à comprendre là ...

                Tu sais ce que tu fais ou tu te contentes d'ajouter des lignes au pif en espérant que tout fonctionne comme tu le souhaites ?

                PHP possède une syntaxe (comme tout langage) relativement strict. les points-virgules sont obligatoires en fin d'instructions.
                Et dès ta première ligne, il en manque un.

                Est-ce que ton erreur sur la ligne trois apparait avant ou après tes modifications ?

                Si elle apparait après. Arrête de tout bidouiller, et trouve un tutoriel (voire même un bouquin) parlant de la programmation en PHP.
                1. Donc avec la ligne qui ne sert à rien ca donne :

                  <?php
                  $_POST("nom")
                  if (isset($_POST) && !empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['message'])) {
                  extract($_POST);
                  $message=addslashes($message);
                  $message=str_replace("\' "," '", mixed search, mixed replace, mixed subject);
                  $destinataire="heureslave@gmail.com";
                  $sujet="Formulaire de contact";
                  $msg="Une nouvelle question est arrivée \n
                  Nom : $nom \n
                  Email : $email \n
                  Message : $message";
                  $entete= "From: $nom \n Reply-To: $email";
                  if (mail($destinataire, $sujet, $msg, $entete)) {
                  echo "Le mail a bien été envoyé.";
                  }
                  else {
                  echo "Le mail n'a pas pu être envoyée !";
                  }
                  }
                  else {
                  echo "Vous n'avez pas remplis tous les champs.";
                  }

                  }
                  ?>
                  1. if(!empty($nom) && !empty($email) && !empty($message)){ 
                    


                    Cette ligne sert à rien puisque la première effectue déjà les vérifications demandées. De plus la syntaxe laisse à désirer.
                    Ce sont les modifications que tu as apportés qui produisent cette erreur apparemment (en plus de ne servir à rien).
                    1. Donc après une ou deux modestes modification :

                      <?php
                      $_POST("nom")
                      if (isset($_POST) && !empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['message'])) {
                      extract($_POST);
                      if(!empty($nom) && !empty($email) && !empty($message)){
                      $message=addslashes($message);
                      $message=str_replace("\' "," '", mixed search, mixed replace, mixed subject);
                      $destinataire="heureslave@gmail.com";
                      $sujet="Formulaire de contact";
                      $msg="Une nouvelle question est arrivée \n
                      Nom : $nom \n
                      Email : $email \n
                      Message : $message";
                      $entete= "From: $nom \n Reply-To: $email";
                      if (mail($destinataire, $sujet, $msg, $entete)) {
                      echo "Le mail a bien été envoyé.";
                      }
                      else {
                      echo "Le mail n'a pas pu être envoyée !";
                      }
                      }
                      else {
                      echo "Vous n'avez pas remplis tous les champs.";
                      }

                      }
                      ?>

                      Mais ca ne marche toujours pas.
                      (A ba oui c'est un métier!!! lol)
                      1. Ca sert à rien de faire un isset suivi d'un !empty. Un champ non-vide aura forcément été défini.
                        1. $_POST est une variable comme une autre.
                          Une variable n'est pas forcément du texte (une chaine de caractères, string) mais ça peut aussi être un nombre (int), un objet (avec les classes), une ressource, ...
                          1. Je dis pas le contraire mais je vois juste pas d'erreur sur cette ligne (en supposant que ce soit bien la ligne 3 du fichier).
                            Mais bon, il me semblait bien aussi...
                        2. Je me demande si c'est pas isset($_POST) qu'il n'accepte pas.
                          if (isset($_POST['nom']) && !empty($_POST['nom']) && isset($_POST['email'])  && !empty($_POST['email']) && isset($_POST['message']) &&  !empty($_POST['message']))
                          1. Si c'est bien la troisième ligne de ton code, oui. Sinon .. Elle est ailleurs.
                            1. J'ai toujours ce message qui s'affiche : Parse error: syntax error, unexpected T_IF in /home/site1122/web/www/heureslave/contact.php on line 3

                              Je n'arrive pas à trouver l'erreur...(pour la simple raison que je ne m'y connais pas!! ^^)

                              Si je comprends bien, l'erreur ce trouve sur cette ligne :

                              if (isset($_POST) && !empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['message'])) {
                              1. Donc j'ai mis le tout en ligne, c'est mieu!!^^

                                mais j'ai un message d'erreur (pour la ligne 3)

                                Parse error: syntax error, unexpected T_IF in /home/site1122/web/www/heureslave/contact.php on line 3

                                A quoi correspond il?, la je suis perdu! :)

                                Merci encore pour tout!!
                                1. Non.

                                  Sauf si tu utilises en local un serveur web local avec Apache, PHP/MySQL d'installé et avec le SMTP configuré correctement dans le php.ini du serveur.
                                  • 1
                                  • 2