Javascript PHP使用post以编程方式导航到新表单

Javascript 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,我遇到

我对PHP相当陌生。我有一个表单,用户正在填写各种详细信息(开始日期、结束日期等),名为purchaselicense.php。提交时,表单操作会重新加载自身,以使用PHP验证数据

如果验证通过,我希望它使用post方法导航到purchaseLicense2.php,就像表单最初直接发布到purchaseLicense2.php一样

我不介意使用Javascript来实现这一点,我想它需要参与进来,因为它最终会看到一个不同于它预期的表单

这是我当前的purchaselicense.php,我遇到的问题是purchaselicense2.php和purchaselicense.php都是在表单发布后呈现的,浏览器仍然指向purchaselicense.php,而不是purchaselicense2.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>