Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.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 Sql选择与数组匹配的元素并将它们显示在一行中_Php_Mysql - Fatal编程技术网

Php Sql选择与数组匹配的元素并将它们显示在一行中

Php Sql选择与数组匹配的元素并将它们显示在一行中,php,mysql,Php,Mysql,我有一个带有多个复选框的表单,客户可以在其中选择一个或多个项目 我将值传递给php页面,在该页面中使用select语句获取从db中选择的项目的价格和图像 ID | Name | Price | Images | item 1 | bob | 10 | link | a 2 | bob | 5 | link | b 3 | bob | 5 | link | c 4 | bob | 5 | link | d 我想显示一行中所选

我有一个带有多个复选框的表单,客户可以在其中选择一个或多个项目

我将值传递给php页面,在该页面中使用select语句获取从db中选择的项目的价格和图像

ID | Name | Price | Images  | item
1  | bob  | 10    | link    | a
2  | bob  | 5     | link    | b
3  | bob  | 5     | link    | c
4  | bob  | 5     | link    | d
我想显示一行中所选项目的结果,如:

bob   a b  
下面的代码不允许我在客户选择多个项目时看到此结果

    // $_POST['choices'] array 
$result = count($_POST['choices']);

require("config.casa.php"); //file connection db


try {
    $dbh = new PDO("mysql:host=$DB_Server;dbname=$DB_DBName",$DB_Username,$DB_Password);

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
    echo 'Connected to Database<br/>';

for($i=0; $i<$result; $i++){
        $po="SELECT  name, item, price, images  FROM my-tb WHERE item ='".$_POST['choices'][$i]."'";
        $rpo=$dbh->prepare($po);
    $rpo->execute();
$pol = $rpo->fetch(PDO::FETCH_ASSOC);
    echo "<ul class=\"tab\"><li class=\"col1\">"."name"."</li>";
    echo "<li class=\"col2\"><p class=\"two\"><h3>&euro; ".$pol['price']."</h3></p>"; 
        echo "<p class=\"lin\"><strong><span class=\"up\">".$pol['images']."</strong></p>";
        <li class=\"col3\">".$row["item"]."</li></ul>
            }
    $dbh = null;
     }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
/$\u POST['choices']数组
$result=计数($_POST['choices']);
要求(“config.casa.php”)//文件连接数据库
试一试{
$dbh=newpdo(“mysql:host=$DB_Server;dbname=$DB_dbname”、$DB_Username、$DB_Password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//执行();
$pol=$rpo->fetch(PDO::fetch_ASSOC);
echo“
  • ”名称“
  • ”; echo“
  • &euro;“$pol['price'”。”

    ”; echo“

    ”$pol['images']。“

    ”;
  • “$row[“item”]。”
} $dbh=null; } 捕获(PDO$e) { echo$e->getMessage(); }

我还尝试执行语句fecth of cycle for,但我从变量
$\u POST['choices']

中获取了最后一项,而不是全部。将
$\u POST[]
转换为逗号分隔的字符串

$choices = implode(', ', $_POST['choices']);

SELECT name, item, price, images FROM `my-tb` WHERE item IN ($choices)
这将生成如下查询:

SELECT name, item, price, images FROM `my-tb` WHERE item IN (a,b,d)
这也使得您不会在
$\u POST
上循环,不必要地执行多个查询

旁注


我不确定您的实际表是否命名为
my tb
,但如果表名中有
连字符
,则必须使用
反勾号
来封装字符串名称。

在此查询语句中:

$po="SELECT  name, item, price, images  FROM my-tb WHERE item ='".$_POST['choices'][$i]."'";
您可以使用
item='item 1'或item='item 2'或..
创建语句的完整代码如下所示:

$condition="";
$count=count($_POST['choices']);
$i=0;
foreach($_POST['choices'] as $value) { $i++;
    if($i<$count) {
        $condition.="item='".$value."' or ";
    } else {
        $condition.="item='".$value."'"; //Last element should not contain or at the end
    }
}
$po="SELECT  name, item, price, images  FROM my-tb WHERE ".$condition;
$condition=”“;
$count=count($_POST['choices']);
$i=0;
foreach($_POST['choices']作为$value){$i++;

如果($I为什么?这正是
…IN
子句存在的目的。是的,这只是获得相同结果的另一种方式。但一旦我坚持使用IN,因为我的帖子数据包含特殊字符。或者帮助我退出。对于数字和字母数据,我同意IN始终是最好的。我已经用“IN子句”测试了您的查询在面板phpmyadmin中,显示正确的结果和警报“此表不包含唯一列”。另外,当我尝试执行页面php时,echo语句只显示一个项目,而不是所有项目。在我之前的问题中,我的目标是显示从客户处选择的所有项目。可能是J搞错了php代码或表的结构。表的真实名称没有连字符,谢谢您的说明