Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和MySQL通过GET循环相同的查询字符串_Php_Mysql_Arrays_Loops - Fatal编程技术网

PHP和MySQL通过GET循环相同的查询字符串

PHP和MySQL通过GET循环相同的查询字符串,php,mysql,arrays,loops,Php,Mysql,Arrays,Loops,我正在尝试在分类页面上进行电子商务过滤。到目前为止,我可以让它为一种颜色工作,但如果用户检查多个颜色,我希望它也搜索其他颜色 统一资源定位地址 我意识到我需要某种形式的数组或爆炸 MYSQL HTML PHP //变量 $colorName=mysql\u real\u escape\u字符串($\u GET[“colorChoice]”); //MYSQL $checkSQL=mysql\u查询(“ 从`产品中选择*` 内接颜色` 关于'products`.'sku`='colors`.'

我正在尝试在分类页面上进行电子商务过滤。到目前为止,我可以让它为一种颜色工作,但如果用户检查多个颜色,我希望它也搜索其他颜色

统一资源定位地址 我意识到我需要某种形式的数组或爆炸

MYSQL HTML

PHP
//变量
$colorName=mysql\u real\u escape\u字符串($\u GET[“colorChoice]”);
//MYSQL
$checkSQL=mysql\u查询(“
从`产品中选择*`
内接颜色`
关于'products`.'sku`='colors`.'sku``
在哪里(
名称='“$colorName.”
或者像“.$colorName.;%”这样的名称
或名称“%”“;”$colorName.;%”
或名称“%”;“$colorName.”
)
");
//显示结果
而($r=mysql\u fetch\u数组($checkSQL)){
回声'
成本:$r[“价格]。
'; }
您必须按如下所示制作复选框数组

<form action="form.php" method="get">
    <input type="checkbox" name="colourChoice[]" value="White"/>
    <input type="checkbox" name="colourChoice[]" value="Black"/>
    <input type="checkbox" name="colourChoice[]" value="Ruby Red"/>
    <input type="checkbox" name="colourChoice[]" value="Orange"/>
    <input type="submit" value="go">
</form>

您可以在PHP中以数组的形式获取HTML输入值:

HTML
mysql\u real\u escape\u字符串在这里不是更好吗。每套有300-400种组合,而且交通负荷很大。为什么会更好?如果有这么多复选框,请记住查询字符串的长度是有限的(mysql设置
max\u allowed\u packet
)。请看这里,$value实际上等于“White+Ruby+Red”,它实际上是如何编写格式的,$value实际上是什么样子的。它接受所有实际检查的值。
products
---
id      sku     price
1       p22     45.00
2       p33     65.00   
3       p44     70.00

colours
---
id      sku     name
1       p22     White
2       p33     Ruby Red    
3       p44     Black
<form action="form.php" method="get">
    <input type="checkbox" name="colourChoice" value="White"/>
    <input type="checkbox" name="colourChoice" value="Black"/>
    <input type="checkbox" name="colourChoice" value="Ruby Red"/>
    <input type="checkbox" name="colourChoice" value="Orange"/>
    <input type="submit" value="go">
</form>
// VARS
$colourName=mysql_real_escape_string($_GET["colourChoice"]);

// MYSQL
$checkSQL=mysql_query("
    SELECT * FROM `products`
    INNER JOIN `colours`
    ON `products`.`sku` = `colours`.`sku`
    WHERE (
    name = '".$colourName."'
        OR name LIKE '".$colourName.";%'
        OR name LIKE '%;".$colourName.";%'
        OR name LIKE '%;".$colourName."'
    )
");

// SHOW RESULTS
while($r = mysql_fetch_array($checkSQL)) {
    echo '
        <div class="product">
            Cost £'.$r['price'].'<br />
        </div>
    ';
}
<form action="form.php" method="get">
    <input type="checkbox" name="colourChoice[]" value="White"/>
    <input type="checkbox" name="colourChoice[]" value="Black"/>
    <input type="checkbox" name="colourChoice[]" value="Ruby Red"/>
    <input type="checkbox" name="colourChoice[]" value="Orange"/>
    <input type="submit" value="go">
</form>
foreach($_GET["colourChoice"] as $value){
  /// here you can make concat for where clause.
}
<form action="form.php" method="get">
    <input type="checkbox" name="colourChoice[]" value="White"/>
    <input type="checkbox" name="colourChoice[]" value="Black"/>
    <input type="checkbox" name="colourChoice[]" value="Ruby Red"/>
    <input type="checkbox" name="colourChoice[]" value="Orange"/>
    <input type="submit" value="go">
</form>
$placeholders = substr(str_repeat('?, ', count($_GET['colourChoice']), 0, -1);
$query = "
    SELECT * FROM `products`
    INNER JOIN `colours`
    ON `products`.`sku` = `colours`.`sku`
    WHERE name in ($placeholders);
");
$db = new PDO(...);
$stmt = $db->prepare($query);
$stmt->execute($_GET['colourChoice']);
print_r($stmt->fetchAll());