2010-06-06 4 views
1

Je travaille sur un formulaire de contact PHP, mais je n'arrive pas à le faire fonctionner. Je reçois l'erreur suivante dans le journal du serveur Apache, en cours d'exécution sur une machine virtuelle Ubuntu Server:

PHP Parse error: syntax error, unexpected $end in /home/matthew/Sites/contactFormResponse.php on line 75, referer: http://192.168.1.4/contactForm.php 

De googler cette erreur, il semble que cela est normalement causée soit en utilisant la courte balise PHP lorsque le serveur est pas configuré pour les reconnaître, ou en ayant un bloc de code qui n'est pas fermé correctement. Mais autant que je peux voir ce n'est pas le cas ici - autant que je peux voir, tout est fermé correctement. La ligne à laquelle il fait référence est une ligne après la fin du fichier.

Voici le code PHP:

<?php 
            error_reporting(E_ALL); 
            // Define variables to hold the name, email address and message, and import the information into the variables 
            $name = $_POST['NameInput']; 
            $email = $_POST['EmailAddress']; 
            $telno = $_POST['ContactNumber']; 
            $querytype = $_POST['QueryType']; 
            $bookingstartdate = $_POST['BookingStartDay'] . $_POST['BookingStartMonth'] . $_POST['BookingStartYear']; 
            $bookingenddate = $_POST['BookingEndDay'] . $_POST['BookingEndMonth'] . $_POST['BookingEndYear']; 
            $message = $_POST['QueryText']; 

            // Validate the inputs - send it if it's OK 
            if(3 < strlen($name) && 3 < strlen($email)) 
            { 
              $email_message = <<< EMAIL 
                Message from contact form at holidaychalet.co.uk 
                Name: $name 
                Email: $email 
                Contact Number: $telno 
                Query Type: $querytype 
                Booking Start Date: $bookingstartdate 
                Booking End Date: $bookingenddate 
                The message: 
                $message 
                EMAIL; 
              $headers = "cc:[email protected]\r\n"; 
              if(mail('[email protected]','Contact form email', $email_message, $headers)) 
              { 
                echo "Thanks for completing the form! I'll be in touch shortly!"; 
              } 
              else 
              { 
                echo "Something went wrong - please use the back button and try again"; 
              } 
            } 
            else 
            { 
              echo "You didn't complete the form fully enough! Please use go back using your web browser's back button"; 
            } 
          ?> 
+0

Ces questions sont contre la politique SO. –

+0

@Col. Shrapnel Pourquoi? Je ne vois rien à ce sujet dans la FAQ et je n'ai pas trouvé la réponse ailleurs. –

+0

Votre question ne va pas à l'encontre d'une politique, je n'ai aucune idée de ce dont le colonel Shrapnel parle. – Amber

Répondre

5

L'identifiant de clôture pour le here document syntax doit être au début de la ligne sans indentation:

Il est très important de noter que la ligne avec l'identificateur de fermeture ne doit contenir aucun autre caractère, sauf éventuellement un point-virgule (;). Cela signifie en particulier que l'identificateur ne peut pas être indenté, et qu'il n'y a pas d'espaces ou d'onglets avant ou après le point-virgule. Il est également important de réaliser que le premier caractère devant l'identifiant de fermeture doit être un retour à la ligne tel que défini par le système d'exploitation local.

Donc dans votre cas:

          $email_message = <<< EMAIL 
                Message from contact form at holidaychalet.co.uk 
                Name: $name 
                Email: $email 
                Contact Number: $telno 
                Query Type: $querytype 
                Booking Start Date: $bookingstartdate 
                Booking End Date: $bookingenddate 
                The message: 
                $message 
EMAIL; 
+1

+1 Malheureusement, c'est comme ça, rendant HEREDOC inutile dans la plupart des cas. –

+1

Er? C'est encore complètement utilisable ... avoir l'identifiant proche non indenté ne tue pas la lisibilité du code. En fait, il est logique, étant donné que l'espace blanc pour le contenu heredoc * sera inclus dans la chaîne produite, ainsi il garde le développeur conscient de ce qu'ils mettent dans leurs chaînes. – Amber

+0

Cheers, c'est résolu le problème! –

4
EMAIL; 

ne peut pas être en retrait. Heredoc La syntaxe requiert que l'identificateur de fermeture se trouve au et commence de la ligne, et cela n'inclut aucun espace de début.

3

Vous remplissez $ email_message avec une chaîne qui est marquée pour se terminer par EMAIL;

Celui-ci doit être sur une seule ligne.

Modifier à:

          $email_message = <<< EMAIL 
                Message from contact form at holidaychalet.co.uk 
                Name: $name 
                Email: $email 
                Contact Number: $telno 
                Query Type: $querytype 
                Booking Start Date: $bookingstartdate 
                Booking End Date: $bookingenddate 
                The message: 
                $message 
EMAIL; 
Questions connexes