简体   繁体   English

PHP的回声不打印出数据

[英]php echo not printing out data

I am using jQuery UI tabs to make a dynamic tabs using php and mysql. 我正在使用jQuery UI选项卡使用php和mysql创建动态选项卡。 My php code below get the data from the mysql database and display it out. 我下面的PHP代码从mysql数据库中获取数据并显示出来。

Normally the html code will look like: 通常,html代码如下所示:

<div id="featured" >  
    <ul class="ui-tabs-nav">  
        <li class="ui-tabs-nav-item ui-tabs-selected" id="nav-fragment-1"><a href="#fragment-1"><img src="images/image1-small.jpg" alt="" /><span>15+ Excellent High Speed Photographs</span></a></li>  
        <li class="ui-tabs-nav-item" id="nav-fragment-2"><a href="#fragment-2"><img src="images/image2-small.jpg" alt="" /><span>20 Beautiful Long Exposure Photographs</span></a></li>  
        <li class="ui-tabs-nav-item" id="nav-fragment-3"><a href="#fragment-3"><img src="images/image3-small.jpg" alt="" /><span>35 Amazing Logo Designs</span></a></li>  
        <li class="ui-tabs-nav-item" id="nav-fragment-4"><a href="#fragment-4"><img src="images/image4-small.jpg" alt="" /><span>Create a Vintage Photograph in Photoshop</span></a></li>  
    </ul>  
    <!-- First Content -->  
    <div id="fragment-1" class="ui-tabs-panel" style="">  
        <img src="images/image1.jpg" alt="" />  
        <div class="info" >  
        <h2><a href="#" >15+ Excellent High Speed Photographs</a></h2>  
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla tincidunt condimentum lacus. Pellentesque ut diam....<a href="#" >read more</a></p>  
        </div>  
    </div>  
    <!-- Second Content -->  
    <div id="fragment-2" class="ui-tabs-panel ui-tabs-hide" style="">  
        <img src="images/image2.jpg" alt="" />  
        <div class="info" >  
        <h2><a href="#" >20 Beautiful Long Exposure Photographs</a></h2>  
        <p>Vestibulum leo quam, accumsan nec porttitor a, euismod ac tortor. Sed ipsum lorem, sagittis non egestas id, suscipit....<a href="#" >read more</a></p>  
        </div>  
    </div>  
    <!-- Third Content -->  
    <div id="fragment-3" class="ui-tabs-panel ui-tabs-hide" style="">  
        <img src="images/image3.jpg" alt="" />  
        <div class="info" >  
        <h2><a href="#" >35 Amazing Logo Designs</a></h2>  
        <p>liquam erat volutpat. Proin id volutpat nisi. Nulla facilisi. Curabitur facilisis sollicitudin ornare....<a href="#" >read more</a></p>  
        </div>  
    </div>  
    <!-- Fourth Content -->  
    <div id="fragment-4" class="ui-tabs-panel ui-tabs-hide" style="">  
        <img src="images/image4.jpg" alt="" />  
        <div class="info" >  
        <h2><a href="#" >Create a Vintage Photograph in Photoshop</a></h2>  
        <p>Quisque sed orci ut lacus viverra interdum ornare sed est. Donec porta, erat eu pretium luctus, leo augue sodales....<a href="#" >read more</a></p>  
        </div>  
    </div>  
</div>  

And i am using php to dynamically echo out the html : 而且我正在使用php动态地回显html:

<div id="featured" >
<ul class="ui-tabs-nav">
<?php
    $count = 0; // Initialize counter
    $rows = array();
    while($row = mysql_fetch_array( $query )) {
        $rows[] = $row;
        $count = ++$count;
        echo "<li class='ui-tabs-nav-item ui-tabs-selected' id='nav-fragment-" . $count . "'><a href='#fragment-" . $count . "'><img class='thumb' src='$row[imagelink]' alt='' /><span>$row[title]</span></a></li>\n";
}
?>
</ul>
<?php

    $count2 = 0; // Initialize counter
    $rows2 = array();
    while($row2 = mysql_fetch_array( $query )) {
        $rows2[] = $row2;
        $count2 = ++$count2;
        echo "<div id='fragment-" . $count2 . "' class='ui-tabs-panel' style=''>\n";
        echo "<img src='$row[imagelink]' alt='' />\n";
        echo "<div class='info' ><h2><a href='$row[link]'>$row[title]</a></h2><p>$row[description]</p></div>\n";
    }

