如何阻止回声显示两次相同的东西?

时间:2011-07-25 19:36:16

标签: php html

我有一个函数,显示使用echo在循环中运行的几个div,但是当我把函数放入其中时,在表格单元格中显示我想要的信息,但也在表格旁边

这是我的代码

function getTestRows($appName)
{
    $implodeArray =array();
    $testsql = "SELECT DISTINCT app_instance_name FROM application_instances WHERE application_name ='$appName' AND environment = 'test' ";
    $testres = mysql_query($testsql);
    if(mysql_num_rows($testres) >=1)
    {
        while($test = mysql_fetch_array($testres))
        {
            echo("<div>".$test['app_instance_name']."</div>");
        }
    }
    else
    {
         echo("<span>No results found</span>");
    }
} 

和显示它的回声......

echo("<table id='ver-zebra' style='display: inline-table;'>
<colgroup>
    <col class='vzebra-odd' />
    <col class='vzebra-even'/>
</colgroup>
<thead>
    <th id='appNameHead' OnMouseOver=\"this.style.cursor='pointer';\"  onclick=\"openIndiv('$tmp[0]');\">
        $tmp[0]
    </th>
</thead>
<tbody>
    <tr>
        <th scope='col' id='test'>
        Test
        </th>
    </tr>
    <tr>
<td>
<div style='width: 300px; height: 100px; overflow: auto;'>");
getTestRows($tmp[0]);
echo("</div>
</td>
</tr>

enter image description here

2 个答案:

答案 0 :(得分:2)

当你调用echo时,会立即将其放入响应中。让getTestRows()返回一个代替您的HTML的字符串:

function getTestRows($appName)
{
    $ret = '';
    $implodeArray =array();
    $testsql = "SELECT DISTINCT app_instance_name FROM application_instances WHERE application_name ='$appName' AND environment = 'test' ";
    $testres = mysql_query($testsql);
    if(mysql_num_rows($testres) >=1)
    {
        while($test = mysql_fetch_array($testres))
        {
            $ret .= "<div>".$test['app_instance_name']."</div>";
        }
    }
    else
    {
         $ret .= "<span>No results found</span>";
    }
    return $ret;
} 

答案 1 :(得分:2)

不要使用echo(或print)输出大块文本。退出PHP模式(?>)并输出原始HTML要容易得多。如果你必须在PHP中做大块文本,至少使用HEREDOC。它们的行为与双引号字符串完全相同,但不要使用引号作为分隔符,因此当您不希望它们被视为变量时,您不必转义任何除$符号外的任何内容。