我正在编写代码练习PHP if和else语句和表单验证。
基本理念是这样的: 输入姓名后, DOB ,然后通过电子邮件点击提交按钮,根据他们输入的DOB ,该按钮会指示他们转到:
- 一个页面告诉他们他们太小了不能喝(notwelcome.php)
或
- 告诉他们可以订购饮料的页面(welcome.php)
2页(notwelcome.php& welcome.php)是从名为 action.php 的单独文件中提取的,如下所示:
<?php
include('welcome.php');
include('notwelcome.php');
?>
这是我一直在尝试的..但它不起作用。什么都没发生..就好像if else代码甚至不存在:(
<?php
if ($_POST['submit']) {
$dob = $_POST['dob'];
if (isset ($_POST['dob'] )> 12/31/1992) {
header("Location: notwelcome.php");
} else {
header("Location: welcome.php");}
}
?>
帮助。我是初学者,在我的代码中我遇到了一个小小的障碍。
其他信息:
HTML代码是这样的:
<div style="text-align: center;">
<h2>FORM & PHP</h2>
<h3>WHINE & DINE</h3>
<form action="action.php" method="post">
Full Name: <input type="text" name="name"><br>
Date of Birth: <input type="date" name="dob"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit" data-inline="true" value="Submit">
</form>
</div>
</div>
</form>
答案 0 :(得分:1)
试试这个。此外,您不需要include
这些文件,除非您希望它们在处理表单之前显示在页面上。我会检查以确保您的相对路径正确。您还希望这样做,以便用户以正确的格式输入DOB。
<?php
if (isset($_POST['dob'])) {
$dob = $_POST['dob'];
if ($dob > date("m/d/Y", mktime(0, 0, 0, date('m'), date('d'), date('Y') - 21))) {
header("Location: notwelcome.php");
} else {
header("Location: welcome.php");}
}
?>
答案 1 :(得分:0)
你可以试试这个。在PHP代码中,您可以添加额外的if条件来检查范围的有效性。
<?php
if (isset($_POST['date']) && isset($_POST['month']) && isset($_POST['year']) )
{
$dob = date_format (date_create ($_POST['year']."-".$_POST['month']."-".$_POST['date']), "Y-m-d");
if ($dob > date("Y-m-d", mktime(0, 0, 0, date('m'), date('d'), date('Y') - 21)))
{
header("Location: notwelcome.php");
}
else
{
header("Location: welcome.php");
}
}
?>
<html>
<head></head>
<body>
<div style="text-align: center;">
<h2>FORM & PHP</h2>
<h3>WHINE & DINE</h3>
<form action="r.php" method="post">
Full Name: <input type="text" name="name"><br>
Date of Birth: <select name="month">
<option value="01">January</option><option value="02">February</option><option value="03">March</option>
<option value="04">April</option><option value="05">May</option><option value="06">June</option>
<option value="07">July</option><option value="08">August</option><option value="09">September</option>
<option value="10">October</option><option value="11">November</option><option value="12">December</option></select> <select name="date" >
<option value="1">01</option><option value="2">02</option><option value="3">03</option>
<option value="4">04</option><option value="5">05</option><option value="6">06</option>
<option value="7">07</option><option value="8">08</option><option value="9">09</option>
<option value="10">10</option><option value="11">11</option><option value="12">12</option>
<option value="13">13</option><option value="14">14</option><option value="15">15</option>
<option value="16">16</option><option value="17">17</option><option value="18">18</option>
<option value="19">19</option><option value="20">20</option><option value="21">21</option>
<option value="22">22</option><option value="23">23</option><option value="24">24</option>
<option value="25">25</option><option value="26">26</option><option value="27">27</option>
<option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option>
</select> <input name="year" type="text" id="year" size="4" maxlength="4"> <span>(YYYY)</span>
<br>
E-mail: <input type="text" name="email"><br>
<input type="submit" data-inline="true" value="Submit">
</form>
</div>
</body>
</html>
答案 2 :(得分:0)
这可能是一种更优雅的方式,但这对我有用:
if(isset($_POST['dob'])) { $dob = $_POST['dob'];
list($date,$time) = explode(" ", $dob);
list($year,$month,$day) = explode("-",$date);
$years = date("Y") - $year;
$months = date("m") - $month;
$days = date("d") - $day;
if (($years > 21) || ($years == 21 && $months > 0) || ($years == 21 && $months == 0 && $days >= 0)) {
header("Location: welcome.php");
} else {
header("Location: notwelcome.php");
}
}
从当前年度减去出生年份,从当前月份减去出生月份,从当天减去出生日期,这基本上可以进行三次测试。首先,如果当前年度超过该人出生年份的21年,那么他们是合法的。第二,如果是在出生年份之后的21年但是在出生月之后,它们是合法的。最后,如果它是在这个人的出生年份之后的21年,并且它恰好是他们的出生月份,并且该月的日期大于或等于该人的出生日,那么它们是合法的。如果这些都不属实,那么他们就不满21岁了。