php - PHP Mysql使用循环和条件语句创建和输出数据

标签 php mysql sql loops conditional-statements

我有一个php页面,我在选择,迭代和将选择的输出放入多个div时遇到了麻烦。我正在运行sql语句来插入数据,但是我无法弄清楚如何使用php创建div并根据表选择插入数据。我在一个表中有几个line_descriptions和category_ids。每个客户可以具有任意数量的类别。一些可能有一个,而其他可能有20个或更多。我只能执行多个选择语句。我知道必须有一种方法可以使用php来执行sql select语句并创建一个div来插入此信息。没有视觉效果,在这里很难解释。

这是查看表单的链接。[https://picasaweb.google.com/lh/photo/hurjY7oAbvRoDOQQIj3zRkeSUrPF9ispRPGyalE7Lt8?feat=directlink] [1]。

这是表格的链接[https://picasaweb.google.com/lh/photo/toJ3dulOOt90avetk2u9uEeSUrPF9ispRPGyalE7Lt8?feat=directlink][2]。

这是我想做的。


从我的category_2表类别列中选择。将该信息插入div。将category_id与line_item表中的category_id和id列匹配。
从line_item表的line_description列中选择。将该信息插入div。匹配client_id上的client表和line_item表中的id。


创建的div应该按类别分开,在下一行中要有item_quanity,item_unit和line_description,直到该category_id行完成为止。然后将下一个类别回显到另一个div中。附件是我尝试过的php代码。
我知道我需要使用某种循环和条件语句,但是对此我是陌生的,我真的试图理解使用循环和条件语句并使它们一起工作。我似乎无法弄清楚如何创建一个div并选择一个category_id并将其回显到一个div中。如果存在category_id,则创建另一个div并将其回显。任何帮助,将不胜感激。

connect.php文件

<?php

$config = array(    
    'host' => 'localhost',
    'username' => 'root',
    'password' => '',
    'dbname' => 'newest'
);  

    $db = new PDO('mysql:host=' . $config['host'] . ';dbname=' . $config['dbname'], $config['username'], $config['password']);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

?>



The select.php file

<?php
$query = "SELECT * FROM client

                JOIN job_name
                ON client.client_id = job_name.id
                JOIN estimate
                ON job_name.id = estimate.id
                JOIN line_item
                ON estimate.id = line_item.id
                JOIN category_2
                ON category_2.category_id = line_item.category_id                   
           WHERE client.email = '7895@yahoo.com'
           ORDER BY line_item.line_des_seq ASC";

// fetch gets one line
            $categorys = $db->query($query);
            $category = $categorys->fetch();           

foreach ($categorys as $lineitem){ ?>           


<?php } ?>         




    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns=http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv=Content-Type" content=text/html; charset=utf-8" />
    <title>Estimate</title>
    <link rel="stylesheet" type="text/css" href="estimateform.css"/>

    </head>

    <body>
    <?php
    require 'connect.php';
    require 'select.php';

    ?>

    <div id="estimateWrap">
    <div id="bodyWrap">
    <div id="header">Company Name</div>
    <div id="companyAdd">12345 Main St., Anytown USA 12345</div>
    <div id="companyPhone">Phone #: (123) 123-4567</div>

    <div id="jobType">
    <div class="estimateType">Proposal</div>
    </div>


    <div id="jobHeading">
    <div id="dateSpace">Date:</div>
    <div id="date"><?php echo $lineitem ['estimate_date']; ?></div>
    <div id ="JobnameSpace">Job Name:</div>
    <div id="clientJobName"><?php echo $lineitem ['client_job_name']; ?></div>
    <div id="siteaddressSpace">Site Address:</div>
    <div id="siteAdd"><?php echo $lineitem ['site_address']; ?></div>


    <div id="clientnameSpace">Client:</div>
    <div id="clientName"><?php echo $lineitem ['client_fname']; ?>  <?php echo $lineitem ['client_lname']; ?></div>

    <div id="jobnumberSpace">Job #:</div>
    <div id="jobNumber"><?php echo $lineitem ['job_number']; ?></div>
    <div id="clientZip"></div>
    <div id="clientZip"><?php echo $lineitem ['site_zip']; ?></div>

    </div>

    <div id="area">Area:  General</div>

    <div id="Qty">Qty</div>



    <div id="Unit">Unit</div>



    <div id="Description">Description</div>

    <!-- *********************************************************************************************************** -->
    <!-- *                                      Category                                                           * -->
    <!-- *********************************************************************************************************** -->

    <div id="category"><?php $sql = "SELECT * FROM `category_2` WHERE `category_id` = 2";
      $result = $db->query($sql);


        foreach($result as $row) {
    echo $row['category']. '<br />';

        }
      ?></div>
    <!-- *********************************************************************************************************** -->
    <!-- *                                       Quanity                                                           * -->
    <!-- *********************************************************************************************************** -->
    <div id="Qty"><?php $sql = "SELECT * FROM `line_item` WHERE `category_id` = '2' AND `job_number` = 'JOB000083'";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           

        foreach($result as $row) {
    echo $row['item_quanity']. '<br />';

        }
      }?></div>

    <!-- *********************************************************************************************************** -->
    <!-- *                                       Unit                                                      * -->
    <!-- *********************************************************************************************************** -->                                                                

    <div id="Unit"><?php $sql = "SELECT * FROM `line_item` WHERE `category_id` = '2' AND `job_number` = 'JOB000083'";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           

        foreach($result as $row) {
    echo $row['item_unit']. '<br />';

        }
      }?></div>

    <!-- *********************************************************************************************************** -->
    <!-- *                                       Description                                                       * -->
    <!-- *********************************************************************************************************** -->

    <div id="Description"><?php 

     $sql = "SELECT * FROM `line_item` WHERE `category_id` = '2' AND `id` = '7'  ORDER BY `line_des_seq` ASC";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           

        foreach($result as $row) {
    echo $row['line_description']. '<br />';

        }
      }?></div>





    <!-- *********************************************************************************************************** -->
    <!-- *                                                    Category                                             * -->
    <!-- *********************************************************************************************************** -->

    <div id="category"><?php $sql = "SELECT * FROM `category_2` WHERE `category_id` IN(6)";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           


        foreach($result as $row) {
    echo $row['category']. '<br />';

        }
      }?></div>


    <!-- *********************************************************************************************************** -->
    <!-- *                                       Quanity 2                                                         * -->
    <!-- *********************************************************************************************************** -->


    <div id="Qty"><?php $sql = "SELECT * FROM `line_item` WHERE `category_id` = '6' AND `job_number` = 'JOB000083'";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           


        foreach($result as $row) {
    echo $row['item_quanity']. '<br />';

        }
      }?></div>

    <!-- *********************************************************************************************************** -->
    <!-- *                                       Unit 2                                                            * -->
    <!-- *********************************************************************************************************** -->                                                                

    <div id="Unit"><?php $sql = "SELECT * FROM `line_item` WHERE `category_id` = '6' AND `job_number` = 'JOB000083'";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           


        foreach($result as $row) {
    echo $row['item_unit']. '<br />';

        }
      }?></div>





    <!-- *********************************************************************************************************** -->
    <!-- *                                       Description 2                                                     * -->
    <!-- *********************************************************************************************************** -->

    <div id="Description"><?php 

     $sql = "SELECT * FROM `line_item` WHERE `category_id` = '6' AND `id` = '7'  ORDER BY `line_des_seq` ASC";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           


        foreach($result as $row) {
    echo $row['line_description']. '<br />';

        }
      }?></div>


    <!-- *********************************************************************************************************** -->
    <!-- *                                                    Category3                                            * -->
    <!-- *********************************************************************************************************** -->

    <div id="category"><?php $sql = "SELECT * FROM `category_2` WHERE `category_id` IN(11)";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           

        foreach($result as $row) {
    echo $row['category']. '<br />';

        }
      }?></div>  




    <!-- *********************************************************************************************************** -->
    <!-- *                                       Quanity 3                                                         * -->
    <!-- *********************************************************************************************************** -->


    <div id="Qty"><?php $sql = "SELECT * FROM `line_item` WHERE `category_id` = '11' AND `job_number` = 'JOB000083'";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           


        foreach($result as $row) {
    echo $row['item_quanity']. '<br />';

        }
      }?></div>

    <!-- *********************************************************************************************************** -->
    <!-- *                                       Unit 3                                                        * -->
    <!-- *********************************************************************************************************** -->                                                                

    <div id="Unit"><?php $sql = "SELECT * FROM `line_item` WHERE `category_id` = '11' AND `job_number` = 'JOB000083'";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           


        foreach($result as $row) {
    echo $row['item_unit']. '<br />';

        }
      }?></div>

    <!-- *********************************************************************************************************** -->
    <!-- *                                       Description                                                       * -->
    <!-- *********************************************************************************************************** -->

    <div id="Description"><?php 

     $sql = "SELECT * FROM `line_item` WHERE `category_id` = '11' AND `id` = '7'  ORDER BY `line_des_seq` ASC";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();          

        foreach($result as $row) {
    echo $row['line_description']. '<br />';

        }
      }?></div>









      <!-- *********************************************************************************************************** -->
      <!-- *                                                    Category Plumbing                                    * -->
      <!-- *********************************************************************************************************** -->

    <div id="category"><?php $sql = "SELECT * FROM `category` WHERE `category_id` IN(012)";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           

        foreach($result as $row) {
    echo $row['category']. '<br />';

        }
      }?></div>  




    <!-- *********************************************************************************************************** -->
    <!-- *                                         Quanity Plumbing                                                * -->
    <!-- *********************************************************************************************************** -->


    <div id="Qty"><?php $sql = "SELECT * FROM `line_item` WHERE `category_id` = '012' AND `job_number` = 'JOB000083'";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();          


        foreach($result as $row) {
    echo $row['item_quanity']. '<br />';

        }
      }?></div>

    <!-- *********************************************************************************************************** -->
    <!-- *                                       Unit Plumbing                                                     * -->
    <!-- *********************************************************************************************************** -->                                                                

    <div id="Unit"><?php $sql = "SELECT * FROM `line_item` WHERE `category_id` = '012' AND `job_number` = 'JOB000083'";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           

        foreach($result as $row) {
    echo $row['item_unit']. '<br />';

        }
      }?></div>

    <!-- *********************************************************************************************************** -->
    <!-- *                                       Description Plumbing                                              * -->
    <!-- *********************************************************************************************************** -->

    <div id="Description"><?php 

     $sql = "SELECT * FROM `line_item` WHERE `category_id` = '12' AND `id` = '7'  ORDER BY `line_des_seq` ASC";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           

        foreach($result as $row) {
    echo $row['line_description']. '<br />';

        }
      }?></div>









        <!-- *********************************************************************************************************** -->
        <!-- *                                                    Category Electrical                                  * -->
        <!-- *********************************************************************************************************** -->

    <div id="category"><?php $sql = "SELECT * FROM `category` WHERE `category_id` IN(014)";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           

        foreach($result as $row) {
    echo $row['category']. '<br />';

        }
      }?></div>  




    <!-- *********************************************************************************************************** -->
    <!-- *                                       Quanity Electrical                                                * -->
    <!-- *********************************************************************************************************** -->


    <div id="Qty"><?php $sql = "SELECT * FROM `line_item` WHERE `category_id` = '014' AND `job_number` = 'JOB000083'";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();          

        foreach($result as $row) {
    echo $row['item_quanity']. '<br />';

        }
      }?></div>

    <!-- *********************************************************************************************************** -->
    <!-- *                                       Unit Electrical                                                   * -->
    <!-- *********************************************************************************************************** -->                                                                

    <div id="Unit"><?php $sql = "SELECT * FROM `line_item` WHERE `category_id` = '014' AND `job_number` = 'JOB000083'";
      $result = $db->query($sql);


      if($result !== false) {
        $cols = $result->columnCount();           


        foreach($result as $row) {
    echo $row['item_unit']. '<br />';

        }
      }?></div>

    <!-- *********************************************************************************************************** -->
    <!-- *                                       Description Electrical                                            * -->
    <!-- *********************************************************************************************************** -->

    <div id="Description"><?php 

     $sql = "SELECT * FROM `line_item` WHERE `category_id` = '014' AND `id` = '7'  ORDER BY `line_des_seq` ASC";
      $result = $db->query($sql);


      if($result !== false) {

        foreach($result as $row) {
    echo $row['line_description']. '<br />';

        }
      }?></div>
    <div id="grandtotalUpperWrap"></div>
    <div id="grandtotalSpace"></div>
    <div id="grandtotalText">Grand Total:</div>
    <div id="grandtotalamtWrap">
    <div id="grandTotal"><?php 


    $q = $db->query("SELECT * FROM estimate 
                    JOIN client
                    ON estimate.id = client.client_id
                    JOIN job_name
                    ON job_name.id = estimate.id
                    JOIN line_item
                    ON line_item.id = job_name.id
                    JOIN category_2
                    ON category_2.category_id = line_item.category_id
                    WHERE estimate.id = client.client_id
                    ORDER BY line_item.category_id, line_item.line_des_seq");


    $line_description = $q->fetch(PDO::FETCH_ASSOC);


    ?>

    $<?=htmlspecialchars($line_description['grand_total'])?>
    <?php
      //  }
      ?>
      </div>

      </div>

最佳答案

编辑:现在重新开始,我想我知道你想要什么。

1)数据库结构

