php foreach返回选中的最后一个变量

时间:2014-01-01 03:35:14

标签: php

foreach似乎无法正常工作,其中选择的最后一个值有效但不是全部。

从这里选择数组:

<fieldset>
    <legend>status:</legend>
    <?php foreach ($statuss as $status): ?>
      <div><label for="status<?php hscout($status['id']);
          ?>"><input type="checkbox" name="statuss1[]"
          id="status<?php hscout($status['id']); ?>"
          value="<?php hscout($status['id']); ?>"<?php
          if ($status['selected'])
          {
            echo ' checked="checked"';
          }
          ?>/><?php hscout($status['description']); ?></label></div>
    <?php endforeach; ?>
  </fieldset>

索引如下:

if (isset($_POST['statuss1']))
{
    foreach ($_POST['statuss1'] as $status1)
{

$a = mysqli_real_escape_string($link, $status1);

  $sql = "SELECT b FROM C WHERE d ='$a'";
  $result = mysqli_query($z, $sql);
  if (!$result)
  {
    $error = 'Still not working you.....';
    include 'error.html.php';
    exit();
  }
  $selected1s = array();

  while ($row = mysqli_fetch_array($result))
  {
    $selected1s[] = $row['b'];
  }
}
}

$selected1s[]仅在选择了一个变量时有效。如果选择了多个变量,则解析最后一个变量。

1 个答案:

答案 0 :(得分:1)

每次通过提取所选项目的foreach循环,您都会说$selected1s = array(),这会清除您用来积累它们的数组。

如果您只想让此代码正常工作,请使用$selected1s = array();行并将其移至foreach循环之前。

但是,有一种方法可以构建一个同时获取所有行的查询。这通常会使裤子在每件物品上做一大堆查询。

$selected1s = array();

if (!empty($_POST['statuss1'])) {
    // Create a function that SQL-escapes and quotes an ID...
    // (Note: requires PHP 5.3+)
    $sqlify = function($id) use ($link) {
        return "'" . mysqli_real_escape_string($link, $id) . "'";
    };
    // and apply it to the array to get back a list of SQL-ready values
    $ids = array_map($sqlify, $_POST['statuss1']);

    // string them together as a comma-separated list
    $ids_sql = implode(',', $ids);

    // and say `d IN (the list)`
    $sql = "SELECT b FROM c WHERE d IN ($ids_sql)";

    ... do the query, fetch results into $selected1s
}

(这是我通常提倡准备好的陈述并告诉您使用它们的部分。在大多数情况下,您应该使用哪些。对于IN个查询或等效的OR个查询,但是,他们往往会吮吸。)