如何在没有JS的情况下检查从多个选择中选择哪个HTML

时间:2016-02-25 09:52:18

标签: php html

不确定为什么在实践中这不起作用,但我想在提交后重新加载页面,但是有多个<select>

每个人都有自己的名字,但我怎么知道$_POST上哪个被更改了,而没有给每个人选择自己的表格。

以下是当前代码:

<form id="productSelectedForm" action="products.php?filter=true" method="post">
  <input type="hidden" name="model" value="<?php echo $item['model']; ?>" />
  <ul>
    <li>
      <label><strong>Select available Grade: </strong>
        <select id="gradeSelect" class="propChanged" name="grade" onchange="this.form.submit();">
          <?php foreach( $props[ 'grade'] as $g) { ?>
          <option value="<?php echo $g; ?>">
            <?php echo $g; ?>
          </option>
          <?php } ?>
        </select>
      </label>
    </li>
    <li>
      <label><strong>Select available Colour:</strong>
        <select id="colourSelect" class="propChanged" name="colour" onchange="this.form.submit();">
          <?php foreach( $props[ 'colour'] as $g) { ?>
          <option value="<?php echo $g; ?>">
            <?php echo $g; ?>
          </option>
          <?php } ?>
        </select>
      </label>
    </li>
    <li>
      <label><strong>Select available Storage:</strong>
        <select id="storageSelect" class="propChanged" name="storage" onchange="this.form.submit();">
          <?php foreach( $props[ 'storage'] as $g) { ?>
          <option value="<?php echo $g; ?>">
            <?php echo $g; ?>
          </option>
          <?php } ?>
        </select>
      </label>
    </li>
    <li>
      <label><strong>Select available Network:</strong>
        <select id="networkSelect" class="propChanged" name="network" onchange="this.form.submit();">
          <?php foreach( $props[ 'network'] as $g) { ?>
          <option value="<?php echo $g; ?>">
            <?php echo $g; ?>
          </option>
          <?php } ?>
        </select>
      </label>
    </li>
  </ul>
</form>

有没有办法在不使用Javascript和个人表单的情况下执行此操作,我不知道?

由于

阿迪

1 个答案:

答案 0 :(得分:0)

从您给定的PHP中可以看出,您没有为SELECT元素预先选择某个选项,因此浏览器将默认选择第一个。

然后,当用户提交表单时,您无法区分第一个项目的自愿,有意识的选择,或者用户是否只是更改了另一个SELECT并且没有对此进行任何操作。

我建议使用第一个为空的选项启动每个SELECT,并且具有空的VALUE属性,如下所示:

      <option value=""><option>
      <?php foreach( $props[ 'grade'] as $g) { ?>
      <option value="<?php echo $g; ?>">
        <?php echo $g; ?>
      </option>
      <?php } ?>

然后,当您处理$_POST数据时,您将知道用户是否明确选择该值是否为空,例如:

if (!empty($_POST['grade'])) {
    // a grade was specified by the user.
}

保持状态

虽然您的代码似乎没有跟踪以前做出的选择,但您可能想要这样做,因此您应该以某种方式存储以前的选择。一旦你能够做到这一点,你就可以通过比较以前的值和当前提交的值来找出改变了什么。

您可以使用会话变量来跟踪用户的选择:

session_start();

// detect change and remember current selections
$changed = array();
foreach (array("grade", "colour", "storage", "network") as $key) {
    if (isset($_POST[$key])) {
        if (empty($_SESSION[$key]) || $_POST[$key] != $_SESSION[$key]) {
            $changed[] = $key;
        }
        $_SESSION[$key] = $_POST[$key];
    } else {
        $_SESSION[$key] = "";
    }
}

此代码运行后,您将在数组中 $ changed 具有更改值的项目列表(例如 [“storage”] )。通常情况下,不应该一次更改多个值(因为您在更改时立即提交),但谁知道......

然后在您的表单中,您应该确保用户保留选定的先前选定的项目,例如,等级:

    <select id="gradeSelect" class="propChanged" name="grade" onchange="this.form.submit();">
      <?php foreach( $props[ 'grade'] as $g) { ?>
      <option value=""></option>
      <option value="<?php echo $g; ?>"
            <?php if ($g == $_SESSION["grade"]) echo " selected "; ?>
        >
        <?php echo $g; ?>
      </option>
      <?php } ?>
    </select>
相关问题