我在您的数据库中看到了一些设计缺陷,并且某些信息似乎也不太清楚。

客户关系

应该允许客户从您的公司订购不同的工作。也许“简·样品”(Jane Sample)希望在今年冬天重新粉刷窗户,并在今年春天回头修理屋顶。据我所知,您甚至可以拥有像市政厅或大学这样的大客户,同时要处理六份工作。

因此,作业ID不应存储在客户表中。如果是这样,您将无法将一个以上的工作与给定的客户相关联。
这意味着要为回头客注册工作,您将需要覆盖先前的工作参考(在这种情况下,您还可以删除工作表和项目表中的所有工作痕迹,因为这将失去唯一有意义的方式来访问它),或复制客户端(这很愚蠢)。

相反,当前的“ job_name”表应演变为一个“ job table”,您将在其中存储


作业ID作为主键(在当前表中称为“ job_number_id”)
客户ID作为外键
各种其他与工作相关的数据,例如开始日期,姓名等。


作业ID冗余

您当前拥有的job_number和job_number_id似乎代表相同的信息。
它们被复制到3个表中(客户,工作名称和line_item),这总是一件坏事,只有在您没有其他解决方案的情况下才应容忍(这里肯定不是这种情况)。

我的建议是将job_number存储在作业表中,并使用job_number_id(这是作业表的主键)作为其他表中的外键。

