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[]
仅在选择了一个变量时有效。如果选择了多个变量,则解析最后一个变量。
答案 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
个查询,但是,他们往往会吮吸。)