2016-09-23 109 views
-1

它显示六个帖子,我的数据库中有6个项目。问题在于它只显示第一个,并重复五次。这是我第一次编写PHP,所以请不要太熟悉术语!为什么我的PHP while循环重复相同的数据库结果?

<?php 

    $pagetitle = "My Portfolio | Projects"; 

    $header = $_SERVER['DOCUMENT_ROOT']; 
    $header .= "/includes/header.php"; 
    include_once($header); 

    $sql="SELECT * FROM projects ORDER BY job DESC"; 
    $sql_query=mysql_query($sql); 
    $post = mysql_fetch_array($sql_query); 
    $job = $post['job']; 
    $category = $post['category']; 
    $title = $post['title']; 
    $inside = $post['imageinside']; 
    $outside = $post['imageoutside']; 
    $body = $post['body']; 
    $description = $post['description']; 

?> 


      <!-- Blog - Start --> 
      <?php do {?> 
      <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 blog blog_altered blog_left"> 
       <div class="row"> 
        <!-- Blog Image - Start --> 
        <div class=" col-lg-6 col-md-6 col-sm-10 col-xs-12 pic inviewport animated delay1" data-effect="fadeIn"> 
         <img alt="blog-image" class="img-responsive" src="<?php echo "$outside" ?>"> 
        </div> 
        <!-- Blog Image - End --> 
        <!-- Blog Info - Start --> 
        <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 inviewport animated delay1" data-effect="fadeIn"> 
         <div class="info"> 
          <span class="date"><?php echo "$category" ?></span> 
          <h4 class="title"><a href="<?php echo "$job" ?>.php"><?php echo "$title" ?></a></h4> 
          <p><?php echo "$description" ?></p> 
          <a class="btn btn-primary text-on-primary" href="<?php echo "$job" ?>.php">Read More</a> 
         </div> 
        </div> 
        <!-- Blog Info - End --> 
       </div> 
      </div> 
      <?php } while ($post = mysql_fetch_array($sql_query)) ?> 
      <!-- Blog - End --> 
+0

使用While循环FOR ALL抵达。 – devpro

+0

使用while循环代替while循环。并且不要使用mysql开始使用mysql。* apis – Bhavin

回答

2

这是因为您已经将它分配到脚本的顶部并稍后使用这些变量。所以下一次你通过的时候,它不会使用刚提取的数据,而只是从以前设置的代码中获取数据。

简单地摆脱这个部分

$post = mysql_fetch_array($sql_query); 
$job = $post['job']; 
$category = $post['category']; 
$title = $post['title']; 
$inside = $post['imageinside']; 
$outside = $post['imageoutside']; 
$body = $post['body']; 
$description = $post['description']; 
你做,而

更改为“正常”,而循环,并更改HTML位里面的变量后的。 因此<?php echo "$category" ?><?php echo "$post['category']" ?>

所以说,你需要这个才能让这部分工作。但是,最好是使用while循环,而不是do,while。它们之间的区别在于,while循环只有在传递给循环的数据实际上持有某些东西时才会执行。尽管会一直执行,然后在你的时间内检查有效的东西。所以当数据库没有结果时,html块仍然会打印一次。

你也可以考虑使用mysqli或者pdo进行数据库连接。 mysql不再是首选的方式(从5.5开始不推荐使用,并在php 7中删除)

最后,如果您打算只使用关联密钥,则可以使用mysql_fetch_assoc

+0

谢谢!这工作! –

1
<?php 

    $pagetitle = "My Portfolio | Projects"; 
    $header = $_SERVER['DOCUMENT_ROOT']; 
    $header .= "/includes/header.php"; 
    include_once($header); 
    $sql="SELECT * FROM projects ORDER BY job DESC"; 
    $sql_query=mysql_query($sql); 

?> 


     <!-- Blog - Start --> 
     <?php while ($post = mysql_fetch_array($sql_query){ 
$job = $post['job']; 
$category = $post['category']; 
$title = $post['title']; 
$inside = $post['imageinside']; 
$outside = $post['imageoutside']; 
$body = $post['body']; 
$description = $post['description']; 

     ?> 
     <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 blog blog_altered blog_left"> 
      <div class="row"> 
       <!-- Blog Image - Start --> 
       <div class=" col-lg-6 col-md-6 col-sm-10 col-xs-12 pic inviewport animated delay1" data-effect="fadeIn"> 
        <img alt="blog-image" class="img-responsive" src="<?php echo "$outside" ?>"> 
       </div> 
       <!-- Blog Image - End --> 
       <!-- Blog Info - Start --> 
       <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 inviewport animated delay1" data-effect="fadeIn"> 
        <div class="info"> 
         <span class="date"><?php echo "$category" ?></span> 
         <h4 class="title"><a href="<?php echo "$job" ?>.php"><?php echo "$title" ?></a></h4> 
         <p><?php echo "$description" ?></p> 
         <a class="btn btn-primary text-on-primary" href="<?php echo "$job" ?>.php">Read More</a> 
        </div> 
       </div> 
       <!-- Blog Info - End --> 
      </div> 
     </div> 
     <?php }) ?> 
     <!-- Blog - End --> 
+0

第二个支架? '})' – devpro

1

您正在设置用于在循环外显示的变量。他们被设置为第一个结果,并且在之后不会改变。

你应该做这样的事情instaed:

<?php 
    $sql_query=mysql_query($sql); 

    while ($post = mysql_fetch_array($sql_query)) 
    { 
     $job = $post['job']; 
     $category = $post['category']; 
     $title = $post['title']; 
     $inside = $post['imageinside']; 
     $outside = $post['imageoutside']; 
     $body = $post['body']; 
     $description = $post['description']; 


     echo '....'; 
     echo $job; 
     // or directly 
     echo $post['job']; 
    } 
?>