尽管这不是绝对强制性的,但我还是建议在line_item表中使用job_number_id代替job_number作为外键(当主键/外键为简单整数时,所有方法都可以更好地工作)。

行??

我将假定该表包含所有作业的详细细分,即完成作业要执行的原子操作。
但是,各种名称都含糊不清,因此必须猜测该表的语义。

类别??

据我所知,category_2表列出了诸如水暖,电力等工作类别。

查看此表的名称,就会想到一些问题:


某处有一个category_1吗?
除此表的记录外,是否可以使用其他标签来标记作业?


我假定必须将每个作业都定义为属于一个类别,因此必须引用该表的一个条目。

_seq ??

我不明白cat_seq和line_des_seq字段的含义。

显然,这是一种排序顺序,但是由什么/谁定义?在哪个场合使用?通过哪些程序修改?

目前,我将完全忽略这些字段。

我强烈建议您重构数据库,因为排序应绑定到有意义的数据集(例如,作业开始/完成日期),而不是硬编码到数据库中的任意排序顺序。

2)初步的哲学

数据库访问

对于许多问题,要尽可能轻松地解决问题,第一步就是选择合适的工具进行工作。

我知道SQL专家会说他们的8种语言奇迹可以解决各种问题,并且可以为您泡一杯咖啡,但是经验(以及80年代后期的数据库和人工智能工程学位)告诉我,否则。


