re
Alors après quelques nouveaux essais l'affichage se fait très bien, par contre j'ai fait un test sur un message très long, en me trompant sur le mot à recopier, le message :"le captcha n'est pas bon " apparaît , mais le message initial s'efface et je suis obligé de le refaire en entier. c'est gênant, est ce normal ?
Si tu "oublies" de remplir un des champs, tu as le même problème, non ?
En fait, ce qu'il faudrait faire c'est replacer ta page dans le bon sens. Ce que je ferais :
1. On Teste si on a reçu les informations du formulaire (tests sur POST etc.).
2. On affiche le formulaire. SI il y a eu une erreur (champ manquant, erreur de captcha, etc.) on affiche ce qui a été envoyé (le message et/ou le pseudo).
3. On affiche les messages.
En gros :
<?php session_start();
require('captcha.php');
// 0. Initialisation des variables
$erreur = '';
$pseudo = '';
$message = '';
$captcha = '';
// On ne fait ce traitement que si on a envoyé le formulaire =>
if ( !empty($_POST) ) {
// 1. On vérifie que les champs sont renseignés
foreach ($_POST as $var => $val) {
if ( empty($val) ) {
$erreur .= 'Veuillez renseigner le champ '.$var.'<br />';
}
else {
// Un peu délicat : on met le contenu du champ dans la variable 'nom du champ'
// $$var => $<nom du champ>.
$$var = htmlspecialchars(stripslashes($val));
}
}
// Si tous les champs sont renseignés ($erreur = '')
// 2. On teste le captcha
if ($erreur == '' && $_POST['captcha'] != $_SESSION['captcha'] ) {
$erreur .= "Le captcha n'est pas bon<br />";
}
// 3. SI tout est OK ($erreur = '') on fait l'insertion en base
if ($erreur == '') {
mysql_connect("localhost", "root", "");
mysql_select_db("test");
$message = nl2br($message);
mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "')");
}
}
?>
Pour ton formulaire :
<form method="post" action="test.php">
<p>Mon site vous plaît ? Laissez-moi un message !</p>
<?php if ( !empty($erreur) ) echo "<p class='erreur'>$erreur</p>";?>
<p>
Pseudo : <input name="pseudo" value="<?php echo $pseudo;?>" /><br />
Message :<br />
<textarea name="message" rows="8" cols="35"><?php echo $message;?></textarea><br />
<label for="captcha">Recopiez le mot : "<?php echo '123'; ?>"</label>
<input type="text" name="captcha" id="captcha" /><br />
<input type="submit" value="envoyer" />
</p>
</form>