J'essaie de mettre au point un système permettant de bloquer l'IP après qu'un message a été envoyé, et ce pendant quelques minutes.
Pour cela, je crée une table dans la base de données.
Code : Tout sélectionner
CREATE TABLE `courriel` (
`id` int(11) NOT NULL auto_increment,
`ip` text NOT NULL,
`temps` bigint(20) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
<?php
session_start();
include ("sgbd/mysql.php");
// Paramètres du courriel
$destinataire='[email protected]';
$courriel=(!isset($_POST['courriel']))? '': $_POST['courriel'];
$courriel_confirmation=(!isset($_POST['courriel_confirmation']))? '': $_POST['courriel_confirmation'];
$objet=(!isset($_POST['objet']))? '': $_POST['objet'];
$saisie=(!isset($_POST['saisie']))? '': $_POST['saisie'];
$cle_primaire=(!isset($_POST['cle_primaire']))? '': $_POST['cle_primaire'];
$message=(!isset($_POST['message']))? '': $_POST['message'];
$en_tete='From: '.$courriel.'\nReply-to: '.$courriel.'\n';
$en_tete=str_replace('\r\n', '\n', $en_tete);
// Paramètres de l'IP
$requete_ip_selection="SELECT id, ip, temps FROM courriel WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
$resultat_ip_selection=mysql_query($requete_ip_selection);
$donnees_ip_selection=mysql_fetch_array($resultat_ip_selection);
$temps_blocage=time()-$donnees_ip_selection['temps'];
if (mysql_num_rows($resultat_ip_selection)!=0 && $temps_blocage>=120){
$requete_ip_selection="DELETE FROM courriel WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
$resultat_ip_selection=mysql_query($requete_ip_selection);
}
// Envoi du courriel et blocage de l'IP
if (isset($_POST['courriel']) && isset($_POST['courriel_confirmation']) && isset($_POST['message']) && isset($_POST['saisie']) && !empty($courriel) && !empty($courriel_confirmation) && !empty($message) && !empty($saisie) && $saisie==$_SESSION['confirmation_visuelle'] && $courriel_confirmation==$courriel){
if ($resultat_ip_selection && $temps_blocage<120){
$avis='Vous ne pouvez pas envoyer un nouveau message en si peu de temps. Cliquez <a href="contact.php" title="Contact">ici</a> pour retourner au formulaire.';
}
else{
mail($destinataire, htmlentities($objet), stripslashes(htmlentities($message)), $en_tete);
$avis='Votre message a bien été envoyé. Cliquez <a href="index.php" title="Contact">ici</a> pour revenir à l’accueil.';
$requete_ip_insertion="INSERT INTO courriel (ip, temps) VALUES ('".$_SERVER['REMOTE_ADDR']."', '".time()."')";
echo $requete_ip_insertion;
mysql_query($requete_ip_selection);
if (mysql_insert_id()==0) $avis='Votre message n’a pas pu être envoyé. Cliquez <a href="index.php" title="Contact">ici</a> pour revenir à l’accueil.';
else{
$cle_primaire=mysql_insert_id();
echo $cle_primaire;
}
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="imagetoolbar" content="no"
<title>Contact</title>
<link href="css/styles.css" rel="stylesheet" type="text/css">
<link href="css/corps.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="page">
<div id="corps">
<h1>CONTACT</h1>
<?php
if (!isset($_POST['courriel']) || empty($courriel) || !isset($_POST['courriel_confirmation']) || empty($courriel_confirmation) || $courriel_confirmation!=$courriel || !isset($_POST['message']) || empty($message) || !isset($_POST['saisie']) || empty($saisie) || $saisie!=$_SESSION['confirmation_visuelle']){
// Afficher le formulaire
?>
<p>Pour écrire au webmestre, veuillez remplir le formulaire ci-dessous. Les champs accompagnés d’un * sont obligatoires.</p>
<form action="contact.php" method="post" name="contact" id="contact">
Votre adresse électronique* :<br>
<input name="courriel" type="text" id="courriel" size="70" value="<?php echo $courriel ?>"><br>
Confirmez votre adresse électronique* :<br>
<input name="courriel_confirmation" type="text" id="courriel_confirmation" size="70"><br>
Objet de votre message :<br>
<input name="objet" type="text" id="objet" size="70" value="<?php echo $objet ?>"><br>
Votre message* :<br>
<textarea name="message" cols="60" rows="6" id="message"><?php echo $message ?></textarea><br>
Veuillez saisir les caractères apparaissant ci-dessous*.<br>
<img src="confirmation-visuelle.php" alt="Confimation visuelle" title="Confirmation visuelle"><br>
<input name="saisie" type="text" id="saisie"><br>
<input name="cle_primaire" type="hidden" id="cle_primaire" value="<?php if (mysql_num_rows($resultat_ip_selection)!=0) echo $donnees_ip_selection['id']; else echo 1; ?>">
<input name="annul" type="reset" id="annul" value="Annuler" onClick="window.location.href='index.php'">
<input name="envoi" type="submit" id="envoi" value="Envoyer">
</form>
<div id="revenir"><a href="#"><img src="images/haut_page.gif" alt="Revenir en haut de la page" title="Revenir en haut de la page"></a></div>
<?php
}
else{
?>
<p><?php echo $avis ?></p>
<?php
}
?>
</div>
</div>
</body>
</html>
Or, quand j'essaie la page et que je remplis en bonne et due forme le formulaire, lorsque je le valide, je tombe toujours sur le message "Votre message n'a pas pu être envoyé".