使用选择框中的值数组查询MySQL


Query MySQL with array of values from select box

使用一个简单的PHP表单,我试图生成一个只显示在动态填充的选择框中选择的值的报告。

   <div id="container">
      <div>
        <form action="report.php" method="post">
            <label>Select Devices: </label>
            <select name="devices[]" multiple>
                <?php
                    require 'config/db.php';
                    $pdo = Database::connect();
                    $sql = 'SELECT alarm_device_description FROM alarm_device';
                    foreach($pdo->query($sql) as $row) {
                        echo '<option>'. $row['alarm_device_description'] . '</option>';
                    }
                    Database::disconnect();
                ?>
            </select>
            <button type="submit">Get Report</button>
        </form>
      </div>
    </div>

然后我有一个php文件:

<div id="container">
  <div>
    <table>
      <thead>
        <tr>
          <th>Date</th>
          <th>Alarm Device Description</th>
        </tr>
      </thead>
      <tbody>
        <?php
          require 'config/db.php';
          $pdo = Database::connect();
          var_dump($_POST);
          echo '<hr />';
          $devices = $_POST['devices'];
          echo $devices . '<hr />';
          $sql = 'SELECT date, alarm_device_description
                  FROM alarm_log
                  NATURAL JOIN alarm_device
                  ORDER BY date ASC';
          print_r($_POST['devices']);
          echo '<hr />';
          foreach ($pdo->query($sql) as $row) {
            echo '<tr>';
            echo '<td>'. $row['date'] . '</td>';
            echo '<td>'. $row['alarm_device_description'] . '</td>';
            echo '</tr>';
          }
          Database::disconnect();
        ?>
      </tbody>
    </table>
  </div>
</div>

默认情况下,该报告应该生成所有alarm_devices,这很好。然而,我需要能够选择例如:iPhone 5和Nexus,并只显示这些结果。

我曾尝试将该值作为一个数组,在reports.php页面上的POST测试中显示,它似乎确实获取了所选的值。

但是$devices=$_POST['devices']只生成一个空数组。

我需要弄清楚如何修改我的查询以发布所选的值,以及默认情况下所有的值。

提前谢谢,我希望这是合理的。我是一名前端开发人员,不太熟悉PHP/MySQL

<option>应具有value属性,该属性将传递给服务器:

例如:

<select name="select_name">
    <option value="2">Text 2</option>
</select>

在服务器端,选择Text 2选项后,它将是:

echo $_POST['select_name'];    // 2

multiple:的情况下

<select name="select_name" multiple>
    <option value="2">Text 2</option>
    <option value="3">Text 3</option>
</select>

在服务器端,选择两个选项后,它将是:

print_r $_POST['select_name'];    // array(2,3);
print_r $_POST['select_name'];    // array(2); if you select one option

当您选择alarm_device_description字段时,您可以尝试:

foreach($pdo->query($sql) as $row) {
    echo '<option value="' . $row['alarm_device_description'] . '">'. $row['alarm_device_description'] . '</option>';
}

生成选择框时缺少value属性。

更改

echo '<option>'. $row['alarm_device_description'] . '</option>';

echo '<option value="' . $row['alarm_device_description'] . '">' . $row['alarm_device_description'] . '</option>';

这样,您的$_POST["设备"]数组将与项一起使用