我正在努力确保我的所有用户都不会在某些时间登录,所以我在mysql中注册了启动时间和出发时间,当他们登录时我首先检查登录和密码是否与在数据库
如果相同,则检查时间是否正常,否则显示错误。但是对于所有情况,它都不会显示错误,但每次都会记录用户,即使他因为错误的时间而未获得授权。
我写了以下代码:
登录:
$sql='SELECT * FROM `gestionnaire` WHERE `login`="'.mysql_real_escape_string($_POST['pseudo']).'"';
$req=mysql_query($sql) or die;
$data=mysql_fetch_assoc($req);
// si on obtient une réponse, alors l'utilisateur est un membre
if ($data['login']==$_POST['pseudo'] AND md5($_POST['pass'])==$data['pass_md5']) {
if(date("H:i")<$data['depart'] OR date("H:i")>$data['depart'])
{
$erreur = '<font color=red>Vous n\'êtes pas autorisé à vous connecter, revenez à '.$data['depart'].'.</font>';
}
else{
}
session_start();
$sql="INSERT INTO `session` SET
`temps` = now(),
`login`='".$data['login']."',
`mouvement`='1'";
mysql_query($sql) or die;
$_SESSION['id'] = $data['id'] ;
$users['id'] = $_SESSION['id'] ;
$_SESSION['login'] = $data['login'];
header('Location: GESTION/index.php');
exit();
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ( md5($_POST['pass'])!=$data['pass_md5']) {
$erreur = '<font color=red>Compte non reconnu.</font>';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = '<font color=red>Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.</font>';
}
}
else {
$erreur = '<font color=red>Au moins un des champs est vide.</font>';
}
}
}
答案 0 :(得分:3)
您的问题是if(date("H:i")<$data['depart'] OR date("H:i")>$data['depart'])
,因为php无法进行此类比较。
您需要将字符串时间转换为数字表示形式,即unix时间戳。
所以如果$data['depart']
=== '17:30'(下午5:30)
你需要做这样的事情:
$today_depart = strtotime(date('Y-m-d ').$data['depart'].':00');
$time = time();
现在你可以做if($time < $today_depart
...
答案 1 :(得分:2)
Je ne comprend pas francais,但您的if
声明归结为:
if {
} else {
exit();
} else if {
} else {
}
另外,就像安东尼所说,PHP在比较日期时非常糟糕。由于开始和结束时间已经在数据库中,我建议在查询中使用WHERE NOW() BETWEEN a AND b
或类似的构造。