我知道标题似乎真的令人困惑,但它是我能够接近我真正需要做的最接近......
让我试着解释一下,我的column
表中有一个mySQL
,其中小时(字符串)字段,注册日期和访问代码。
要重定向到所需的网页,他需要填写{{1>} 访问代码,当他填写并提交input
时,整个form
是:
select
如果存在访问代码,他选择的小时和日期,则会返回此信息。
我需要使用新的$sql = 'SELECT
agendamentos.data_agendada,
agendamentos.codigo_acesso,
horarios.horario
FROM
agendamentos
INNER JOIN horarios ON agendamentos.horario_id = horarios.id
WHERE
agendamentos.aluno_codigopessoa = '.$usrs->codigoPessoa.'
AND agendamentos.codigo_acesso = '.$_POST['acesso_chat'];
$statement = $db->prepare($sql);
$statement->execute();
$result = $statement->fetchAll();
对象与结果的小时进行比较,但是,如果结果的小时,我不能让他通过在 10分钟之前和之后10分钟他选择的那个期间。
我尝试了几个代码,我真的可以在DateTime()
的对象上添加分钟,这就是我所做的,但是,我怎么做一个DateTime
语句来查看是否小时他选择的是在当前时间前10分钟和当前时间后10分钟的期间?
答案 0 :(得分:2)
您可以通过PHP
或MySQL
:
PHP
版本:
//given your result is something like this:
$result = array(
'codigo_acesso' => 'ABCDE',
'data_agendada' => '2016-10-26',
'horario' => '14:00:00'
);
$timestamp = strtotime($result['data_agendada'] . ' ' . $result['horario']);
$now = mktime();
$diff = $now - $timestamp;
$tolerance = 10 * 60; //10 minutes
if (abs($diff) <= $tolerance) {
//grant access
} else {
//deny access
}
和MySQL
版本:
$tolerance = 10 * 60; //10 minutes
$sql = "SELECT
agendamentos.data_agendada,
agendamentos.codigo_acesso,
horarios.horario
FROM
agendamentos
INNER JOIN horarios ON agendamentos.horario_id = horarios.id
WHERE
agendamentos.aluno_codigopessoa = :codigo_pessoa
AND agendamentos.codigo_acesso = :acesso_chat
AND ABS(TIMESTAMPDIFF(SECOND, NOW(), STR_TO_DATE(CONCAT(agendamentos.data_agendada, ' ', horarios.horario), '%Y-%m-%d %H:%i:%s'))) <= " . $tolerance; //
$statement = $db->prepare($sql);
$statement->execute(array(
':codigo_pessoa' => $usrs->codigoPessoa,
':acesso_chat' => $_POST['acesso_chat']
));
$result = $statement->fetchAll();
if (!empty($result)) {
//grant access
} else {
//deny access
}
首选MySQL
版本。