8797 sujets

Développement web côté serveur, CMS

Salut tout le monde,

J'ai un formulaire de contact avec le code suivant:

<?php

header ('Content-type: text/html; charset=utf-8');

if(isset($_POST['email'])) {
     
    $email_to = "dontwant@spam.atall";
     
    $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('Oops. I am 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 = 'two';
  if ($captcha_exp != $captcha) {
    $error_message .= 'Hint: two.<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. Please check that there are no special caracters or accents.<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 j'ai un problème : quand l'utilisateur rentre un nom avec des accents, le formulaire rejette l'utilisateur en lui disant qu'il a rentré des caractères interdits. Comment ajouter le range des caractères spéciaux aux caractères autorisés ?

Deuxième problème : plus généralement, dans l'ensemble du formulaire, lorsque l'utilisateur rentre un accent, je le reçois mal. Par exemple, "Stéphane" donne "Stéphane".

Que faire ?

Merci beaucoup,
Stéphane Smiley biggrin
Modifié par Stephanelam (20 Sep 2011 - 21:50)
Bonsoir,

a écrit :

quand l'utilisateur rentre un nom avec des accents, le formulaire rejette l'utilisateur en lui disant qu'il a rentré des caractères interdits.


c'est aussi écrit là (expression régulière):


  if(!preg_match($string_exp,$first_name)) {

    $error_message .= 'The name you entered does not appear to be valid. Please check that there are no special caracters or accents.<br>';


change ton script, pour interdire les slash, backslah, chiffres, ou autres.
Modifié par FloydinBremen (20 Sep 2011 - 22:46)
Cette phrase, c'est justement moi qui l'ai ajoutée en attendant de trouver comment on fait pour autoriser les accents. Sauf que je ne trouve pas.

Je suppose que c'est un range de caractères pré-défini, mais je sais pas lequel.

Smiley smile
Bon, j'ai finalement trouvé tout seul comme un grand. Pour ceux qui seraient intéressés:

$string_exp = "/^[A-Za-zé\.¸UûÙùàÀèÈéÉïÏîÎôÔêÊçÇ \,\\\'\-]+$/";