自我发布带有验证的Php代码

时间:2016-03-31 22:59:32

标签: php

我目前正在使用一个简单的PHP代码进行验证,这是我的代码:

<form action="" method="post">
    <input type="text" name="name" id="name" placeholder="Name">
    <br>Number of Books:<select id="books" name="books">
    <option> 1 </option>
    <option> 2 </option>
    <option> 3 </option>
    <option> 4 </option>
    <option> 5 </option>
    <option> 6 </option>
    <option> 7 </option>
    <option> 8 </option>
    <option> 9 </option>
    <option> 10 </option>
</select>
</br>dutedate <input type="date" name="duedate" id="duedate" placeholder="duedate">
</br>borrow <input type="date" name="datebor" id="datebor" placeholder="dateborrowed">
</br>return <input type="date" name="ret" id="ret" placeholder="date returned">
<input type="submit" class="button" name="btnsubmit" value="Submit">
</form>
<?php
if (isset($_POST['btnsubmit']))
{
    $name = $_POST['name'];
    $duedate = date_create(($_POST['duedate']));
    $datebor = date_create(($_POST['datebor']));
    $ret = date_create(($_POST['ret']));
    $books = $_POST['books'];
    $NOWdate = new Datetime('now');
    if ($duedate  < $datebor)
    {
        echo "<script>alert('Wrong Input Error1')</script>";
        exit;
    }
    elseif ($datebor  > $ret)
    {
        echo "<script>alert('Wrong Input Error2')</script>";
        exit;
    }
    elseif ($datebor > $NOWdate )
    {
        echo "<script>alert('Wrong  Error3')</script>";
        exit;
    }
    elseif ($ret < $duedate)
    {
        $penalty = 0 ;
    }
    else
    {
        $penaltydays = date_diff($duedate,$ret) ;
        $diff_date = $penaltydays->format('%a');
        $penalty = $diff_date * $books * 10;
    }
}
?>
<p>Penalty: <?php echo $penalty ?></p>

当我尝试运行它时,出现错误Undefined variable: penalty

我很确定我的验证码是正确的

我怎样才能将惩罚变量传递给页面本身。

我认为它可以解决错误。

1 个答案:

答案 0 :(得分:0)

问题是$penalty仅在您提交表单后设置。你应该能够通过简单地移动你的elseif / else块中的惩罚段来解决这个问题,其中实际应该显示惩罚。

...
elseif ($ret < $duedate)
{
    echo "<p>Penalty: 0</p>";
else
{
    $penaltydays = date_diff($duedate,$ret) ;
    $diff_date = $penaltydays->format('%a');
    $penalty = $diff_date * $books * 10;
    echo "<p>Penalty: $penalty</p>";
}

这样只有在计算完毕后才会显示。

旁注,我不认为这会按照你期望的方式工作,因为你的选择选项没有值属性。你需要像这样添加它们:

<option value="1"> 1 </option>