数据库是沉重,繁琐的野兽。使用它们在太阳不发光的人体解剖结构中带来极大的痛苦。
例如,在PHP上,您将不得不在设计良好但不太可靠且受支持程度不高的PDO中进行选择,或者在与底层数据库引擎相对应的术语行中进行选择(mysqli_,sqlite_,您将其命名)。
SQL可能是最冗长,模棱两可和令人费解的编程语言,在2014年的地球上得到了如此广泛的使用。SQL注入是否敲响了警钟?我知道没有其他语言需要外部帮助来阻止12岁的用户从其Web浏览器后面访问密码表。
SQL标准化是一个笑话。从MySQL切换到Oracle或SQLite,您将最终调试和重写一半的查询,因为您在不知不觉中使用了特定于供应商的扩展,或者每个供应商对sacro-sanct SQL92 ISO标准的任何细微变化都有自己的解释(或是SQL:2008还是SQL:2011?还是直接决定支持这种奇妙的丰富语言提供的关键字和语法变体的无限列表的子集。


综上所述,数据库的好处是显而易见的,我对SQL的某些苛刻之言不应该给您对我对开发像DB引擎这样复杂而高效的软件的人们的敬意的错误印象。

除了可以可靠地存储大量结构化数据的明显功能外,当问题出在干草堆中时,即从大量类似数据中检索适量的特定数据时,数据库非常有用。

例如,假设您的公司已经愉快地工作了10年。该数据库将可能包含数百个客户和工作,以及数以万计的工作“行”。
不过,通过一个查询,您将能够检索给定客户所需的六行(假设“简·样品”(Jane Sample)和翻新其威彻斯特租赁办公室所需的6个任务)。

要提取这6行,DB引擎将不得不遍历兆字节的各种记录。
很好,这就是这里的用途,没有其他软件可以做得更好。

但这是有代价的。

现在,如果您循环这种查询(摘自您的示例)

$query = "SELECT * FROM client

                JOIN job_name
                ON client.client_id = job_name.id
                JOIN estimate
                ON job_name.id = estimate.id
                JOIN line_item
                ON estimate.id = line_item.id
                JOIN category_2
                ON category_2.category_id = line_item.category_id                   
           WHERE client.email = '7895@yahoo.com'
           ORDER BY line_item.line_des_seq ASC";


每当您想从草垛中抽出一根稻草时,您都会要求DB引擎浏览这数千条记录。
过度沉迷于此类请求可能会使DB处理时间轻易地增加10或100。

这是对数据库引擎的严重滥用。 Schlemiel the Painter's algorithm的典型示例

乍一看似乎可行,因为您的测试数据库仅包含少量数据。让它在实际条件下增长几年,事情会变得越来越迟钝。

计算机和网络是如此强大,以至于您可能永远都不会注意到它们之间的差异,但这仍然是对CPU,内存和磁盘使用率的极大浪费。

如果放慢速度变得太痛苦了,SQL专家会来建议您迁移到具有三重冗余服务器,负载平衡和惰性缓存的FasterThanLight(r)体系结构(所有这些都是廉价的,因为您必须记住它们)是您的朋友帮您帮个忙吗?但是,尽管如此,您的时间和金钱都将浪费在试图应对根本上有缺陷的软件设计上。

最后但并非最不重要的一点是,如果为用户节省不必要的延迟的可能性以及地球上电力和计算机硬件的浪费不足以使您轻松进行SQL查询,那么我可以向您保证,在PHP中进行等效处理将导致更干净,更易于维护且代码更紧凑。

综上所述,数据库查询应限于检索手头任务所需的最小数据集。
获得所需的信息后,请使用其他工具来完成工作。

使用关联数组

与许多其他语言(perl,python,awk,lisp,javascript和许多我从未尝试过的语言)一样,PHP提供了对关联数组的轻松访问。

这是一种用于整理数据的极富表现力的工具,但是如果您对它不熟悉,我很害怕,那么您将无法阅读本文的其余部分。
因此,如果需要的话,我建议您在继续阅读之前,先祈祷谷歌上帝对您有所启发。

3)编辑工作建议

