Javascript PHP使用post以编程方式导航到新表单
我对PHP相当陌生。我有一个表单,用户正在填写各种详细信息(开始日期、结束日期等),名为purchaselicense.php。提交时,表单操作会重新加载自身,以使用PHP验证数据 如果验证通过,我希望它使用post方法导航到purchaseLicense2.php,就像表单最初直接发布到purchaseLicense2.php一样 我不介意使用Javascript来实现这一点,我想它需要参与进来,因为它最终会看到一个不同于它预期的表单 这是我当前的purchaselicense.php,我遇到的问题是purchaselicense2.php和purchaselicense.php都是在表单发布后呈现的,浏览器仍然指向purchaselicense.php,而不是purchaselicense2.phpJavascript PHP使用post以编程方式导航到新表单,javascript,php,forms,post,data-entry,Javascript,Php,Forms,Post,Data Entry,我对PHP相当陌生。我有一个表单,用户正在填写各种详细信息(开始日期、结束日期等),名为purchaselicense.php。提交时,表单操作会重新加载自身,以使用PHP验证数据 如果验证通过,我希望它使用post方法导航到purchaseLicense2.php,就像表单最初直接发布到purchaseLicense2.php一样 我不介意使用Javascript来实现这一点,我想它需要参与进来,因为它最终会看到一个不同于它预期的表单 这是我当前的purchaselicense.php,我遇到
我建议您使用$\u SESSION
来保存表单之间的状态,下面是一个非常粗糙的示例,第一个表单上有一个字段,如果正确(数字),整个表单状态将设置到会话中,然后重定向到第二个表单以填充其他字段。很简单,但你明白了
dataentry1.php
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// define form state
$form = [
'value' => $_POST,
'error' => []
];
// validate a_field
if (empty($form['value']['a_field'])) {
$form['error']['a_field'] = 'a_field is a required field!';
} elseif (!is_numeric($form['value']['a_field'])) {
$form['error']['a_field'] = 'a_field should be a number!';
}
// all good
if (empty($form['error'])) {
$_SESSION['form'] = $form;
exit(header('Location: dataentry2.php'));
}
}
?>
<?= (!empty($form['error']['global']) ? $form['error']['global'] : null) ?>
<form action="/dataentry1.php" method="post">
<lable>a_field:</lable>
<input type="text" name="a_field" value="<?= (isset($form['value']['a_field']) ? htmlentities($form['value']['a_field']) : null) ?>">
<?= (!empty($form['error']['a_field']) ? '<br>'.$form['error']['a_field'] : null) ?>
<br>
<input type="submit" value="Submit">
</form>
a_字段:
这个问题缺少任何代码来告诉我们您自己已经尝试过解决这个问题。如果您尝试了一些东西,请向我们展示您尝试了什么,预期输出的示例以及您实际得到的结果。如果你还没有尝试过任何东西,你需要在发布之前尝试一下。我们可以帮助您使用现有代码,但我们不会为您编写。请阅读:我还建议您在保存数据之前进行验证。如果您在验证后将其发回并再次在浏览器中输出(以新的形式,如js数据或其他任何形式),任何人都可以在那里更改它,甚至将无效数据直接发布到dataentry2.php
,并一起绕过验证。@MagnusEriksson-Hi Magnus,我已编辑以显示当前代码的精简版本。理想情况下,我只想看到一些PHP代码,使用POST方法将用户导航到一个新表单,但我怀疑这样的东西不存在。@Lawrence Cherone-非常感谢。我已将此标记为答案。因此,从概念上讲,使用$\u SESSION变量在表单之间转换数据,post方法只需让每个表单验证其自身的数据。另外,我缺少的代码是exit(header('Location:dataentry2.php'),它只是导航到一个新表单并退出。
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// define form state
$form = [
'value' => $_POST,
'error' => []
];
// validate a_field
if (empty($form['value']['a_field'])) {
$form['error']['a_field'] = 'a_field is a required field!';
} elseif (!is_numeric($form['value']['a_field'])) {
$form['error']['a_field'] = 'a_field should be a number!';
}
// all good
if (empty($form['error'])) {
$_SESSION['form'] = $form;
exit(header('Location: dataentry2.php'));
}
}
?>
<?= (!empty($form['error']['global']) ? $form['error']['global'] : null) ?>
<form action="/dataentry1.php" method="post">
<lable>a_field:</lable>
<input type="text" name="a_field" value="<?= (isset($form['value']['a_field']) ? htmlentities($form['value']['a_field']) : null) ?>">
<?= (!empty($form['error']['a_field']) ? '<br>'.$form['error']['a_field'] : null) ?>
<br>
<input type="submit" value="Submit">
</form>
<?php
session_start();
// set form into scope from session
if (!empty($_SESSION['form'])) {
$form = $_SESSION['form'];
} else {
$_SESSION['form']['error']['global'] = 'You must fill out dataentry1 form first';
exit(header('Location: dataentry1.php'));
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// define form state
$form = [
'value' => array_merge($form['value'], $_POST),
'error' => []
];
// validate a_field
if (empty($form['value']['b_field'])) {
$form['error']['b_field'] = 'b_field is a required field!';
} elseif (!is_numeric($form['value']['b_field'])) {
$form['error']['b_field'] = 'b_field should be a number!';
}
// all good
if (empty($form['error'])) {
exit('Do something cool!');
}
}
?>
<form action="/dataentry2.php" method="post">
<lable>a_field:</lable>
<input type="text" name="a_field" value="<?= (isset($form['value']['a_field']) ? htmlentities($form['value']['a_field']) : null) ?>" readonly="readonly">
<?= (!empty($form['error']['a_field']) ? '<br>'.$form['error']['a_field'] : null) ?>
<lable>b_field:</lable>
<input type="text" name="b_field" value="<?= (isset($form['value']['b_field']) ? htmlentities($form['value']['b_field']) : null) ?>">
<?= (!empty($form['error']['b_field']) ? '<br>'.$form['error']['b_field'] : null) ?>
<br>
<input type="submit" value="Submit">
</form>