php字段验证方法不起作用

时间:2014-11-07 04:19:11

标签: php html

所以我有这个奇怪的问题,我想知道我是否可以得到帮助。

我必须写一个用户输入日期的PHP页面,以及他们的小时工资和工资,然后通过会话数据在新的php页面上计算。如果用户在必填字段中未输入任何内容或未输入正确的输入,则会打印错误消息。

我的问题是,即使我编辑了一个非常类似于我上次作业的项目工作正常,我手写的这个也没有正确注册输入字段,并且总是会输出第一条错误消息验证方法可以打印。我真的不知道为什么会发生这种情况,因为它与上一个工作得很好,工作得很好,我似乎无法找到问题。

如果我做错了什么,有人能告诉我吗?错误来自顶部的第二个PHP代码段,它会打印错误消息,即使我在字段中发布了一些内容,它也会返回"需要完成日期"。我已经尝试了很多不同的检查变量,如果字段是空的并且都失败了,这让我相信它根本没有收到$ _POST变量(我甚至在php中调用了页面本身)我知道checkdate方法很可能不起作用,但它没有导致问题,所以我稍后会修复它。)

<?php // Session save

session_save_path
($_SERVER['DOCUMENT_ROOT'] . "/sessiondata/");
session_start();
?>

<?php // validate_input()

// returns a string of error messages if invalid user input found or an empty string if no errors
function validate_input() {

    $errorMessages = "";

    // Confirm if user's entered date is correct
    if (!isset($_POST['month'], $_POST['day'], $_POST['year']))
        {
        $errorMessages .= "Complete date is required<br />";
        }
    elseif (!checkdate($_POST['month'], $_POST['day'], $_POST['year']))
        {
        $errorMessages .= "Incorrect date for pay period ending<br />";
        }

    return $errorMessages;
}
?>

<?php // Call validate_input()

// if this page has just called itself with user input data
//(i.e. the user pressed the submit button)
if (isset($_POST['submitButton'])) {
// validate the user input data
$error_messages = validate_input();

// if user input is valid, process the data and go to confirmation page
    if ($error_messages == "") {
        $_SESSION['hoursWorked'] = $_POST['hoursWorked']; // simplified processing
        $_SESSION['payRate'] = $_POST['payRate'];
        header('Location: getPay.php'); // go to confirmation page
        exit();
    }
    else {
        echo"<p>$error_messages</p>"; // show the error messages
    }
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Account: --------------
File: ----------------------
-->
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CS 250: Program3</title>
<meta name="description" content="------" />
<meta name="keywords" content="------" />
<meta name="author" content="----" />
<link rel="stylesheet" type="text/css" href="program3.css">
</head>

<body>

<div id="mainDiv">
<h1>Program 3</h1>

<!--First form - Pay period date fields-->
<form id="payPeriod" class="form" action="program3.php" method="post">
<fieldset>
<legend>Pay Period Ending</legend>

<!--3 input fields for dates aligned horizontally-->
<p>
<label for="month" class="label">Month</label>
<input id="month" name="month" type="text" size="5" />
<label for="day" class="label">Day</label>
<input id="day" name="day" type="text" size="5" />
<label for="year" class="label">Year</label>
<input id="year" name="year" type="text" size="5" />
* Required
</p>

</fieldset>
</form> <!--End of first form-->

<!--Second Form - Hours worked and pay rate-->
<form id="hoursRate" class="form" action="program3.php" method="post">
<fieldset>
<legend>Hours worked and pay rate</legend>

<!--Hours worked input field-->
<p>
<label for="hoursWorked" class="label">Hours worked</label>
<input id="hoursWorked" name="hoursWorked" type="text" size="20" />
* Required
</p>

<!--Pay rate input field-->
<p>
<label id="payRate" class="label">Pay rate</label>
<input id="payRate" name="payRate" type="text" size="20" />
* Required
</p>

</fieldset>
</form> <!--End of second form-->

<form id="subButton" action="program3.php" method="post">
<fieldset>
<!--Submit Button: Calculate Pay-->
<p id="button">
<input type="submit" id="submitButton" name="submitButton" value="Calculate Pay" />
</p>
</fieldset>
</form>

</div>

</body>

</html>

提前感谢您的帮助。我真的只是不知道这个有什么问题了。

3 个答案:

答案 0 :(得分:1)

我认为这是语法错误

 if (!isset($_POST['month'], $_POST['day'], $_POST['year']))

那应该写成

if (!isset($_POST['month']) && !isset($_POST['day']) && !isset($_POST['year']))

if (!(isset($_POST['month']) && isset($_POST['day']) && isset($_POST['year'])))

对我来说会更方便。

答案 1 :(得分:1)

您的日期字段输入位于实际正在发布的<form>之外,因此它们不会发布。如果您希望一次性发布所有这些值,则需要一个表单。

这是实际发布的表单

<form id="subButton" action="program3.php" method="post">
<fieldset>
<!--Submit Button: Calculate Pay-->
<p id="button">
<input type="submit" id="submitButton" name="submitButton" value="Calculate Pay" />
</p>
</fieldset>
</form>

除了提交之外,其中没有输入字段。

您应该熟悉基本的调试技巧。在这种情况下,即使脚本顶部的基本var_dump($_POST)也会显示您缺少输入字段数据。

答案 2 :(得分:0)

如果您想单独验证,请尝试在第二个语句中将elseif修改为if

function validate_input($errors = array()) {
    // Validate this set first
    if (!isset($_POST['month'], $_POST['day'], $_POST['year'])) {
            $errors[] = "Complete date is required";
        }

    // Validate this second, but not conditional on the first validating at all
    if (!checkdate($_POST['month'], $_POST['day'], $_POST['year'])) {
            $errors[] = "Incorrect date for pay period ending";
        }

    return implode("<br />",$errors).'<br />';
}