我有form和php文件,我需要从数据库中查询数组中的颜色。
数据看起来像
red,white mustang 1977
black,blue ford 2000
white,pink,blue opel 2003
和表单看起来像
<form method="POST" action="select.php">
<p><input type="radio" value="just" checked name="selection">just selected<input type="radio" name="selection" value="allinclude">all include </p>
<p><input type="checkbox" name="color[]" value="ON">red</p>
<p><input type="checkbox" name="color[]" value="ON">blue</p>
<p><input type="checkbox" name="color[]" value="ON">black</p>
<p><input type="checkbox" name="color[]" value="ON">white</p>
<p><input type="checkbox" name="color[]" value="ON">pink</p>
<p> </p>
<p><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset" name="B2"></p>
</form>
我需要2个sql查询,一个在数据中检查所有选中的选项,其中一个在数据中检查
在我的select.php中
$selection= $_POST["selection"];
$color=implode(",",$_POST["color"]);
$sql= mysql_query("select model,year,color where color like '%".$color."%'");
当我选择蓝色和白色时,sql不返回任何行。 如果我选择白色,则返回2行
但是我想选择所有包含单选框并选择蓝色和白色然后返回3行
如何为所有包含的选择编写第二个sql?
这是新代码,但这只是查询数组中的最新项目,而不是所有选择形式的“仅”部分选择
$selection= $_POST["selection"];
$color=implode(",",$_POST["color"]);
if($selection=='just'){
$colorselect = explode(',', $color);
foreach($colorselect as $b)
{
$mycolor = trim($b);
$sql= mysql_query("select model,year,color where color like '%".$mycolor."%'");
}
}
else{
$sql= mysql_query("select model,year,color where color like '%".$color."%'");
}
答案 0 :(得分:1)
如果我正确理解您的问题,您的第一个查询会获取包含所有所选颜色的所有行 - 并且您需要第二个查询来获取包含一行的所有行或更多选择的颜色。在这种情况下,您需要在查询中包含一系列OR
,以检查每行中的每种颜色。 (注意:你的查询似乎缺少一个FROM语句。我已经添加了这个,假设你的表名为cars
)。
假设$colors
是一组选定颜色,例如:['blue', 'white', 'red']
,您可以按如下方式设置查询:
$query = 'SELECT model,year,color FROM cars WHERE ';
$or = '';
foreach ($colors as $color) {
$query .= $or . "color LIKE '%" . $color . "%'";
$or = ' OR ';
}
这将有效地构建一个如下所示的查询:
SELECT model,year,color
FROM cars
WHERE color LIKE '%blue%'
OR color LIKE '%white%'
OR color LIKE '%red%'
将从示例数据中选择所有行 - 每行至少包含一个所选颜色。如果您想更改此逻辑以获取包含所有颜色的所有行,只需将OR
更改为AND
- 这将匹配具有所有所选颜色的行,无论他们被选中的顺序。
其他想法:
存储逗号分隔值(如blue,white
)通常是不好的做法。考虑规范化您的数据并使用包含colors
和car_colors
表格的系统。
<强>更新强>
这是完整的系统。这将根据选择的单选按钮创建适当的查询:
(假设您提供的样本数据位于名为cars
的表中)
形式:
<form method="POST" action="select.php">
<p><input type="radio" value="just" checked name="selection">just selected<input type="radio" name="selection" value="allinclude">all include </p>
<p><input type="checkbox" name="color[]" value="red">red</p>
<p><input type="checkbox" name="color[]" value="blue">blue</p>
<p><input type="checkbox" name="color[]" value="black">black</p>
<p><input type="checkbox" name="color[]" value="white">white</p>
<p><input type="checkbox" name="color[]" value="pink">pink</p>
<p> </p>
<p><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset" name="B2"></p>
</form>
select.php:
$selection = $_POST['selection'];
$colors = $_POST['color'];
$op = $selection == 'just' ? ' AND ' : ' OR ';
$query = 'SELECT model,year,color FROM cars WHERE ';
$and_or = '';
foreach ($colors as $color) {
$query .= $and_or . "color LIKE '%" . $color . "%'";
$and_or = $op;
}
$sql = mysql_query($query);
答案 1 :(得分:0)
Fred -ii-s评论的有效HTML是:
<form method="POST" action="select.php">
<p><input type="radio" value="just" checked name="selection">just selected<input type="radio" name="selection" value="allinclude">all include </p>
<p><input type="checkbox" name="colors[]" value="red">red</p>
<p><input type="checkbox" name="colors[]" value="blue">blue</p>
<p><input type="checkbox" name="colors[]" value="black">black</p>
<p><input type="checkbox" name="colors[]" value="white">white</p>
<p><input type="checkbox" name="colors[]" value="pink">pink</p>
<p> </p>
<p><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset" name="B2"></p>
</form>
然后在PHP代码中,您只需使用$_POST['colors']
数据数组,就像PHP中的任何其他数组一样。
$colors = implode($_POST['colors'],',');
$sql= mysql_query("select model,year,color where color in (".$colors.")");
答案 2 :(得分:0)
您的HTML:
<form method="POST" action="select.php">
<p><input type="radio" value="just" checked name="selection">just selected<input type="radio" name="selection" value="allinclude">all include </p>
<p><input type="checkbox" name="color[]" value="red">red</p>
<p><input type="checkbox" name="color[]" value="blue">blue</p>
<p><input type="checkbox" name="color[]" value="black">black</p>
<p><input type="checkbox" name="color[]" value="white">white</p>
<p><input type="checkbox" name="color[]" value="pink">pink</p>
<p> </p>
<p><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset" name="B2"></p>
</form>
你的PHP:
$colors = array("red", "blue", "black", "white", "pink");
// Make sure that only allowed colors make through - we don't want SQL injection
$selection = array();
foreach ($_POST["colors"] as $color)
{
if (in_array($color, $colors) === true)
{
$selection[] = $color;
}
}
// Now a bit of magic
$sql= mysql_query("select model,year,color from data where color like '%" . implode("%' " . ($_POST["selection"] === "just" ? "or" : "and") . " color like '%",$selection) . "%'");