我正在开发一个网站,其中涉及一些有关酒精的信息,并且客户已要求进行年龄检查以访问此页面。我知道他们是多么无用,但我认为这有一些规定。
经过一番研究后,我发现PHP是进行年龄检查的更好方法,因为禁用javascript会使基于JS的检查变得无用。但是我的PHP知识并不是很好。我在这里找到了一个答案,它指出了我正确的方向:Age Verification
现在问题是,它无法正常工作。
该过程的工作原理如下:
用户访问brands.php页面。 PHP检查年龄验证会话数据,如果检查尚未完成,则重定向到checkage.php:
<?php
include_once("includes/header.php");
session_start();
if(!isset( $_SESSION['age_verification'] ) or $_SESSION['age_verification'] != true ) die( header("Location: checkage.php?url=http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]") );
//session_destroy(); // uncomment to reset for testing and debugging.
echo 'hello over 18 person';
?>
checkage.php包含检查年龄的表格(不可预测)。我将作者在该主题上的两个答案结合起来,使我认为应该起作用。我放置了一个if语句来获取品牌页面的网址,并在年龄合适时重定向到那里,否则重定向到主页。该页面的代码如下:
<?php
$min_age = 18; // Set the min age in years
if( isset( $_POST['submit'] ) )
{
$_SESSION['age_verification'] = true;
if( mktime(0, 0, 0, $_POST['month'], $_POST['day'], $_POST['year'] ) < mktime(0, 0, 0, date('m'), date('j'), ( date('Y') - $min_age ) ) )
{
if( isset( $_GET['url'] ) )
{
header('Location: ' . $_GET['url'] );
}
}
else
{
header('Location: index.php');
}
}
else
{
$_SESSION['age_verification'] = false;
}
// The below line will check if someone has already said no so you can show them a page which tells them to they are too young.
//if( isset( $_SESSION['age_verification'] ) and $_SESSION['age_verification'] != true ) die( header('Location: tooyoung.php') );
?>
<form method="POST" >
<fieldset>
<legend>Enter your age</legend>
<label for="day" >Day:</label>
<select name="day" >
<?php
for( $x=1; $x <= 31; $x++ )
{
if( $x == date("j" ) ) echo "<option selected>$x</option>"; else echo " <option>$x</option>";
}
?>
</select>
<label for="day" >Month:</label>
<select name="month" >
<?php
for( $x=1; $x<=12; $x++ )
{
if( $x == date("m" ) ) echo "<option selected>$x</option>"; else echo "<option>$x</option>";
}
?>
</select>
<label for="day" >Year:</label>
<select name="year" >
<?php
for( $x=date("Y"); $x>=(date("Y")-100); $x-- )
{
echo "<option>$x</option>";
}
?>
</select>
<input type="submit" name="submit" />
</fieldset>
</form>
此过程正是我想要发生的事情:拦截尝试访问该页面的用户&gt;重定向到年龄检查&gt;根据输入转到页面或回到家。我只是不知道它有什么问题。
很抱歉这个问题很长,试图尽可能清楚。任何帮助真的很感激!虽然我希望我做的事情非常明显和愚蠢......
答案 0 :(得分:0)
你错过了session_start()
<?php
session_start();
//you missed above line!
$min_age = 18; // Set the min age in years
if( isset( $_POST['submit'] ) )
{
$_SESSION['age_verification'] = true;
if( mktime(0, 0, 0, $_POST['month'], $_POST['day'], $_POST['year'] ) < mktime(0, 0, 0, date('m'), date('j'), ( date('Y') - $min_age ) ) )
{
if( isset( $_GET['url'] ) )
{
header('Location: ' . $_GET['url'] );
}
}
else
{
header('Location: index.php');
}
}