我正在迈出我的第一步,我得到了这个项目,尽管我理解正在做什么,但由于某些原因它不起作用。
$app->post('/age/', function($lang) use($app) {
$action = $app->request()->post('action');
$remember = $app->request->post('remember') === 'on';
if ($action === 'Yes') {
setcookie('AgeCheck', 'true', time()+60*60*24*30, '/'); //Expire in 1 month
$_SESSION['age'] = 'true';
$app->redirect(urldecode($app->request()->get('return')) ?: "/$lang");
}
else if ($action === 'Enter') {
$limit = (60 * 60 * 24 * 365) * 18;
$dob = $app->request->post('dob');
if ($lang === 'us') {
$dob = \DateTime::createFormFormat('mdy', $dob);
$limit = (60 * 60 * 24 * 365) * 21;
}
else
{
$dob = \DateTime::createFromFormat('dmy', $dob);
}
if ((time() - $dob->getTimestamp()) >= $limit)
{
setcookie('AgeCheck', 1, (60*60*24*365)/12); //Expire in 1 month
$_SESSION['age'] = 1;
$app->redirect(urldecode($app->request()->get('return')) ?: "/$lang");
}
}
$app->redirect("/$lang/underage");
理论上,如果他通过了年龄限制,就应该将用户重定向到正确的页面,但它总是将他重定向到未成年人页面。
问题是,绝对是在这里:if ((time() - $dob->getTimestamp()) >= $limit)
我做错了什么?
答案 0 :(得分:2)
始终检查代码的每一行。 您的关键条件是:
if ((time() - $dob->getTimestamp()) >= $limit)
{
setcookie('DrambuieAgeCheck', 1, (60*60*24*365)/12); //Expire in 1 month
$_SESSION['age'] = 1;
$app->redirect(urldecode($app->request()->get('return')) ?: "/$lang");
}
所以在此之前,只需要echo / var_dump $ dob-> getTimestamp()和$ limit。一切都会很清楚。 如果$ dob出现问题,请检查$ _POST [' dob']返回的内容。
示例:
var_dump($dob->getTimestamp());
var_dump($app->request->post('dob'));
var_dump($dob->getTimestamp());
var_dump(time());
echo 'condition result:';
var_dump(((time() - $dob->getTimestamp()));
if ((time() - $dob->getTimestamp()) >= $limit)
你会看到条件中最重要的变量,并自我调节
答案 1 :(得分:0)
想出了这个问题。一切都是正确的,但它甚至没有进入if,因为$ action没有进入,但提交。我仍然保持@Daimos的答案是正确的。
这里更有趣的部分是((time() - $ dob-> getTimestamp())> = $ limit)实际上是真的(在此上下文中)。也许$ action不是Enter? - 安德鲁
这是解决问题的关键,在我尝试了所有内容并检查完全正确之后。