现在是时候尝试解决您的问题了。

输入参数

我看到您使用客户的电子邮件作为检索要编辑作业的候选关键字。
如前所述,这在概念上是错误的。

假设客户是市政厅,同时进行5种不同的工作。您当前状态的数据库无法支持该信息。

经过适当的数据库修改后,您可以做的是:


从其电子邮件地址中检索客户的ID
检索当前为此客户打开的作业列表
为每个作业打印不同的摘要


现在,我将简化问题,并假设您有一个唯一的职位ID作为您的求职版本页面的输入。

约定

我将假定您已解决上述差异。

我将使用job_number_id作为主要输入。

我将使用语法快捷方式:


$xxx表示一个PHP变量
$xxx = select_one( ... )表示您执行SQL查询并将结果返回到$ xxx


我将使用伪函数:


select_one表示您获得与select子句匹配的firt记录。例如,当您从“客户端”表中获取客户端时,您将仅检索一个客户端。
select表示您从查询中获得多行。例如,与给定作业关联的所谓“行”可能有多个实例。
fetch表示您从select_multiple结果中获得一行。


一条记录将作为关联数组检索。

例如,$job_data = select_one (* FROM Jobs WHERE job_number_id=1)("client_job_name" => "Paint", "job_number" => "JOB000022", etc.)分配给$job_data

