一个 php 页中的三个表单操作

Three forms actions in one php page

假设我有一个包含三种表单的 PHP 页面。

  1. 形式一,它会在隐藏代码时要求用户输入电子邮件地址。
<label for="email">Email Address:</label> <input type="text" id="email" name="email">
<input type="hidden" id="code" name="code" value="42"> <input type="submit" value="Submit1">
  1. 表格二将在步骤 1 之后显示。在此步骤中,将要求用户输入步骤 1 中的代码(等于 42)。
<input type="number" id="code2" name="code2"> <input type="submit" value="Submit2">
  1. 表格三,在第2步输入正确的代码后显示
<input type="number" id="code2" name="code2"> <input type="submit" value="Submit3">

如何编程?

您需要将表单的操作声明为文件名。 因此,如果您正在处理的文件名称为 example.php,它应该如下所示:

$email = trim(get_variable_value('email'));
$code = trim(get_variable_value('code'));
$code2 = trim(get_variable_value('code2'));

//make sure to validate the input!! if it's not valid send back

<? if(!isset($email)){ //alternatively, you can add a hidden input `stage`. I just don't like it, as it can be bypassed.
?>
    <form name="transferToNewForm" action="example.php" method="post">
        <label for="email">Email Address:</label> <input type="text" id="email" name="email">
        <input type="hidden" id="code" name="code" value="42">
        <input type="submit" value="Submit1">
    </form>
<? } 
if(isset($email) && isset($code) && $code == 42){ ?>
    <form name="transferToNewerForm" action="example.php" method="post">
        <label for="email">Email Address:</label> <input type="text" id="email" name="email" value="<?= $email ?>" readonly>
        <input type="number" id="code2" name="code2">
        <input type="submit" value="Submit2">
    </form>
<? } 
if(isset($email) && isset($code2) && $code2 == 42){ ?>
    <form name="finalFrom" action="theActualPageYouWant.php" method="post">
        <label for="email">Email Address:</label> <input type="text" id="email" name="email" value="<?= $email ?>" readonly>
        <input type="number" id="code2" name="code2">
        <input type="submit" value="Submit3">
    </form>
<? } ?>

你可以试试这个方法:

<?php 
function getFormContent() {
  $email = $_POST['email'] ?? null; //$email equals to null if it is undefined, to prevent errors

  if (!$email) {
    echo '<input type="text" name="email" placeholder="Email.." />';
    echo '<input type="hidden" id="code" name="code" value="42">';
  } else {
    echo '<input type="hidden" name="email" value="'.$email.'" />'; //keep email set after submitting first step
  }

  if ($email && $_POST['code']) {
    if (isset($_POST['code2']) && $_POST['code2'] == $_POST['code']) {
      //final form
    } 
    else { //second step
      echo '<input type="number" id="code2" name="code2">';
      echo '<input type="hidden" id="code" name="code" value="42">'; //we still need this in case user submitted a wrong code
    }
  }
}
?>

<form method="post">
  <?= getFormContent() ?>
  <input type="submit" />
</form>