Parse error en php

Résolu
Bonjour,
Je suis un énorme débutant en php. J'ai fait un formulaire tout bête en htlm ainsi que le php correspondant à son traitement et qui permet de recevoir les données saisies dans ma boite mail.
J'ai un problème avec le php et il doit être énorme et facile à voir pour les initiés. Voici mon php :
<?php
if($_POST){
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
if(empty($erreurs)) {
$to = "test@yahoo.fr";
$contenu = "message de : ".$prenom." ".$nom;
$resultat = mail($to, $subject, $contenu, $reply);
if($resultat) {
echo "email envoyé";
} else {
echo "échec";
}
}
?>

Une fois mon formulaire validé, j'ai le message d'erreur suivant :
Parse error: syntax error, unexpected $end in /home/b/testquest/html/traitementest.php on line 15.
J'ai merdé à la dernière ligne !!! C'est quoi qui va pas ???
Merci pour vos réponses
Éric
Configuration: Windows XP
Firefox 3.0.3

45 réponses

Résumé de la discussion

Le problème central est une erreur de syntaxe PHP lors du traitement d'un formulaire HTML, aboutissant à une fin de fichier inattendue sur une ligne donnée. Des corrections portent sur la fermeture des blocs PHP et des accolades, l'emploi cohérent de $_POST et isset pour récupérer les champs, puis l'assemblage du contenu et l'envoi via mail. D'autres proposent d'utiliser foreach pour parcourir un tableau de champs et générer le contenu du message, évitant ainsi les déclarations répétitives et les nombreuses vérifications isset. Par ailleurs, des questions persistent sur l'encodage des caractères et sur la compatibilité entre le codage du formulaire et celui des mails, notamment pour les accents.

Bobot (l’IA à votre service)
  1. Il s'agit d'un crochet manquant.
    J'ai corrigé ton code et j'ai amélioré sa présentation qui t'aide a distinguer les blocs.

    <?php
    if($_POST){
    $nom = $_POST['nom'];
    $prenom = $_POST['prenom'];

    if(empty($erreurs)) {
    $to = "test@yahoo.fr";
    $contenu = "message de : ".$prenom." ".$nom;
    $resultat = mail($to, $subject, $contenu, $reply);
    }

    if($resultat) {
    echo "email envoyé";
    } else {
    echo "échec";
    }

    }
    ?>

    Bon travail
    -1
    1. Super !
      Je te remercie mille fois pour ton aide et ta gentillesse !
      Bonne continuation !!
      Éric
      -1
      1. C'est encore moi ...
        J'ai voulu compléter mon formulaire en rajoutant deux boutons radio (oui et non).
        J'aurais voulu récupérer le choix de l'utilisateur dans mon mail. Encore une fois j'ai une parse erreur :
        Voici mon script :
        <?php
        if($_POST){
        $nom = $_POST['nom'];
        $prenom = $_POST['prenom'];
        $musique = $_POST['musique'];

        if(isset($_POST['musique']))
        htmlentities ($_POST['musique']);

        if(empty($erreurs)) {
        $to = "test@yahoo.fr";
        $contenu = "message de : ".$prenom." ".$nom;
        $contenu = "reponse : ".$musique.";
        $resultat = mail($to, $subject, $contenu, $reply);
        }

        if($resultat) {
        echo "email envoyé";
        } else {
        echo "échec";
        }

        }
        ?>

        Le résultat est :
        Parse error: syntax error, unexpected T_STRING in /home/b/bijtoulon/html/traitementest.php on line 18

        Vous arrivez à voir le gag ? Ca fait deux heures que j'essaie et je vois rien.
        Merci !
        -1
        1. Voila,
          Un conseil, essaies toujours de diviser ton code en blocs

          <?php
          if($_POST){
          $nom = $_POST['nom'];
          $prenom = $_POST['prenom'];
          $musique = $_POST['musique'];

          $musique = "";
          if(isset($_POST['musique'])){
          $musique = htmlentities($_POST['musique']); }

          if(empty($erreurs)) {
          $to = "test@yahoo.fr";
          $contenu = "message de : ".$prenom." ".$nom;
          $contenu = "reponse : ".$musique;
          $resultat = mail($to, $subject, $contenu, $reply);
          }

          if($resultat) {
          echo "email envoyé";
          } else {
          echo "échec";
          }

          }
          ?>
          -1
          1. OK, merci encore ! En fait, tu laisses un espace après chaque fonction ?
            -1
            1. Ben, débrouille toi pour que cela soit visible c'est à dire

              <?php
              if($_POST)
              {
              $nom = $_POST['nom'];
              $prenom = $_POST['prenom'];
              $musique = $_POST['musique'];

              $musique = "";
              if(isset($_POST['musique']))
              {
              $musique = htmlentities($_POST['musique']);
              }

              if(empty($erreurs))
              {
              $to = "test@yahoo.fr";
              $contenu = "message de : ".$prenom." ".$nom;
              $contenu = "reponse : ".$musique;
              $resultat = mail($to, $subject, $contenu, $reply);
              }

              if($resultat)
              {
              echo "email envoyé";
              }
              else
              {
              echo "échec";
              }

              }
              ?>

              On appel cela indentation et la présentation d'un code. Le quel des deux tu lis le mieux =>

              function insert_id($record = 0) {if ($record)return (mysql_insert_id($record)); return (mysql_insert_id());}function insert_id($record = 0){iif ($record)return (mysql_insert_id($record)); return (mysql_insert_id()); }

              function insert_id($record = 0)
              {
              if ($record)
              return (mysql_insert_id($record));
              return (mysql_insert_id());
              }
              -1
              1. J'ai encore un souci ...
                Du coup, dans mon mail, je ne récupère plus que la réponse cochée par l'utilisateur, je ne vois plus son nom et son prénom. (Avant j'avais "réponse de : nom prénom")
                Je ne peux utiliser $contenu qu'une seule fois ?
                Ou il faut mettre le champ musique et son résultat à la suite de ".nom; ?
                En fait, je demande le nom et le prénom puis je pose la question Aimez-vous la musique ? avec oui non comme réponse possible.
                -1
                1. A ben, oui tu peux pas utiliser plusieurs fois le nom du variable dans ces conditions
                  pour le nom et le prenom tu devrais nommer ta var : $nom_prenom et pour la musique $musique

                  et On ne peut pas le voir parce que Comment Ca Marche change la mise en forme mais après

                  après une condition ou une boucle je te conseil de mettre un TAB histoire d'avancer un peu le code
                  -1
                  1. Dsl pour mon absence

                    Pour $contenu utilisez plustot la concatenation

                    if(empty($erreurs))
                    {
                    $to = "test@yahoo.fr";
                    $contenu = "message de : ".$prenom." ".$nom;
                    $contenu .= "reponse : ".$musique;
                    $resultat = mail($to, $subject, $contenu, $reply);
                    }

                    le point avant le = indique a php qu'il faut ajouter a la variable et non pas ecraser.

                    Bon travail
                    -1
                    1. Merci pour ta réponse,
                      Je vais essayer ce que tu me conseilles ce soir car je commence à fatiguer ...
                      En effet, c'est plus clair au niveau présentation... et lisibilité.
                      Si je nomme ma var $nom_prenom qu'est-ce qu'il se passe pour des deux champs de formulaire qui eux sont différents ?
                      Par contre, si j'ai un formulaire, disons, d'une dizaine de champs texte et d'une vingtaine de boutons radio ... ça va donner quoi ça au niveau du codage en php ???? Il y faudrait y passer des journées entières pour écrire le php correspondant au formulaire html... avec toutes les erreurs qui peuvent en résulter ... Vu comment je galère avec un formulaire de 4 champs !!! Il n'y a pas un moyen de générer le php d'après le formulaire ?
                      Tu pourrais me conseiller un livre pour apprendre le php ? J'ai pas envie de passer mon temps à emboucanner tout le monde sur le forum à cause de parse errors en pagaille !
                      Merci encore,
                      Éric
                      -1
                      1. Merci Brixxx !
                        Je viens de lire votre réponse au sujet du point et de la concaténation. Fallait l'inventer ça !
                        Que pensez-vous de mes questions existentielles posées plus haut ?
                        Bonne soirée et merci encore,
                        Éric
                        -1
                        1. Je répondrais ce soir car j'ai bcp de travail maintenant

                          A+
                          -1
                          1. OK, c'est déjà bien sympath de m'avoir répondu jusqu'à présent !
                            Bon courage !
                            Éric
                            -1
                            1. Bonsoir Azerwhite !
                              Merci pour le lien, il est vraiment génial ce site, j'arrive pas à décrocher !
                              Bonne soirée,
                              Éric
                              -1
                              1. Ravi que ta eu ce que tu voulais :)
                                -1
                                1. Bon, mon formulaire évolue ... MAIS avec chaque évolution il y a de nouveaux écueils...

                                  Voilà à quoi ressemble le fichier de traitement :
                                  <?php
                                  if($_POST)
                                  {
                                  $fille = $_POST['fille'];
                                  $garcon = $_POST['garcon'];
                                  $Age = $_POST['Age'];
                                  $collegien = $_POST['collegien'];
                                  $lyceen = $_POST['lyceen'];
                                  $etudiant = $_POST['etudiant'];
                                  $formation = $_POST['formation'];
                                  $demploi = $_POST['demploi'];
                                  $salarie = $_POST['salarie'];
                                  $autressitu = $_POST['autressitu'];
                                  $SituationAutre = $_POST['SituationAutre'];
                                  $Ville = $_POST['Ville'];
                                  $centresinteret = $_POST['centresinteret'];

                                  if(isset($_POST['fille']))
                                  {
                                  $fille = htmlentities($_POST['fille']);
                                  }

                                  if(isset($_POST['garcon']))
                                  {
                                  $garcon = htmlentities($_POST['garcon']);
                                  }

                                  if(empty($erreurs))
                                  {
                                  $to = "test@yahoo.fr";
                                  $contenu = ".$fille;
                                  $contenu .= ".$garcon;
                                  $resultat = mail($to,$subject,$contenu,$reply);
                                  }

                                  if($resultat)
                                  {
                                  echo "email envoyé avec succès";
                                  }
                                  else
                                  {
                                  echo "échec envoi du mail vérifiez les données entrées";
                                  }

                                  }
                                  ?>

                                  Je voudrais savoir s'il y a moyen d'éviter de "déclarer" chaque champ de formulaire ($fille = $_POST......) comme j'ai fait au début. N'y a-t-il pas un traitement "par lot" ?
                                  De la même façon, y-a-t-il un moyen d'envoyer d'un coup par mail toutes les infos saisies dans mon formulaire (que ce soit dans un champ texte ou par bouton radio) et d'avoir à utiliser 50 fois if ... isset ... htmlentities ou plus bas $contenu.
                                  J'ai vu la fonction foreach, mais je ne sais pas si elle est applicable là ... et ce que cela pourrait donner ...
                                  Merci d'avance,
                                  Éric
                                  1
                                  1. Alors le foreach:

                                    Prenons un tableau qui contient une 50ène d'email que l'on nomme tadam :
                                    $tab_email;

                                    foreach ($tab_email AS $email)
                                    {
                                    echo $email;
                                    envoyer 'salut' à l'email $email;
                                    }

                                    Ben, dans le tableau $tab_email, on attribut à la case une, puis la case deux, puis la case trois etc le nom de $email grâce au AS et pour chaque $email on exécute chaque instruction. C'est magique pour les tableaux pas besoin de faire un count puis de faire un while avec le compte $i etc etc le foreach parcoure le tableau c'est méga bien
                                    1
                                    1. Mais biens sure les noms des champs dans le formulaire doivent correspondre aux noms de champs dans le tableau $_POST
                                      0
                                      • 1
                                      • 2
                                      • 3