所以我有这个奇怪的问题,我想知道我是否可以得到帮助。
我必须写一个用户输入日期的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>
提前感谢您的帮助。我真的只是不知道这个有什么问题了。
答案 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 />';
}