我将抛弃参数清理,并省去各种引用,转义等操作。

最后,我假设所有伪PHP代码都将在对象的上下文中运行,所以我认为可以从每个函数访问变量,因为属性可以来自不同的对象方法。

从数据库中获取所需的内容

<?php

function retrieve_proposal_data ($job)
{
    // fetch the current job's data
    $job_data = select_one ("* FROM Jobs WHERE job_number_id=$job");

    // fetch client data
    $client_id = $job_data["client_id"]; // this requires you to fix your database
    $client_data = select_one ("* FROM Client WHERE client_id=$client_id");

    // get the list of the "items" for this job
    $job_items_list = select ("* FROM Items WHERE job_number_id=$job");
    $job_item = array();
    while ($item = fetch ($job_items_list))
    {
        // add one record to the item list
        $job_item[] = $item;
    }

    // get the item category names
    $category_name = Array();
    $categories_list = select ("* FROM category_2");
    while ($category = fetch ($categories_list))
    {
        // build an index of the category names by category id
        /*
         * the "category" field of the "category_2" table should be named "name"
         */
        $category_name [$category["category_id"]] = $category["category"];
    }

    // we're done with the database. You can close the DB connection here
}

?>


在短暂访问数据库夫人之后,我们得到了:


$client_data关联数组中的所有客户信息(名称,地址,电话等)
$job_data关联数组中的所有全局作业信息(名称,标识符等)
$job_item数组中作业项目的未排序列表
$category_name数组中的作业类别列表,由其实际数据库键索引


