如何在mysql查询的网页上显示多条记录?

时间:2015-06-09 22:28:17

标签: php mysql

我知道这是一个愚蠢的问题,我已经尝试过查看其他答案,但它们并不适合我。我已经接管了维护一个包含大量预先存在的代码的网站,并且需要添加一个新的查询。

我设法让查询工作并显示在网页中,但只显示第一条记录。我知道我错过了循环函数,但我无法弄清楚如何将它添加到函数中以便显示所有记录。

我已经和他斗争了好几个小时了,非常感谢一些指点!

这是主list.php文件中的代码 - 第一个查询是预先存在的,新查询是以getFeedback过程开头的“$ sql2 =”CALL sp_GetFeedback(“。$ listing ['unique_listing_id']。 “)”;”。

    if(($PMDR->get('Authentication')->checkPermission('admin_view_real_prices')) || ($PMDR->get('Session')->get('user_id'))) {

$admin_user_can_view_prices = true;


$template_content->set('admin_user_can_view_prices',$admin_user_can_view_prices);

$sql = "CALL sp_Entertainers_Contact_Info(".$listing['unique_listing_id'].")";

//all variables come from db.php
$mysqli = new mysqli($dbserver, $dbuser, $dbpass, $dbnameaf);

$rs = $mysqli->query($sql);
while($row = $rs->fetch_assoc())
{      
  $template_content->set('primaryEmail',$row['PrimaryEmail']);
  $template_content->set('secondaryEmail',$row['SecondaryEmail']);
  $template_content->set('cellPhone',$row['CellPhone']);
  $template_content->set('homePhone',$row['HomePhone']);
  $template_content->set('alternatePhone',$row['AlternatePhone (Please Specify)']);
  $template_content->set('streetAddress',$row['StreetAddress']);
  $template_content->set('entertainerCity',$row['City']);
  $template_content->set('entertainerState',$row['State']);
  $template_content->set('entertainerZip',$row['Zip']);
  $template_content->set('entertainerNotes',$row['Note']);     
}
  $data = "";
  $griddata = "";
  $grid = "";
  $entertainerid = $_POST['unique_listing_id'];

  $mysqli = new mysqli($dbserver, $dbuser, $dbpass, $dbnameaf);

  $sql2 = "CALL sp_GetFeedback(".$listing['unique_listing_id'].")";

  $rs = $mysqli->query($sql2);
  $numrows = mysqli_num_rows($rs)." Rows";
  while($row = $rs->fetch_assoc()) {
      $allRows[] = $row;
          $style = ($altRowCount % 2 == 0 ? ' class="row" ' : ' class="row tdg" ');

      $template_content->set('eventID',$row['EventID']);
            $template_content->set('dateOfEvent',$row['DateOfEvent']);
      $template_content->set('clientFollow',$row['ClientFollowUp']);
      $template_content->set('performerFollow',$row['PerformerFollowUp']);


   $griddata .= "
      <div $style>
        <div class='col-xs-2 col-sm-2 col-md-2' onclick=\"popupEvent('".$row['EventID']."')\">".$eventID."</div>
        <div class='col-xs-2 col-sm-2 col-md-2'>".$dateOfEvent."</div>
        <div class='col-xs-4 col-sm-4 col-md-4'>".$clientFollow."</div>
        <div class='col-xs-4 col-sm-4 col-md-4'>".$performerFollow."</div>
      </div>
    ";

    $altRowCount = $altRowCount + 1;
  }
  $mysqli->close();

  $grid = "
    <div style='max-height: 110px; overflow: scroll;'>
      <table class='fancygrid'>
        <tbody>
        ".$griddata."
        </tbody>
      </table>
    </div>
    <!-- <div style='width: 100%; font-weight: bold; color: red;'>".$numrows."</div> -->
  ";  
    echo $gridHeader.$grid;

} //getEntertainerFeedback

} // is an office user logged in? -- end

以下是包含该网页HTML的附带listing.tpl文件中的代码:

         <div class="row">
        <div class='col-xs-2 col-sm-2 col-md-2' onclick="popupEvent(".$row['eventID'].")"><?php echo $eventID ?></div>
        <div class='col-xs-2 col-sm-2 col-md-2'><?php echo $dateOfEvent ?></div>
        <div class='col-xs-4 col-sm-4 col-md-4'><?php echo $clientFollow ?></div>
        <div class='col-xs-4 col-sm-4 col-md-4'><?php echo $performerFollow ?></div>
      </div>

我尝试添加

<?php
        foreach ($allRows as $row) {
    ?>

          <?php  }  ?>

围绕上面的html代码,但这根本不会导致任何记录显示,甚至不会显示。

由于您必须登录才能查看此数据,因此无法共享该链接,但是蓝色登录区域的内容与蓝色框底部显示的一条记录相似: webpage screen capture

ETA:仅供参考 - 我也试过在我的HTML代码中回显.grid - 但这根本没有给我带来结果,不知道为什么。

任何帮助指出我正确的方向或告诉我我缺少的东西都非常感谢!!

谢谢!

1 个答案:

答案 0 :(得分:2)

首先,您已经打开了两次数据库连接

$data = "";
$griddata = "";
$grid = "";
$entertainerid = $_POST['unique_listing_id'];

# remove this line, just to be sure it doesn't cause any problems
$mysqli = new mysqli($dbserver, $dbuser, $dbpass, $dbnameaf);

$sql2 = "CALL sp_GetFeedback(".$listing['unique_listing_id'].")";

其次,通过在while循环中打印一些东西来调试你的查询结果,只是为了确保查询返回多行作为结果

我应该尝试的最后一件事是在你的while循环之前将$ allRows声明为一个数组,只是为了安全

 $allRows = array();
  while($row = $rs->fetch_assoc()) {
      $allRows[] = $row;

然后尝试这种方法

  <?php
      foreach ($allRows as $row) {
      ?>
     <!-- HTML -->
      <?php  }  ?>

修改 这看起来像某种View对象,所以你有预定义的HTML代码,你只需用数据库中的值填充它,所以我认为你的while语句在每个循环中覆盖你视图中的值,这就是为什么你可能得到一个记录。您的视图可能设计为包含一行/数据

  $template_content->set('eventID',$row['EventID']);
  $template_content->set('dateOfEvent',$row['DateOfEvent']);
  $template_content->set('clientFollow',$row['ClientFollowUp']);
  $template_content->set('performerFollow',$row['PerformerFollowUp']);