?>
</div>

However, it only generates the li(tabs) and not the fragments(the content). 但是,它仅生成li(制表符),而不生成片段(内容)。

What's my problem here? 我这是什么问题

Your problem is that your $query (MySQL result object) reaches the end of the result rows, and then your second loop will not start over from the beginning. 您的问题是$ query(MySQL结果对象)到达结果行的末尾,然后您的第二个循环将不会从头开始。

This should solve the problem: http://www.krio.me/loop-twice-through-a-php-mysql-result-set/ 这应该可以解决问题: http : //www.krio.me/loop-twice-through-a-php-mysql-result-set/

However, I would suggest something closer to creating your own temporary PHP variable to store all the data in and use that to loop over it the first and second time. 但是,我建议您更接近于创建自己的临时PHP变量来存储所有数据,并使用它们来进行第一次和第二次循环。 Just a suggestion. 只是一个建议。

I do not know the performance of the data seek method described in the website linked above. 我不知道上面链接的网站中描述的数据查找方法的性能。

EDIT: You are already storing the data in the $rows variable. 编辑:您已经将数据存储在$ rows变量中。 In your second loop, loop through the $rows variable instead of using the mysql_fetch_array function. 在第二个循环中,循环遍历$ rows变量,而不要使用mysql_fetch_array函数。

Code Added (did not test, but should give you a good idea): 已添加代码(未进行测试,但应该可以为您提供一个好主意):

<div id="featured" >
<ul class="ui-tabs-nav">
<?php
    $count = 0; // Initialize counter
    $rows = array();
    while($row = mysql_fetch_array( $query )) {
        $rows[] = $row;
        $count = ++$count;
        echo "<li class='ui-tabs-nav-item ui-tabs-selected' id='nav-fragment-" . $count . "'><a href='#fragment-" . $count . "'><img class='thumb' src='$row[imagelink]' alt='' /><span>$row[title]</span></a></li>\n";
}
?>
</ul>
<?php

    $count2 = 0; // Initialize counter
    $rows2 = array();
    foreach($rows as $row2) {
        $count2 = ++$count2;
        echo "<div id='fragment-" . $count2 . "' class='ui-tabs-panel' style=''>\n";
        echo "<img src='$row[imagelink]' alt='' />\n";
        echo "<div class='info' ><h2><a href='$row[link]'>$row[title]</a></h2><p>$row[description]</p></div>\n";
    }
?>
</div>

just change your 只是改变你的

while($row2 = mysql_fetch_array( $query )) {

to

foreach($rows as $row2) {

However, here is a better version of your code 但是,这是代码的更好版本

First, get your data into array. 首先,将数据放入数组。 Do it near the place where you run your query. 在您运行查询的地方附近做。 Keep all SQL operations in one place. 将所有SQL操作放在一个位置。 And do not mix them with HTML operations! 并且不要将它们与HTML操作混用!

$count = 0; // Initialize counter
$rows = array();
while($row = mysql_fetch_array( $query )) {
    $rows[++$count] = $row;
}

Then move to HTML operations: 然后转到HTML操作:

<div id="featured" >
<ul class="ui-tabs-nav">
<?php foreach($rows as $count => $row): ?>
<li class='ui-tabs-nav-item ui-tabs-selected' id='nav-fragment-<?=$count?>'>
  <a href='#fragment-<?=$count?>'>
    <img class='thumb' src='<?=$row['imagelink']?>' alt='' />
    <span><?=$row['title']?></span>
  </a>
</li>
<?php endforeach ?>
</ul>
<?php foreach($rows as $count => $row): ?>
<div id='fragment-<?=$count?>' class='ui-tabs-panel' style=''>
  <img src='<?=$row[imagelink]?>' alt='' />
  <div class='info' >
    <h2><a href='<?=$row['link']?>'><?=$row['title']?></a></h2>
    <p><?=$row['description']?></p>
  </div>
</div>
<?php endforeach ?>

See how it become concise and at the same time keeps all HTML as is. 看看它如何变得简洁,同时保持所有HTML不变。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM