Mes membres étant victimes de spammers, j'essaye d'empécher les visiteurs de mon site d'utiliser la fonction "Contacter le membre" plus d'une fois toutes les dix minutes en utilisant leur IP et l'heure de leur dernier message envoyé.
J'arrive à enregistré ces données dans la BDD, mais je n'arrive pas à créer le code qui permet de vérifier dans la BDD si les dix minutes se sont bien écoulées pour l'IP de la personne qui souhaite utiliser la fonction "Contacter le membre".
Est-ce que l'un d'entre vous saurait m'expliquer comment faire ?
Voici la partie de code que j'ai ajouté à mon fichier contact.php pour stocker les infos de la personne qui contact un membre
$time_interval = 600;
$time_last_contacted = time();
$contact_time = $time_last_contacted + $time_interval;
$lipaddress = getRemoteIP();
mysql_query("INSERT INTO phpclass_stop_spam (id, lContactEmail, lipaddress, time_interval, contact_time, time_last_contacted) VALUES ('', '$lContactEmail', '$lipaddress', '$time_interval', '$contact_time', '$time_last_contacted')")or die(mysql_error());
Voici le fichier contact.php avec le code précédent déjà intégré
CODE-BOX
<?
session_start();
include_once("admin/inc.php");
$tplContact=new TplLoad;
$tplContact->assign("phpself",$_SERVER['PHP_SELF']);
if ($set_contact_login_need)
check_valid_user("");
// Refereer information
$legal = 0;
$lServerRef = explode("/",getenv("HTTP_REFERER"));
$lUserid=getParam("user_id","");
$tplContact->assign("ad_owner",getParam("ad_owner",""));
$tplContact->assign("id",getParam("id",""));
$tplContact->assign("user_id",getParam("user_id",""));
if ($set_img_validation==1)
$tplContact->assign("image_validation",1);
if (getParam("submit",""))
{
$errorStr="";
$tplContact->assign("contact_name",getParam("contact_name",""));
$tplContact->assign("contact_email",getParam("contact_email",""));
$tplContact->assign("contact_message",strip_tags(getParam("contact_message","")));
if (empty($lUserid))
$errorStr.="<li>".LA_ERROR_MSG5."</li>";
if (!validEmail(getParam("contact_email","")))
$errorStr.="<li>".LA_ERROR_MSG21."</li>";
if (getParam("contact_email","")=="")
$errorStr.="<li>".LA_ERROR_MSG8."</li>";
if (getParam("contact_name","")=="")
$errorStr.="<li>".LA_ERROR_MSG5."</li>";
if (!empty($set_ref) && !eregi("$set_ref",".$lServerRef[2]."))
$errorStr.="<li>".LA_REF_FAILED."</li>";
if (getParam("contact_message","")=="")
$errorStr.="<li>".LA_ERROR_MSG88."</li>";
if ($_SESSION["validate_sign_session"] <> $_REQUEST["validate_sign"] && $set_img_validation)
$errorStr.="<li>".LA_IMG_VER_FAILED."</li>";
if (empty($errorStr))
{
$sql = "select ad_owner,user_name,user_email from $ads_tbl,$usr_tbl where ad_owner=user_id AND user_id = $lUserid limit 1";
$sql_resultads = q($sql);
$row=mysql_fetch_array($sql_resultads);
$lRecieveEmail = $row["user_email"];
$lRecieveName = $row["user_name"];
$lContactMessage=strip_tags(getParam("contact_message",""));
$lContactName=strip_tags(getParam("contact_name",""));
$lContactEmail=strip_tags(getParam("contact_email",""));
$sql="select ad_title,ad_id from $ads_tbl where ad_id='".getParam("id","")."'";
$res_title=q($sql);
$row_title=mysql_fetch_array($res_title);
$lAdTitle=$row_title["ad_title"];
$lAdID=$row_title["ad_id"];
$lEmailBody=formatString(LA_EMAIL_BODY,array(getParam("ad_owner",""), "$lContactName","$lContactMessage","$lContactEmail",getRemoteIp(), "$lAdTitle","$lAdID","$name_of_site","$url"));
$lEmailTitle=formatString(LA_EMAIL,array(getParam("ad_owner",""), "$lContactName","$lContactMessage","$lContactEmail",getRemoteIp(), "$lAdTitle","$lAdID","$name_of_site","$url"));
// mod to stop spam
$time_interval = 600;
$time_last_contacted = time();
$contact_time = $time_last_contacted + $time_interval;
$lipaddress = getRemoteIP();
mysql_query("INSERT INTO phpclass_stop_spam (id, lContactEmail, lipaddress, time_interval, contact_time, time_last_contacted) VALUES ('', '$lContactEmail', '$lipaddress', '$time_interval', '$contact_time', '$time_last_contacted')")or die(mysql_error());
//--- end stop spam ---
$tplContact->assign("message_sent",formatString(LA_SENT_MESSAGE,array("$lRecieveName")));
sendEmail($lRecieveEmail,$lContactEmail,$lEmailTitle,$lEmailBody);
$tplContact->assign("contact_ok",1);
$sql_2 = "update $usr_tbl set user_contacted = user_contacted + 1 where user_id = $lUserid";
$sql_resultupd = q ($sql_2);
addToHistory(2,$lUserid,"","");
}
else
{
$tplContact->assign("contact_fail",$errorStr);
}
}
else
{
$sql_eier = "select user_name from $usr_tbl where user_id = $lUserid";
$result = q ($sql_eier);
$row_contact = mysql_fetch_array($result);
$tplContact->assign("ad_owner",$row_contact["user_name"]);
$tplContact->assign("contact_name",$_SESSION["user_name"]);
$tplContact->assign("contact_email", $_SESSION["user_email"]);
}
$tplContact->display("contact.tpl");
?>
session_start();
include_once("admin/inc.php");
$tplContact=new TplLoad;
$tplContact->assign("phpself",$_SERVER['PHP_SELF']);
if ($set_contact_login_need)
check_valid_user("");
// Refereer information
$legal = 0;
$lServerRef = explode("/",getenv("HTTP_REFERER"));
$lUserid=getParam("user_id","");
$tplContact->assign("ad_owner",getParam("ad_owner",""));
$tplContact->assign("id",getParam("id",""));
$tplContact->assign("user_id",getParam("user_id",""));
if ($set_img_validation==1)
$tplContact->assign("image_validation",1);
if (getParam("submit",""))
{
$errorStr="";
$tplContact->assign("contact_name",getParam("contact_name",""));
$tplContact->assign("contact_email",getParam("contact_email",""));
$tplContact->assign("contact_message",strip_tags(getParam("contact_message","")));
if (empty($lUserid))
$errorStr.="<li>".LA_ERROR_MSG5."</li>";
if (!validEmail(getParam("contact_email","")))
$errorStr.="<li>".LA_ERROR_MSG21."</li>";
if (getParam("contact_email","")=="")
$errorStr.="<li>".LA_ERROR_MSG8."</li>";
if (getParam("contact_name","")=="")
$errorStr.="<li>".LA_ERROR_MSG5."</li>";
if (!empty($set_ref) && !eregi("$set_ref",".$lServerRef[2]."))
$errorStr.="<li>".LA_REF_FAILED."</li>";
if (getParam("contact_message","")=="")
$errorStr.="<li>".LA_ERROR_MSG88."</li>";
if ($_SESSION["validate_sign_session"] <> $_REQUEST["validate_sign"] && $set_img_validation)
$errorStr.="<li>".LA_IMG_VER_FAILED."</li>";
if (empty($errorStr))
{
$sql = "select ad_owner,user_name,user_email from $ads_tbl,$usr_tbl where ad_owner=user_id AND user_id = $lUserid limit 1";
$sql_resultads = q($sql);
$row=mysql_fetch_array($sql_resultads);
$lRecieveEmail = $row["user_email"];
$lRecieveName = $row["user_name"];
$lContactMessage=strip_tags(getParam("contact_message",""));
$lContactName=strip_tags(getParam("contact_name",""));
$lContactEmail=strip_tags(getParam("contact_email",""));
$sql="select ad_title,ad_id from $ads_tbl where ad_id='".getParam("id","")."'";
$res_title=q($sql);
$row_title=mysql_fetch_array($res_title);
$lAdTitle=$row_title["ad_title"];
$lAdID=$row_title["ad_id"];
$lEmailBody=formatString(LA_EMAIL_BODY,array(getParam("ad_owner",""), "$lContactName","$lContactMessage","$lContactEmail",getRemoteIp(), "$lAdTitle","$lAdID","$name_of_site","$url"));
$lEmailTitle=formatString(LA_EMAIL,array(getParam("ad_owner",""), "$lContactName","$lContactMessage","$lContactEmail",getRemoteIp(), "$lAdTitle","$lAdID","$name_of_site","$url"));
// mod to stop spam
$time_interval = 600;
$time_last_contacted = time();
$contact_time = $time_last_contacted + $time_interval;
$lipaddress = getRemoteIP();
mysql_query("INSERT INTO phpclass_stop_spam (id, lContactEmail, lipaddress, time_interval, contact_time, time_last_contacted) VALUES ('', '$lContactEmail', '$lipaddress', '$time_interval', '$contact_time', '$time_last_contacted')")or die(mysql_error());
//--- end stop spam ---
$tplContact->assign("message_sent",formatString(LA_SENT_MESSAGE,array("$lRecieveName")));
sendEmail($lRecieveEmail,$lContactEmail,$lEmailTitle,$lEmailBody);
$tplContact->assign("contact_ok",1);
$sql_2 = "update $usr_tbl set user_contacted = user_contacted + 1 where user_id = $lUserid";
$sql_resultupd = q ($sql_2);
addToHistory(2,$lUserid,"","");
}
else
{
$tplContact->assign("contact_fail",$errorStr);
}
}
else
{
$sql_eier = "select user_name from $usr_tbl where user_id = $lUserid";
$result = q ($sql_eier);
$row_contact = mysql_fetch_array($result);
$tplContact->assign("ad_owner",$row_contact["user_name"]);
$tplContact->assign("contact_name",$_SESSION["user_name"]);
$tplContact->assign("contact_email", $_SESSION["user_email"]);
}
$tplContact->display("contact.tpl");
?>
Et voici les fichiers du script dont j'essaye de m'inspirer et qui permet de lancer un script seulement si le délai minimum est passé.
CODE-BOX
<?php
include_once("functions.php");
include_once($installed_config_file);
db_connect();
$time_and_window = time() + TIME_WINDOW;
$query="select * from scheduler
WHERE fire_time <= $time_and_window";
$result = mysql_query($query);
$scripts_to_run = array();
if (mysql_num_rows($result)) // check has got some
{
$i = 0;
while ($i < mysql_num_rows($result))
{
$id=mysql_result($result,$i, 'id');
$scriptpath=mysql_result($result,$i, 'scriptpath');
$time_interval=mysql_result($result,$i, 'time_interval');
$fire_time=mysql_result($result,$i, 'fire_time');
$time_last_fired=mysql_result($result,$i, 'time_last_fired');
$fire_time_new = $fire_time + $time_interval;
$scripts_to_run[$i]="$scriptpath";
$query="UPDATE scheduler
SET
fire_time='$fire_time_new',
time_last_fired='$fire_time'
WHERE id='$id'";
mysql_query($query);
$i++;
}
}
db_close();
// run the scheduled scripts
for ($i = 0; $i < count($scripts_to_run); $i++) include($scripts_to_run[$i]);
?>
include_once("functions.php");
include_once($installed_config_file);
db_connect();
$time_and_window = time() + TIME_WINDOW;
$query="select * from scheduler
WHERE fire_time <= $time_and_window";
$result = mysql_query($query);
$scripts_to_run = array();
if (mysql_num_rows($result)) // check has got some
{
$i = 0;
while ($i < mysql_num_rows($result))
{
$id=mysql_result($result,$i, 'id');
$scriptpath=mysql_result($result,$i, 'scriptpath');
$time_interval=mysql_result($result,$i, 'time_interval');
$fire_time=mysql_result($result,$i, 'fire_time');
$time_last_fired=mysql_result($result,$i, 'time_last_fired');
$fire_time_new = $fire_time + $time_interval;
$scripts_to_run[$i]="$scriptpath";
$query="UPDATE scheduler
SET
fire_time='$fire_time_new',
time_last_fired='$fire_time'
WHERE id='$id'";
mysql_query($query);
$i++;
}
}
db_close();
// run the scheduled scripts
for ($i = 0; $i < count($scripts_to_run); $i++) include($scripts_to_run[$i]);
?>
son fichier function.php
CODE-BOX
<?php
$installed_config_file = "config.inc.php";
function time_unit($time_interval)
{
global $app_name;
$unit = array(0, 'type');
//check if its hours
if ($time_interval <= (23 * 3600))
{
$unit[0]=$time_interval/3600;
$unit[1]="<font color=\"#ff0000\">hours</font>";
}
else
{
// check if its days
if ($time_interval <= (6 * 86400))
{
$unit[0]=$time_interval/86400;
$unit[1]="<font color=\"#FF8000\">days</font>";
}
else
{
$unit[0]=$time_interval/604800;
$unit[1]="<font color=\"#C00000\">weeks</font>";
}
}
$thedomain = $_SERVER['HTTP_HOST'];
return $unit;
}
function db_connect()
{
global $db_link;
@$db_link = mysql_connect(DBHOST, DBUSER, DBPASS);
if ($db_link) _AT_mysql_select_db(DBNAME);
return $db_link;
}
function db_close()
{
global $db_link;
if ($db_link) $result = mysql_close($db_link);
return $result;
}
function js_msg($msg)
{
echo "<script language=\"JavaScript\"><!--\n alert(\"$msg\");\n// --></script>";
}
?>
$installed_config_file = "config.inc.php";
function time_unit($time_interval)
{
global $app_name;
$unit = array(0, 'type');
//check if its hours
if ($time_interval <= (23 * 3600))
{
$unit[0]=$time_interval/3600;
$unit[1]="<font color=\"#ff0000\">hours</font>";
}
else
{
// check if its days
if ($time_interval <= (6 * 86400))
{
$unit[0]=$time_interval/86400;
$unit[1]="<font color=\"#FF8000\">days</font>";
}
else
{
$unit[0]=$time_interval/604800;
$unit[1]="<font color=\"#C00000\">weeks</font>";
}
}
$thedomain = $_SERVER['HTTP_HOST'];
return $unit;
}
function db_connect()
{
global $db_link;
@$db_link = mysql_connect(DBHOST, DBUSER, DBPASS);
if ($db_link) _AT_mysql_select_db(DBNAME);
return $db_link;
}
function db_close()
{
global $db_link;
if ($db_link) $result = mysql_close($db_link);
return $result;
}
function js_msg($msg)
{
echo "<script language=\"JavaScript\"><!--\n alert(\"$msg\");\n// --></script>";
}
?>
Avant que le visiteur puisse avoir accès à la fonction "Contacter le membre" j'aimerai pouvoir vérifier dans la BDD si il y a droit, et si ce n'est pas le cas lui afficher un message d'information lui disant qu'il doit patienter dix minutes avant de pouvoir contacter de nouveau quelqu'un.
Merci d'avance à ceux qui voudront bien m'éclairer.