8797 sujets

Développement web côté serveur, CMS

Salut tout le monde,

Je viens de mettre en place un formulaire de contact sur mon site.

Il marche bien, je reçois les messages, tout est ok ... sauf que, lorsqu'il y a des erreurs lors du remplissage, la page d'erreur est tout sauf belle (en fait, c'est du texte brut). Comment faire pour intégrer les messages d'erreur dans la page actuelle ?

Voici mon code PHP :


<?php

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

function stripslashes_r($var)
{
        if(is_array($var))
        {
                return array_map('stripslashes_r', $var);
        }
        else
        {
                return stripslashes($var);
        }
}
 
if(get_magic_quotes_gpc()) //
{
   $_GET = stripslashes_r($_GET);
   $_POST = stripslashes_r($_POST);
   $_COOKIE = stripslashes_r($_COOKIE);
}

if(isset($_POST['email'])) {
     
    $email_to = "ma belle adresse email";
     
    $email_subject = "From the website's contact form. ";
     
     
    function died($error) {
        // error code
        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: <i>two</i> comes after <i>one</i>.<br>';
  }
  
  $string_exp = "/^[A-Za-zé\.¸UûÙùàÀèÈéÉïÏîÎôÔêÊçÇ \,\\\'\-]+$/";
  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 = "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();
?>


Merci de votre aide !

Smiley biggrin
Comme ça :


<?php

// si il y a des erreurs on les stockera ici.
$error = Array();

// si le formulaire est soumis on traite les données
if (!empty($_POST)) {
	
	extract($_POST);

  // on valide les champs
  if (empty($email) {
  	$error['email'] = 'Le champs email est obligatoire.';
  } elseif (filter_var($email, FILTER_VALIDATE_EMAIL)) {
 	$error['email'] = 'Cette adresse email n\'est pas valide.';
  }
  
  // si il n'y a pas d'erreur on envoi le mail
  if (empty($error)) {
  
  	...
  
  }
}
?>
<form...>

<input type="email"...

<?php if (!empty($error['email'])): ?>
	<div class="error">
		<?php echo $error['email']; ?>
	</div>
<?php endif; ?>

...

Modifié par jb_gfx (14 Oct 2012 - 19:23)
Merci, je vais essayer.

Un jour je me mettrai au PHP Smiley lol

Edit : je ne vois pas trop comment intégrer ça dans le code actuel en fait ... désolé de t'embêter, mais j'y connais rien en PHP ...
Modifié par Stephanelam (14 Oct 2012 - 19:25)
J'ai modifié mon fichier mail.php comme ceci, si j'ai bien compris, c'est ce qu'il fallait faire :


<?php
// si il y a des erreurs on les stockera ici.
$error = Array();

// si le formulaire est soumis on traite les données
if (!empty($_POST)) {
  
  extract($_POST);

  // on valide les champs
  if (empty($email) {
    $error['email'] = 'Le champs email est obligatoire.';
  } elseif (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  $error['email'] = 'Cette adresse email n\'est pas valide.';
  }
  
  // si il n'y a pas d'erreur on envoi le mail
  if (empty($error)) {
  
    header ('Content-type: text/html; charset=utf-8');

    function stripslashes_r($var)
    {
            if(is_array($var))
            {
                    return array_map('stripslashes_r', $var);
            }
            else
            {
                    return stripslashes($var);
            }
    }
     
    if(get_magic_quotes_gpc()) //
    {
       $_GET = stripslashes_r($_GET);
       $_POST = stripslashes_r($_POST);
       $_COOKIE = stripslashes_r($_COOKIE);
    }

    if(isset($_POST['email'])) {
         
        $email_to = "mon email";
         
        $email_subject = "From the website's contact form. ";
         
         
        function died($error) {
            // error code
            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: <i>two</i> comes after <i>one</i>.<br>';
      }
      
      $string_exp = "/^[A-Za-zé\.¸UûÙùàÀèÈéÉïÏîÎôÔêÊçÇ \,\\\'\-]+$/";
      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 = "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();
?>


Et j'obtiens :
Parse error: syntax error, unexpected '{' in /homez.361/stephanesj/www/mail.php on line 11

Sauf que débugger du PHP pour moi c'est comme du traduire du chinois, donc j'veux bien encore un coup de pouce s'il te plaît, merci Smiley smile
jb_gfx a écrit :
Fait voir le code de la page de ton formulaire.


Ca ressemble à ça :


<form action="mail.php" method="post">
	               
	<input type="text" name="name" placeholder="What's your name?"> 
					
	<input type="email" name="email" placeholder="And your email address?"> 
					
	<textarea name="comment" placeholder="So, what do you want to tell me?"></textarea> 
					
	<input type="text" id="captcha" name="captcha" placeholder="Write in letters what comes after 1."/> 
					
	<button type="submit" name="btn" class="action">Send</button>
        
</form>


Smiley biggrin
Modifié par Stephanelam (14 Oct 2012 - 20:01)
Voilà :


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

function stripslashes_r($var)
{
  if (is_array($var)) {
    return array_map('stripslashes_r', $var);
  } else {
    return stripslashes($var);
  }
}
     
if(get_magic_quotes_gpc())
{
  $_GET = stripslashes_r($_GET);
  $_POST = stripslashes_r($_POST);
  $_COOKIE = stripslashes_r($_COOKIE);
}

// si il y a des erreurs on les stockera ici.
$error = Array();

// si le formulaire est soumis on traite les données
if (!empty($_POST)) {
  
  // on valide les champs
  if (empty($_POST['email'])) {
    $error['email'] = 'You must enter your email address.';
  } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    $error['email'] = 'This email address is not valid.';
  }

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

  if (empty($_POST['name'])) {
    $error['name'] = 'You must enter your name.';
  } elseif (!preg_match($string_exp,$_POST['name'])) {
    $error['name'] = 'The name you entered does not appear to be valid. Please check that there are no special caracters or accents.<br>';
  }

  if (empty($_POST['comment'])) {
    $error['name'] = 'You must enter a message.';
  } elseif(strlen($_POST['comment']) < 2) {
    $error['comments'] = 'The message you entered is too short.';
  }

  $captcha_exp = 'two';
  if ($captcha_exp != $_POST['captcha']) {
    $error['captcha'] = 'Hint: <i>two</i> comes after <i>one</i>.';
  }

  // si il n'y a pas d'erreur on envoi le mail
  if (empty($error)) {

    $email_to = "mon email";
    $email_subject = "From the website's contact form. ";
    $name = $_POST['name']; // required
    $email_from = $_POST['email']; // required
    $comment = $_POST['comment']; // required
    $email_message = "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($name)."\n";
    $email_message .= "Email: ".clean_string($email_from)."\n";
    $email_message .= "Comment: ".clean_string($comment)."\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); 

		unset($_POST);
		$success = true;
  }
}
?>

  <?php if (!empty($success) && true === $success): ?>
    <p>Votre message à bien été envoyé.</p>
  <?php endif; ?>

<form action="contact_steph.php" method="post">
	               
	<input type="text" name="name" value="<?php echo !empty($_POST['name']) ? $_POST['name'] : ''; ?>" placeholder="What's your name?"> 
  
  <?php if (!empty($error['name'])): ?>
  <div class="error">
    <?php echo $error['name']; ?>
  </div>
  <?php endif; ?>
					
	<input type="email" name="email" value="<?php echo !empty($_POST['email']) ? $_POST['email'] : ''; ?>" placeholder="And your email address?"> 

  <?php if (!empty($error['email'])): ?>
  <div class="error">
    <?php echo $error['email']; ?>
  </div>
  <?php endif; ?>

	<textarea name="comment" placeholder="So, what do you want to tell me?"><?php echo !empty($_POST['comment']) ? $_POST['comment'] : ''; ?></textarea> 

  <?php if (!empty($error['comment'])): ?>
  <div class="error">
    <?php echo $error['comment']; ?>
  </div>
  <?php endif; ?>

	<input type="text" id="captcha" name="captcha" value="<?php echo !empty($_POST['captcha']) ? $_POST['captcha'] : ''; ?>" placeholder="Write in letters what comes after 1."/> 

  <?php if (!empty($error['captcha'])): ?>
  <div class="error">
    <?php echo $error['captcha']; ?>
  </div>
  <?php endif; ?>

					
	<button type="submit" name="btn" class="action">Send</button>
        
</form>
Merci beaucoup !! Smiley smile

Je vais mettre ça en place.

EDIT : parfait !! j'ai enlevé le "contact_steph" et ça a l'air de marcher, j'attends de voir si je reçois le mail mais au niveau de l'affichage des erreurs c'est nickel, merci !!

Smiley biggrin
Modifié par Stephanelam (14 Oct 2012 - 20:31)