【问题标题】:PHP [ sorting data from database as collapsible bootstrap 4 cards ] [duplicate]PHP [将数据库中的数据排序为可折叠引导 4 卡] [重复]
【发布时间】:2020-04-22 19:42:13
【问题描述】:

正如标题所说,我正在为网站开发购物车,购物车包含从不同公司订购的所有产品,如下所示:- screenshot

因此,正如您所见,我正在尝试将同一公司的所有产品分类,因为特定公司的账单我的问题是我该如何做到这一点?

我尝试过的:- 没什么好说的,实际上我真的很困惑,我现在不知道我要做什么(循环或类似的东西..) 我希望我解释了我想要完成的事情,如果不是 (screenshot) 代码:- php PDOquery

<?
$accountid = '8';
require_once '..\Config.php';
 // WHERE chemicalcom='$variable' OR name='$variable'
$dbCon = "mysql:host=$host;dbname=$db_name";
$variable = "Efexor";
$PDOCon = new PDO($dbCon, $username, $password);
$query = $PDOCon->prepare("SELECT * FROM basket WHERE accountid ='$accountid'");
$query->execute();
$basketItems = $query->fetchAll();
?>

代码:- index.php

        <? foreach($basketItems as $item){
        echo'<h3>Bill('.$item['companyexported'].')</h3>
        <div class="card">
        <div class="row">
            <div class="col-6"><img src="'.$item['imgpath'].'" class="productimg" alt=""></div>
            <div class="col-auto">
                <div class="card-title">
                    <div class="row">'.$item['name'].'</div>
                    <div class="row">'.$item['chemicalcom'].'</div>
                    <div class="row">'.$item['concentration'].'</div>
                    <br>
                    <div class="row">'.$item['price'].' $
                    </div>
                    <span class="badge badge-info qty">'.$item['qty'].'</span>
                </div>
            </div>
        </div>
    </div>';}?>

谢谢。

【问题讨论】:

  • 在此处发帖的一些提示可能对您有所帮助: (1) 在您的标题中省略方括号/角括号/大括号以呈现自制标签(使用标签系统); (2) 用简单的英文写标题,可以是简短的陈述或问题; (3) 避免喋喋不休的谈话材料,比如你很困惑(读者知道这一点)或者你是多么感激(假设); (4) 通过英文拼写检查器运行您的书面工作; (5) 遵守英语的常用格规则,特别注意人称代词“I”。
  • 另请注意,您的代码可能容易受到 (1) SQL 注入和 (2) XSS 漏洞的攻击。
  • @halfer 感谢halfer 的建议,您能告诉我如何防止这些攻击吗?以及它们是如何工作的?
  • 是的,(1) 参数绑定,see here 和 (2) 输出转义,see here

标签: php html pdo bootstrap-4


【解决方案1】:

首先,您需要更新您的 sql 以由公司订购,这将使 php 更简单。

SELECT * FROM basket WHERE accountid ='$accountid' order by companyexported

然后在您的 php 中,您只想显示公司一次,因此您创建一个空变量并检查它。如果该变量不包含匹配的公司名称,请显示该公司并将该变量设置为当前公司名称。

        <?
    $curr_co = "";

foreach($basketItems as $item){
    if($curr_co != $item['companyexported']){
           echo '<h3>Bill('.$item['companyexported'].')</h3>';
           $curr_co = $item['companyexported'];
    }
           echo '<div class="card">
                <div class="row">
                    <div class="col-6"><img src="'.$item['imgpath'].'" class="productimg" alt=""></div>
                    <div class="col-auto">
                        <div class="card-title">
                            <div class="row">'.$item['name'].'</div>
                            <div class="row">'.$item['chemicalcom'].'</div>
                            <div class="row">'.$item['concentration'].'</div>
                            <br>
                            <div class="row">'.$item['price'].' $
                            </div>
                            <span class="badge badge-info qty">'.$item['qty'].'</span>
                        </div>
                    </div>
                </div>
            </div>';}?>

【讨论】:

  • 在 PHP 中捕获大块 HTML 并不是一个理想的做法,因为它会阻止编辑器/IDE 进行语法检查和片段着色。考虑保留所有这些 HTML,然后在需要的地方打开 PHP 片段,例如&lt;?php foreach($basketItems as $item): ?&gt;.
  • @halfer,我同意,实际上我使用的是自定义模板引擎。我只是在回答问题本身,而不是试图解决他们所有的编程问题。但无论如何,这个问题已经结束了。
  • 很公平,是的,很难解决所有问题。代替所有这些努力可以做的一件事是在最后添加一些注释,以确保问题作者知道这些事情。例如,我会在这里怀疑 SQL 注入和 XSS 漏洞,但修复这些东西是不切实际的(特别是因为这不是问题的重点)。因此,我倾向于在最后写一些关于这些内容的注释,以防作者有学习新事物的动力。
  • @imvain2 感谢您的回复,但代码不起作用,请参阅imgur.com/jk02QUs
  • @MrObscure,我很抱歉,这是 halfer 提到的。你需要修改你的回声,因为你真的不应该像那样包含 html/php。我已经相应地更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2020-08-19
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
相关资源
最近更新 更多