8791 sujets

Développement web côté serveur, CMS

Salut tout le monde !

Je suis en train de refaire mon portfolio mais je bloque sur le formulaire de contact , ayant toujours été une daube en php : quand j'envoie un mail-test, j'ai le nom, j'ai l'adresse mail de l'émetteur mais ... je n'ai pas le corps du message. Embêtant.

Voici le code du formulaire :

<form action="mail.php" method="post" id="contactform">
                <div id="name-wrap" class="slider"> 
                    <label for="name">What's your name ?</label> 
                    <input type="text" id="name" name="name" /> 
                </div><!--//name-wrap--> 
                
                <div id="email-wrap"  class="slider"> 
                    <label for="email">And your email adress ?</label> 
                    <input type="text" id="email" name="email" /> 
                </div><!--//email-wrap-->
                
                <div id="comment-wrap"  class="slider"> 
                    <label for="comment">What would you like to tell me ?</label> 
                    <textarea cols="53" rows="10" id="comment"></textarea> 
                </div><!--//comment-wrap--> 
                
                <div><button type="submit" class="btn" name="btn">Send it!</button></div>
                
            </form>


Voici le code de mail.php :

    <?php
    $name=$HTTP_POST_VARS['name'];
    $email=$HTTP_POST_VARS['email'];
    $comment=$HTTP_POST_VARS['comment'];
     
    $headers = "MIME-Version: 1.0\r\n";
     
    $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
     
    $headers .= "From: $name\r\nReply-to : $name <$email>\nX-Mailer [langue]HP";
     
    $destinataire="adresse mail cachée";
    if (mail($destinataire,$comment,$headers)) {
    echo "Your mail has been sent, I will get back to you as soon as possible. Thank you !";
    } else {
    echo "Error ! I apologize, please try to send me an email directly.";
    }
    ?>


Qu'est-ce qui cloche ?

Thanks,
Stephane
Modifié par Stephanelam (25 Jul 2011 - 17:27)
$HTTP_POST_VARS c'est du très vieux PHP (PHP 3 ou 4) et c'est obsolète. Tu dois utiliser $_POST.

Pour ton erreur tu as oublié l'attribut name sur ton textarea.
Aussi, comment, pour le message de succès, je peux lui ajouter un style en css ? J'aimerais le décaler avec margin mais je sais pas comment intégrer ça dans le script php ...

Merci Smiley smile
echo "<p class="yeah">Your mail has been sent, I will get back to you as soon as possible. Thank you !</p>";


:)
Salut les amis, j'ai une autre question toute bête à nouveau.

Voilà mon nouveau script :


<?php
if(isset($_POST['email'])) {
     
    // CHANGE THE TWO LINES BELOW
    $email_to = "info@stephanelambion.netai.net";
     
    $email_subject = "From the portfolio's contact form. ";
     
     
    function died($error) {
        // your error code can go here
        echo "I am sorry, but there were error(s) found in the form you submitted. ";
        echo $error."<br>";
        echo "Please go back and fix these errors.";
        die();
    }
     
    // validation expected data exists
    if(!isset($_POST['name']) ||
        !isset($_POST['email']) ||
        !isset($_POST['comment'])) {
        died('We are sorry, but there appears to be a problem with the form you submitted.');      
    }
     
    $first_name = $_POST['name']; // required
    $email_from = $_POST['email']; // required
    $comments = $_POST['comment']; // required
	$captcha = $_POST['captcha']; // required
     
    $error_message = "";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
  if(!preg_match($email_exp,$email_from)) {
    $error_message .= 'The email address you entered does not appear to be valid.<br>';
  }
	$captcha_exp = 'Magic';
  if(!preg_match("/php/i",$captcha_exp,$captcha)) {
    $error_message .= 'Please check that you have written Magic with a capital letter and the correct spelling.<br>';
  }
    $string_exp = "/^[A-Za-z .'-]+$/";
  if(!preg_match($string_exp,$first_name)) {
    $error_message .= 'The name you entered does not appear to be valid.<br>';
  }
  if(strlen($comments) < 2) {
    $error_message .= 'The message you entered does not appear to be valid.<br>';
  }
  if(strlen($error_message) > 0) {
    died($error_message);
  }
    $email_message = "Form details below.\n\n";
     
    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }
     
    $email_message .= "Name: ".clean_string($first_name)."\n";
    $email_message .= "Email: ".clean_string($email_from)."\n";
    $email_message .= "Comment: ".clean_string($comments)."\n";
     
     
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers); 
?>
 
<!-- success html code -->
 
<?php
}
die();
?>


Sauf que la partie captcha ne marche pas, je sais pas pourquoi.

Quelqu'un saurait me dire ?

Merci,
Stéphane

Smiley biggrin
Non j'avais écrit une bêtise alors je l'ai édité. Smiley langue

Ton captcha c'est juste le mot "Magic" ?
Modifié par jb_gfx (01 Aug 2011 - 17:24)
Ben tu recherches le texte "php" ça risque pas de marcher. Smiley langue

En plus ça sert à rien d'utiliser preg_match pour voir si 2 chaines de caractères sont identiques == suffit (ou != pour tester si elle sont différentes).

if ($captcha_exp != $captcha)