如何在查询中执行foreach循环以正确显示列表中的选定选项

时间:2016-06-29 15:52:13

标签: php mysqli

我有七列代表用户表'团队'中的星期几,存储用户选择的每日9个范围内的索引。表时间范围使用索引rangeID。用户从多个选择列表中选择一个或多个时间范围,并在那一天存储索引,如逗号分隔列表:

+ ------ + ------- + --------- +
| sun + mon + tue +
| ------- ------- + + --------- +
| 2,4,5 + 1,3 + 9 +
+ ------ + ------- + --------- +

我的挑战是返回与用于选择日期范围的相同演示文稿的div表,但突出显示(选中)所选选项,以便可以在表单中显示和/或编辑用户的可用性。
/>

我试图通过以下查询获得该结果一天,星期日,但结果是在所选选项正确显示时,未选中的每个选项在选择lst中显示两次:

echo "<select  multiple=\"multiple\" size=\"10\"  name=\"sun[]\">";
echo "<option size=\"30\"></option>";
$sql = "SELECT sun, rangeID, timeranges FROM  test, timerange ORDER BY rangeID";
foreach ($myconnect->query($sql) as $row) {
    $index=explode(',', $row['sun']);
    foreach($index as $sun) {
        if ($row['rangeID']==$sun) {
            echo "<option selected=\"selected>\" value='" . $row['rangeID'] . "'>" . $row['timeranges'] . "</option>";
        } else {
            echo "<option value='" . $row['rangeID'] . "'>" . $row['timeranges'] . "</option>";
       }
    }
}
echo "</select>";

某处逻辑失败了,所以我想帮助纠正代码,这样只显示九个时间范围,选择零,一个或多个选项。

1 个答案:

答案 0 :(得分:0)

经过一周的各种体操代码加入我的白发之后,我找到了一个不优雅的解决方案但很好,因为这个动作是由一个用户(一次)调用预先填写表格。它创建了多个表,这些表将有许多空行,用于存储9个索引的0-9个索引。我肯定会使用更高效的表结构来存储用户选择的数据并一次查询一个或多个用户。

$sql = "SELECT sun FROM test";
foreach ($myconnect->query($sql) as $days)
{
  $index = explode(',', $days['sun']);
}
echo "<select  multiple=\"multiple\" size=\"9\"  name=\"sun[]\">";
$sql = "SELECT rangeID, timeranges FROM timerange ORDER BY rangeID";
foreach ($myconnect->query($sql) as $row)
{
  $arr = array_merge($index, $row);
  if ($row['rangeID'] == @ $arr[0] or @ $arr['rangeID'] == @ $arr[1] or $row['rangeID'] ==
     @ $arr[2] or $row['rangeID'] == @ $arr[3] or $row['rangeID'] == @ $arr[4] or $row[
     'rangeID'] == @ $arr[5] or $row['rangeID'] == @ $arr[5])
  {
    $selected = "selected=\"selected\"";
  }
  else
  {
    $selected = "";
  }
  echo "<option value=" . $row['rangeID'] . " " . $selected . ">" . $row['timeranges'] .
  "</option>";
}
echo "</select>";