整理数据

客户和职位信息已准备就绪,可以放入HTML页面中。
唯一需要进一步处理的数据是作业项目列表。

我们要对每个类别下的工作项目进行分组:

<?php
function group_job_items ()
{
    $jobs_by_category = array();
    foreach ($category_name as $category_id => $name)
    {
        foreach ($job_item as $item)
        {
            // skip job items that do not match the current category
            if ($item["category_id"] != $category_id) continue;

            if (!isset ($jobs_by_category[$name])
            {
                // create a list of jobs for the current category
                $jobs_by_category[$name] = array();
            }

            // add the current job item to the current category
            $jobs_by_category[$name][] = $item
        }
    }
}
?>


现在,我们有了按作业类别索引的$jobs_by_category数组,其中包含与给定类别相对应的所有作业项目的列表。

最后,我们进入HTML

放置诸如客户名称或工作名称之类的独特信息是一件小事。只需像在现有代码中那样使用关联数组即可。

显示列表要复杂一些。

我们将从HTML模板开始,以可视化PHP将要生成的内容:

// sample job category
<div class='job_category'>Rough Carpentry</div>

// sample job item
<div class='job_qty'        >1                                  </div>
<div class='job_unit'       >EA                                 </div>
<div class='job_description'>Repair exterior Hip / Common Rafter</div>


div内容将必须由实际数据字段替换。

使用CSS类比使用ID类更合适,因为它允许使用非常简单的CSS文件以相同的方式格式化每个项目。

现在,我们将看一下一般的页面结构:

// company informations (sample)
<div id="estimateWrap">
<div id="bodyWrap">
<div id="header">Company Name</div>
<div id="companyAdd">12345 Main St., Anytown USA 12345</div>
<div id="companyPhone">Phone #: (123) 123-4567</div>

<div id="jobType">
<div class="estimateType">Proposal</div>
</div>

// client information (sample)
<div id="clientnameSpace">Client:</div>
<div id="clientName">
    <?php echo $client_data ['client_fname']." ".$client_data['client_lname']; ?>
</div>

// job item header
<div class='job_qty'        ><b>Qty        </b></div>
<div class='job_unit'       ><b>Unit       </b></div>
<div class='job_description'><b>Description</b></div>

// list of job items grouped by categories
<?php display_job_list(); ?>

// page footer if need be
<p>(c) 2014 kuroi-neko. Send your gifts to ...</p>


最后,PHP函数将输出列表

<?php

// helper function to output a div of a given class with a given contents
function output_div ($class, $contents)
{
    echo "<div class='$class'>$contents</div>";
}

// the main beast
function display_job_list ()
{
    foreach ($jobs_by_category as $category_name => $job_items)
    {
        // display job category
        output_div ('job_category', $category_name);

        // browse through job items
        foreach ($job_items as $item)
        {
            // output the 3 fields of this item
            output_div ('job_qty'        , $item['item_quantity'   ]);
            output_div ('job_unit'       , $item['item_unit'       ]);
            output_div ('job_description', $item['line_description']);
        }
    }
}
?>


而鲍勃是你的叔叔。或者至少应该如此。也许。

关于php - PHP Mysql使用循环和条件语句创建和输出数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20897396/

相关文章:

php - 在 URL 中使用 & 符号

php - 自动缩小和缓存CSS

mysql - 嵌套 JOIN 在 MySQL 中查找具有多个 WHERE 条件的记录

mysql - 试图找到船上最年轻线官的年龄MYSQL

sql - 忽略违反重复键索引的行的插入

java - 问 : How to get key value from a HashMap of a ComboBox and save it to the database

php - laravel 检索值与数据透视表匹配的所有用户

php - 检查值是否已存在不起作用

mysql - MariaDB - 更新/删除无提示失败

mysql - 查找并发日期范围中的差距 - MySQL