【问题标题】:PHP if, else statement. Form and date of birth validationPHP if, else 语句。表格和出生日期验证
【发布时间】:2013-11-09 22:03:45
【问题描述】:

我正在编写代码练习 PHP if 和 else 语句表单验证

基本思想是这样的: 输入姓名、DOB、email 并点击提交按钮后,根据他们输入的 DOB 按钮将他们引导至:

-一个页面告诉他们他们太年轻了,不能喝酒(notwelcome.php)

-告诉他们可以点饮料的页面(welcome.php)

(notwelcome.php & welcome.php) 2 个页面是从名为 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>

【问题讨论】:

  • 12/31/1992 是 12 除以 31 除以 1992...建议您阅读一下 PHP 中的日期
  • 您想根据条件包含(异或)PHP 文档吗?如果是这样,尝试在 if 主体中替换包含,但更好的是只执行这些文件中的功能,而不是基于对 if 的评估来包含它们。
  • 而且isset ($_POST['dob'] )&gt; 12/31/1992 也不会(严格来说)工作。 isset() 返回一个布尔值,因此您的比较没有意义。另外我目前想知道你在哪里定义了你的if/else 块......在action.php
  • 如果 10 个人都在同一天/月/年出生怎么办? (我对这个数字持保守态度)如果这只是一个练习,那没关系,但是如果你要在现实世界中使用它,那么我建议你检查重复的电子邮件地址。跨度>

标签: php html validation if-statement


【解决方案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");}
}
?>

【讨论】:

  • 嗨迈克尔,感谢您的回复。我仍然无法使其工作,我认为问题可能出在我这里,而不是您的代码不正确。为了回答你的问题,我创建了 action.php 并“包含”了这些文件,因为我不知道该怎么做,因为表单标签只能有一个“动作”。如果您知道更好的方法,我将不胜感激任何建议。另一个问题是,如果我决定保留 action.php 文件,是否也定义了“if-else”语句?另外,是的,用户输入了正确的日期格式
  • 尝试将此 if 语句放在 html 的顶部,这样它就是一个文件。然后确保它是一个 php 文件,并从表单中删除 action="action.php"。然后在每种可能性中放置一个不同的回显,以查看用于检查日期的 if 语句是否有效(例如 echo 'welcome';)。
【解决方案2】:

你可以试试这个。在 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>

【讨论】:

    【解决方案3】:

    可能有一种更优雅的方法,但这对我有用:

    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 岁。

    【讨论】:

    • PHP >= 5.3 有 DateTime::diff 这可能是一种更简洁的方式。
    猜你喜欢
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多