在PHP中没有正确显示html标记

时间:2012-01-20 08:53:35

标签: php html tags

$myfile = mysql_query($query_myfile, $db) or die(mysql_error());
$totalRows_myfile = mysql_num_rows($myfile);
$typ_d = '';
$test='';


while ( $row_myfile = mysql_fetch_assoc($myfile) ) 
{
   if ( $typ_d != $row_myfile[ 'typ_d' ] ) 
   {

       $typ_d = $row_myfile[ 'typ_d' ];

       echo "<h2>$typ_d</h2>";

   }
   if ( $test != $row_myfile[ 'test' ] ) 
   {

       $test = $row_myfile[ 'test' ];

       echo "<h3>$test</h3>";
   }

   echo "<li><a href=\"myfileDetail.php?myfile_id=".$row_myfile['myfile_id']. "\">";
   echo $row_myfile['shortname'].' ';
   echo $row_myfile['name']; ?></a></li>

   <?php } ?>

此代码列出了像这样的组和子组中的元素

生成的Typ_d(组)
echo "<h2>$typ_d</h2>";

生成的测试(子组)
echo "<h3>$test</h3>";

然后由

生成的列表
echo "<li><a href=\"myfileDetail.php?myfile_id=".$row_myfile['myfile_id']. "\">";
       echo $row_myfile['shortname'].' ';
       echo $row_myfile['name']; ?></a></li>

我在生成html标签时遇到问题,如下所示

<h2>Typ_d1</h2>
<h3> Test1</h3>
<ul>
  <li> List1</li>
  <li> List2 </li>
  <li>List3 </li>
</ul>
<h2>Typ_d2 </h2>
<h3>Test2</h3>
<ul>
  <li> List1</li>
  <li> List2</li>
  <li> List3</li>
</ul>
<h2> Typ_d3</h2>
<h3> Test3</h3>
<ul>
  <li> List1</li>
  <li> List2 </li>
  <li>List3 </li>
</ul>

我已经尝试过这么多,但我无法通过正确的订单获得它..请帮助

当前输出不是&lt; ul&gt;标签,我想把它放在代码

这是当前的输出

<li> List1</li>
  <li> List2 </li>
  <li>List3 </li>

<h2>Typ_d2 </h2>
<h3>Test2</h3>

  <li> List1</li>
  <li> List2</li>
  <li> List3</li>

<h2> Typ_d3</h2>
<h3> Test3</h3>

  <li> List1</li>
  <li> List2 </li>
  <li>List3 </li>

3 个答案:

答案 0 :(得分:2)

好的,如果没有对代码进行重大重组(例如进入MVC模式),最好先将数据编译成数组,然后循环生成数据以生成输出,就像@Blowski说的那样。像这样:

$myfile = mysql_query($query_myfile, $db) or die(mysql_error());


$groups = array();

while ( $row_myfile = mysql_fetch_assoc( $myfile ) ) {

  $typ_d = $row_myfile[ 'typ_d' ];

  $groups[ $typ_d ][ 'h2' ] = $row_myfile[ 'typ_d' ];

  $groups[ $typ_d ][ 'h3' ] = $row_myfile[ 'test' ];

  $groups[ $typ_d ][ 'files' ][] = <<<DOCHERE
<li>
<a href="myfileDetail.php?myfile_id="{$row_myfile[ 'myfile_id' ]}">{$row_myfile[ 'shortname' ]} {$row_myfile[ 'name' ]}</a>
</li>
DOCHERE;

}
// while


foreach ( $groups as &$group ) {

  $group[ 'files' ] = join( "\n\n", $group[ 'files' ] );

  $group = <<<DOCHERE
<h2>
{$group[ 'h2' ]}
</h2>

<h3>
{$group[ 'h3' ]}
</h3>

<ul>

{$group[ 'files' ]}

</ul>
DOCHERE;

}
// foreach


echo join( "\n\n\n", $groups );

注意:

  • 在以HTML格式输出变量值之前,几乎可以肯定是html转义变量值。

  • 我已经消除了HTML输出生成的丑陋连接,并将其替换为变量插值。

  • 我已经消除了HTML输出字符串的不明智的双引号,而是使用HEREDOC代替。

  • 有关如何执行此操作的详细信息有很多变化,例如:在while循环中调用array_key_exists(),而不是每次只重新分配h2h3个键,通过引用分配$groups[ $typ_d ]以缩短其他赋值语句等。< / p>

答案 1 :(得分:1)

正如@jit指出的那样,你没有在任何地方回显<ul>标签。代码的结构使这有点困难。

沿着MVC设计模式重构代码:

  1. 模型运行数据库查询并将结果分配给数组。
  2. 控制器获取该查询的结果并将其传递给视图。
  3. 一个视图具有格式良好的HTML,只有简单的PHP语句。
  4. 视图会做类似的事情(显然,你需要根据自己的需要进行格式化):

    <?php if($type1 == $row->getType() ?><h2><?php echo $type1 ?></h2><?php endif ?>
    <h3><?php echo $type2 ?></h2>
    <ul>
    <?php foreach($results as $row) : ?>
      <li><a href="<?php echo $row->getLink() ?>"><?php echo $row->getText() ?></a></li>
    <?php endforeach ?>
    </ul>
    

    此方法的一些好处是您的数据库查询更具可重用性,输出HTML更易于阅读和编辑。

答案 2 :(得分:0)

在每个echo语句的末尾使用<br/>