如果已提交则验证输入(即“未禁用”)

时间:2011-06-24 04:30:42

标签: php validation

我有一个提交的联系表单,我在发送电子邮件之前已经设置了PHP验证,但是,根据点击的链接,我有2个动态禁用或启用的字段到达联系表格。

我需要知道如何确定它们是否被禁用,然后仅在它们未被禁用时验证它们。

这是我表格的一部分:

<label for="name">Name</label><br />
<input type="text" name="name" id="name" />

<label for="email">Email</label><br />
<input type="text" name="email" id="email" />

<label for="number">Phone Number</label><br />
<input type="text" name="number" id="number" />

<div id="date-time">
    <label for="date">Date</label><br />
    <input type="text" name="date" id="date" <?php
        if (!isset($_GET["appt"])==true) echo('disabled="disabled"'); ?> />

    <label for="time">Time</label><br />
    <input type="text" name="time" id="time" <?php
        if (!isset($_GET["appt"])==true) echo('disabled="disabled"'); ?> />
</div>

以下是我的mail.php文件的一部分(忽略cookie个功能):

    $name   = trim($_POST["name"]);
    $email  = trim($_POST["email"]);
    $phone  = trim($_POST["phone"]);
    $date   = trim($_POST["date"]);
    $time   = trim($_POST["time"]);

//Check to make sure that the name field is not empty
    if($name == NULL) {
        $hasError = true;
        $emailSent = false;
        cookie("hasError", "true");
        cookie("nameError", "true");
    } else {
        $name = $name;
    }

//Check to make sure sure that a valid email address is submitted
    if($email == NULL) {
        $hasError = true;
        $emailSent = false;
        cookie("hasError", "true");
        cookie("emailError", "true");
    } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", $email)) {
        $hasError = true;
        $emailSent = false;
        cookie("hasError", "true");
        cookie("emailError", "true");
    } else {
        $email = $email;
    }

//Check to make sure that the phone field is not empty
    if($phone == '' || $phone < 10) {
        $hasError = true;
        $emailSent = false;
        cookie("hasError", "true");
        cookie("phoneError", "true");
    } else {
        $phone = $phone;
    }

//Check to make sure that the date field is not empty
    if($date == '') {
        $hasError = true;
        $emailSent = false;
        cookie("hasError", "true");
        cookie("dateError", "true");
    } else {
        $date = $date;
    }

//Check to make sure that the time field is not empty
    if($time == '') {
        $hasError = true;
        $emailSent = false;
        cookie("hasError", "true");
        cookie("timeError", "true");
    } else {
        $time = $time;
    }

我还在学习PHP,所以提前感谢您提供的任何帮助。 :)

//修改

appt来自URL查询字符串。即使查询字符串不存在&amp;输入被禁用,我在点击页面上的链接时使用jQuery在输入中添加或删除disabled

4 个答案:

答案 0 :(得分:1)

如果在表单中未提交禁用的字段,则可以使用isset($_POST['date'])检查是否在提交期间设置了值cos。

修改

您可能会遇到问题,因为在客户端篡改表单非常容易,并在此处传递datetime。因此,您可以在此处执行的最佳操作是使用隐藏字段,您可以使用datetime设置隐藏字段,同时禁用“动态”字段。因此,在服务器端,只需读取隐藏字段并相应地读取所需的值。

答案 1 :(得分:0)

我可能会弄错,但如果输入被禁用,那么索引根本不应该存在吗?含义if !isset($_POST[<index>])不会验证。

哦,BTW !isset($_GET["appt"])==TRUE是多余的。只需使用!isset($_GET["appt"])

即可

答案 2 :(得分:0)

在表单页面上,将$ _GET [“appt”]放在隐藏字段中。由于您使用它来确定是否应禁用这些字段,因此将其传递给PHP验证页面可以让您确定是否禁用了表单页面上的字段。

在表单页面上:     “/&gt;

在mail.php页面上:

$disabled = trim($_POST["disabled_var"]);

如果为true,则禁用元素。

另外,不,你不能只看到它们是否存在于帖子中,因为它们可能非常空(但已启用)。

答案 3 :(得分:0)

您可以为每个字段添加隐藏字段,并将它们设置为您可以提取的值。可能不是最优雅的解决方案,但它仍然有效。

<input type="hidden" name="datedisabled" id="datedisabled" value="<?php
        if (!isset($_GET["appt"])) { echo 'true'; } else { echo 'false'; } ?>" />
<input type="hidden" name="timedisabled" id="timedisabled" value="<?php
        if (!isset($_GET["appt"])) { echo 'true'; } else { echo 'false'; } ?>" />

然后,您可以查看PHP。

顺便说一下,像if ($a == true)这样的显式检查是多余的。只需if ($a)