PHP、HTML 以及 "required" 的后续和连续处理

PHP, HTML and the consequential and consecutive handling of "required"

一个简短的问题:我的表格

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST" name="formForm">

包含几个相似的区域,仅在第一个区域之后显示一次

<div id="xyz" style="display:none">

正在转换为

<div id="xyz" style="display:inline">

通过单击复选框。这一切都很好。

第一个区域包含如下内容:

<input type="radio" name="something1" required="required" value="1 etc." + additional PHP and JavaScript code />

现在,单击复选框显示另一个这样的区域,另一个

<input type="radio" name="something2" required="required" value="1 etc." + additional PHP and JavaScript code />

也存在。换句话说:所有这些区域分别包含一个HMTL5必需的元素。

现在,似乎我使用的所有PHP条件都没有第二个或第三个等"required"由于未显示而被验证(显示:none)不工作:

<?php
  if (condition1 && condition2) {
?>
  <input type="radio" name="something" required="required" value="1 etc." + additional PHP and JavaScript code />
<?php
  } elseif (condition3 && condition4) {
?>
  <input type="radio" name="something" value="1 etc." + additional PHP and JavaScript code />
<?php
  }
?>

似乎现有的 "required" in , 等在表单中否决了这个 PHP 构造。

我知道我可以使用一些 JavaScript 代码以不同的方式处理这个问题,但我想看看我是否不能将这个 "required" 问题作为纯粹的 HTML5.

这里是到目前为止的模式化代码:

<?php
  // some preconditions in PHP
  // definitions of variables
  // definitions of constants
  // database connection
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <style> ... </style>
    <script> ... </script>
  </head>
  <body ...>
  <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST" name="formForm" />
    <table cellspacing="0" id="formContainer">
    <?=siteHeader('some uestion, whatever')?>
      <tr>
        <td>
          <table ... 1>
            <... lots of HTML code, whatever ...>
              <?php
                if (condition1 && condition2) {
              ?>
                <input type="radio" name="something1" **required="required"** value="1" + additional PHP and JavaScript code />
              <?php
                } elseif (condition3 && condition4) {
              ?>
                <input type="radio" name="something1" value="2" + additional PHP and JavaScript code />
              <?php
                }
              ?>
            < ... lots of other HTML code, whatsoever ...>
          </table>

          <div id="xyz" style="display:none">

            <table ... 2>
              <... lots of HTML code, whatever ...>
                <?php
                  if (condition1 && condition2) {
                ?>
                  <input type="radio" name="something1" **required="required"** value="1" + additional PHP and JavaScript code />
                <?php
                  } elseif (condition3 && condition4) {
                ?>
                  <input type="radio" name="something1" value="2" + additional PHP and JavaScript code />
                <?php
                  }
                ?>
              < ... lots of other HTML code, whatsoever ...>
            </table>

          </div>

          <handling of submit, reset etc.>
        </td>
      <tr>
    </table>
  </form>
  </body>
  <?php
    // other PHP aspects, such as jQuery definitions
  ?>

现在,table 1 可以处理 "required" 问题。所需输入中的单选按钮的值被保存到数据库中,然后使用一些好的 PHP 技术重新显示以读取数据库条目。因此显示单选字段的条目。

目前为止一切正常。

但是一旦我想对 table 1 的内容进行更改并保存它们,我就会收到一个注意字段来填写 table 2 的 "required" 输入,尽管不是显示。

此 HTML5 运算符的 "strength" 似乎与使用 ... 的任何显示限制无关,或者与它完全不相关。

是否有任何方法可以处理此问题,因为第二个(或第三个等)"required" 输入的验证仅在显示 table 2 时执行?

使用 PHP 显示不同输入(一个带有 "required" 标志,另一个没有)的条件上下文似乎都不起作用。它似乎也被 "required".

覆盖了

由于这个 "required" 业务似乎很少被记录下来,你们中间有没有人可以给我一些提示?

此致

马库斯

display:none的意思是有存在但不显示的东西。我不知道这种特定行为,但由于存在必填字段,如果它们留空,浏览器会抱怨,无论用户是否有机会这样做。

有几种可能的解决方法,其中大多数都很丑陋且难以维护。 required 属性是为非常简单的表单设计的,在我看来,您的用例比那些更高级。我认为您应该在 JavaScript 函数中编写验证逻辑。

如果它变得真的复杂,您可以考虑几个库中的一个。