Modifications pour que la régénération soit directement sur la page + mise en forme du formulaire

Ajout de la class css "spam" pour l'affichage des messages d'erreurs
This commit is contained in:
Zatalyz 2024-09-12 09:57:14 +02:00
parent 8e785c5047
commit 65151ab1a6
2 changed files with 71 additions and 44 deletions

View file

@ -47,22 +47,26 @@ if (isset($_POST['new_question'])) {
$_SESSION['current_question'] = null;
$_SESSION['correct_answers'] = null;
// Rediriger pour éviter la soumission de formulaire inutile
header("Location: form.php");
header("Location: #answer");
exit();
}
if ($try == 'send') {
// Vérifier le token CSRF
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
echo "<span class=\"spam\">";
echo $txt['csrf_error'];
include 'form_struct.php';
echo "</span>";
return ;
exit();
}
// Ici Le visiteur soumet le formulaire
if (($nobotc != md5($nobotv)) || ($nobotv == '') || ($nobots != '')) {
echo $txt['antispam_error'];
include 'form_struct.php';
echo "<span class=\"spam\">";
echo $txt['antispam_error'];
echo "</span>";
return ;
} else {
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = strip_tags(trim($_POST["name"]));
@ -73,13 +77,17 @@ if ($try == 'send') {
// Validation des données
if (empty($name) || empty($email) || empty($subject) || empty($message) || empty($user_answer)) {
echo "<span class=\"spam\">";
echo $txt['required_fields'];
include 'form_struct.php'; // Réaffiche le formulaire en cas d'erreur
echo "</span>";
return ; // Réaffiche le formulaire en cas d'erreur
} else {
// Vérifier la présence de liens : si oui, fin du script
if (preg_match('/http(s?):\/\//ism', $message)) {
echo "<span class=\"spam\">";
echo $txt['link_error'];
include 'form_struct.php'; // Réaffiche le formulaire en cas d'erreur
echo "</span>";
return ; // Réaffiche le formulaire en cas d'erreur
exit(); // Arrêter l'exécution si un lien est trouvé
}
@ -87,8 +95,10 @@ if ($try == 'send') {
$bad_words = $config['bad_words'];
foreach ($bad_words as $bad) {
if (stripos($message, $bad) !== false) {
echo "<span class=\"spam\">";
echo $txt['bad_word_error'];
include 'form_struct.php'; // Réaffiche le formulaire en cas d'erreur
echo "</span>";
return ; // Réaffiche le formulaire en cas d'erreur
exit(); // Arrêter l'exécution si un mot interdit est trouvé
}
}
@ -110,16 +120,14 @@ if ($try == 'send') {
echo $txt['email_error'];
}
} else {
echo "<span class=\"spam\">";
echo $txt['bad_answer'];
include 'form_struct.php'; // Réaffiche le formulaire en cas d'erreur
echo "</span>";
return ; // Réaffiche le formulaire en cas d'erreur
}
}
}
}
}
} else {
// Ici on affiche le formulaire, c'est l'affichage par défaut
include 'form_struct.php';
}
?>
<div><a href="index.php">Retour au site</a></div>

View file

@ -1,41 +1,60 @@
<h2>Contact</h2>
<p>Vous voulez me spammer ? Heu, me contacter ? Laissez-moi un gentil mot :)</p>
<form action="form.php" method="POST">
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">
<div>
<!-- Token CSRF -->
<input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($_SESSION['csrf_token']); ?>">
<!-- pour les bots -->
<input type="hidden" name="try" value="send">
<input type="hidden" name="nobotv" value="<?php echo $nobot; ?>">
<!-- Si j'ajoute "required", ça foire pour demander à changer de question... donc on va faire sans, de toute façon c'est ensuite testé par php. -->
<div>
<label for="name"><?php echo $txt['name']; ?></label>
<input type="text" id="name" name="name" placeholder="Nom">
</div>
<div>
<label for="email"><?php echo $txt['mail']; ?></label>
<input type="email" id="email" name="email" placeholder="Courriel">
</div>
<div>
<label for="subject"><?php echo $txt['subject']; ?></label>
<input type="text" id="subject" name="subject" placeholder="Titre du message">
</div>
<div>
<label for="message"><?php echo $txt['message']; ?></label>
<textarea id="message" name="message" rows="6" cols="50" placeholder="Entrer votre message"></textarea>
</div>
<!-- Antibot -->
<div>
<input id="nobotc" type="checkbox" name="nobotc" value="<?php echo md5($nobot); ?>" />
<!-- Si j'ajoute "required", ça foire pour demander à changer de question... donc on va faire sans, de toute façon c'est ensuite testé par php. -->
<label for="name"><?php echo $txt['name']; ?></label>
<input type="text" id="name" name="name"><br><br>
<label for="email"><?php echo $txt['mail']; ?></label>
<input type="email" id="email" name="email" ><br><br>
<label for="subject"><?php echo $txt['subject']; ?></label>
<input type="text" id="subject" name="subject" ><br><br>
<label for="message"><?php echo $txt['message']; ?></label><br>
<textarea id="message" name="message" rows="4" cols="50" ></textarea><br><br>
<h3>Mesure anti spambot</h3>
<p>Parce que je n'aime pas le spam, je n'aime pas les messages douteux, et j'aime pas trop qu'on me cause en fait. Attention à vos réponses, je vous bannis de mes serveurs si vous êtes méchants. </p>
<!-- Questions -->
<p><label for="answer"><?php echo htmlspecialchars($current_question); ?></label>
<input type="text" id="answer" name="answer"><input type="submit" name="new_question" value="Demander une autre question">
</p>
<!-- Antibot -->
<input id="nobotc" type="checkbox" name="nobotc" value="<?php echo md5($nobot); ?>" />
<label for="nobotc"><?php echo $txt['human']; ?></label>
<p style="position: absolute; visibility: hidden; left: -5000; top: -5000">
<br><input id="nobots" type="checkbox" name="nobots" value="<?php echo time(); ?>" />
<label for="nobots"><?php echo $txt['bot']; ?></label>
</p>
<br><br>
<input type="submit" name="submit_form" value="<?php echo $txt['submit_button']; ?>">
<label for="nobotc"><?php echo $txt['human']; ?></label>
<p style="position: absolute; visibility: hidden; left: -5000; top: -5000">
<input id="nobots" type="checkbox" name="nobots" value="<?php echo time(); ?>" />
<label for="nobots"><?php echo $txt['bot']; ?></label>
</p>
</div>
<!-- Questions -->
<div>
<div>
<label for="answer"><?php echo htmlspecialchars($current_question); ?></label>
</div>
<div>
<input type="text" id="answer" name="answer">
</div>
</div>
<!-- Envoyer -->
<div>
<ul class="actions">
<li><input type="submit" name="new_question" value="Demander une autre question"></li>
<li><input type="submit" name="submit_form" class="primary" value="<?php echo $txt['submit_button']; ?>"></li>
</ul>
</div>
</div>
</form>