首页 > 解决方案 > 如何修复“while”循环和 php 构建仅在 HTML 表中显示一个结果的 HTML 表以及没有 HTML 表的所有其他结果

问题描述

我使用“while”循环遍历我的 PDO 数据库结果,并且只要结果存在,我就使用 PHP 构建 HTML 表。当查询返回数据时,PHP 代码只会将一个结果放在 HTML 表格中,而其他所有内容都放在表格格式之外。我的代码中缺少什么?

我已经将我的表格编码移到了我的 while 循环的内部和外部。我尝试在 while 循环中嵌入一个 foreach 循环,但它只返回每个结果的 11 个,并且仍然只有一个 HTML 表格格式。

<?php 

public static function find_members() {

  /* -------------BEGIN PDO-----------*/
  if (!extension_loaded ('PDO' )) {
      echo 'PDO is NOT loaded!'."\n";
      if (!extension_loaded('pdo_mysql')){
          echo 'PDO mysql driver is NOT loaded.'."\n";
      }
  }
  try {
            // calling stored procedure command
          $sql = 'CALL `Members`()'; 
          //$sql = "SELECT * FROM members";

          // prepare for execution of the stored procedure
          $stmt = self::$database->prepare($sql);

        // execute the stored procedure
          $stmt->execute();

        if ($stmt->rowCount() > 0) {

      echo     "<table class='membertable'>";
      echo "<thead>" . "header for table" ."</thead>";

            while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

              $mejpeg = $row['photojpeg'];
              $email = $row['me_email'];
              $name = $row['me_name'];


              echo "<tbody>";
              echo "<tr>";
              echo "<td>
              {$name}<br />
               {$email }<br />
              </td>";
              echo "<td>". '<img src="data:image/jpeg;base64, ' .base64_encode($mejpeg). ' " height="120" width="" />'."</td>";
              echo "</tboby>";
              echo "</tr>";
              echo "<tfoot>";
                echo "<tr>";
                  echo "<td>"."</td>";
                echo "</tr>";
              echo "</tfoot>";
              echo "</table>";

         }} else {
            echo "0 results";
              }

      } catch (PDOException $e) {
          die("Error occurred:" . $e->getMessage());
      }
      return null;

}
?>

在结果网页上调用:

<?php $mbs = array(memberPage::find_members()); foreach($mbs as $mb) { echo $mb;} ?>

我希望 php 代码为每个结果构建表。但是,实际结果是只有第一条记录使用表格标签格式化,而其他结果没有表格标签。

我的最终解决方案

PHP代码:

<?php 

public static function find_members() {

  /* -------------BEGIN PDO-----------*/
  if (!extension_loaded ('PDO' )) {
      echo 'PDO is NOT loaded!'."\n";
      if (!extension_loaded('pdo_mysql')){
          echo 'PDO mysql driver is NOT loaded.'."\n";
      }
  }
  try {
            // calling stored procedure command
          $sql = 'CALL `Members`()'; 
          //$sql = "SELECT * FROM members";

          // prepare for execution of the stored procedure
          $stmt = self::$database->prepare($sql);

        // execute the stored procedure
          $stmt->execute();

        if ($stmt && $stmt->rowCount() > 0) {

/*INSTEAD OF ECHOING TABLES, I AM ECHOING <div> TAGS*/

      echo '<div class="head"><h2>Title of query results will go here</h2></div><div class="content">';

            while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

              $mejpeg = $row['photojpeg'];
              $email = $row['me_email'];
              $name = $row['me_name'];


              echo '<div id="info">' .
              '<img src="data:image/jpeg;base64, ' . base64_encode($mejpeg) . ' " class="textwrap" />' .

              $name<br /> .
               $email<br /> .
              '</div>';



      }
 echo '</div>';

             }} else {
                echo "0 results";
                  }

      } catch (PDOException $e) {
          die("Error occurred:" . $e->getMessage());
      }
      return null;

}
?>

然后我的网页 HTML/PHP 用于主 DIV search.php

<div class="members">

<h2 class="hidden">members</h2>


<?php $mbs = array(memberPage::find_members()); foreach($mbs as $mb) { echo $mb;} ?>


</div>

然后我通过 CSS 管理网页的输出

@charset "utf-8";
/* CSS Document */
* {
    margin: 0;
    padding: 0;
}
/*This <div class="members"></div> is already on the webpage and not being echoed from php everything below is called between the open and closing tag*/
.members {
display: grid;
grid-template-columns: auto;
grid-gap: 20px 50px;
grid-template-areas:
"head"
"content";

}

.head {
grid-area: head;
display: grid;
margin-top: 20px;
text-align: center;
}

.content {
 grid-area: content;
 display: grid;
 grid-template-columns: auto auto auto;
 margin-left: 10px;
 margin-right: 10px;
 grid-column-start: 1;
 grid-column-end: 2;
 grid-row-gap: 10px;
 grid-column-gap: 10px;
}

#info {
outline: solid;
}

 .textwrap {
   float: left;
   margin: 1px;
   position: relative;
   width:  auto;
   height: 160px;
   background-position: 50% 50%;
   background-repeat:   no-repeat;
   background-size:     cover;
     }

.info{
 grid-area: info;
}

.photo {
 grid-area: photo;
}

.hidden {
    display: none;
}

最终输出循环遍历结果并将结果显示在带有样式的网页上。它比使用表格更容易、更灵活。

标签: phphtmlmysql

解决方案


试试这个,从函数返回数据的正确方法。

<?php
public static function find_members()
{
    /* -------------BEGIN PDO-----------*/
    if (!extension_loaded('PDO')) {
        echo 'PDO is NOT loaded!' . "\n";
        if (!extension_loaded('pdo_mysql')) {
            echo 'PDO mysql driver is NOT loaded.' . "\n";
        }
    }

    try {

        // calling stored procedure command

        $sql = 'CALL `Members`()';

        // $sql = "SELECT * FROM members";
        // prepare for execution of the stored procedure

        $stmt = self::$database->prepare($sql);

        // execute the stored procedure

        $stmt->execute();
        if ($stmt->rowCount() > 0) {
            $returnDataOutter[] = "<table class='membertable'>";
            $returnDataOutter[] = "<thead>" . "header for table" . "</thead>";
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                $mejpeg = $row['photojpeg'];
                $email = $row['me_email'];
                $name = $row['me_name'];
                $returnData = "<tbody>";
                $returnData.= "<tr>";
                $returnData.= "<td>
              {$name}<br />
               {$email}<br />
              </td>";
                $returnData .= "<td>" . '<img src="data:image/jpeg;base64, ' . base64_encode($mejpeg) . ' " height="120" width="" />' . "</td>";
                $returnData .= "</tr>";
                $returnData .= "</tboby>";
                $returnData .= "<tfoot>";
                $returnData .= "<tr>";
                $returnData .= "<td>" . "</td>";
                $returnData .= "</tr>";
                $returnData .= "</tfoot>";
                $returnData .= "</table>";

                $returnDataOutter[] = returnData;
            }
        } else {
            $returnDataOutter[] = "0 results";
        }

        return $returnDataOutter;
    }

    catch(PDOException $e) {
        die("Error occurred:" . $e->getMessage());
    }

    return [];
}

?>

在结果网页上调用:

<?php $mbs = array(memberPage::find_members()); foreach($mbs as $mb) { echo $mb;} ?>

推荐阅读