HTML-тег не отображается должным образом в PHP - PullRequest
0 голосов
/ 20 января 2012
$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>

Я так много пытался, но я не могу получить его с правильным заказом .. нужна помощь, пожалуйста

текущий вывод не имеет тега <<code>ul>, и я хотел бы поместить его в сторону кода

это токовый выход

<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 ]

2 голосов
/ 20 января 2012

Хорошо, не делая серьезной реструктуризации вашего кода (например, в шаблон 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 s.

  • Существует множество вариантов деталей того, как вы можете это сделать, например, вызывайте array_key_exists() в цикле while вместо простого повторного назначения клавиш h2 и h3 каждый раз, присваивайте $groups[ $typ_d ] по ссылке для сокращения других операторов присваивания и т. д.

1 голос
/ 20 января 2012

Как указывал @jit, вы нигде не повторяете тег <ul>. Структура вашего кода делает это немного сложным.

Перестройте ваш код в соответствии с шаблоном проектирования MVC:

  1. Модель запускает запрос к базе данных и присваивает результаты массиву.
  2. Контроллер получает результаты этого запроса и передает их в представление.
  3. Представление имеет красиво отформатированный HTML с простыми инструкциями PHP.

Вид будет выглядеть примерно так (очевидно, вам нужно отформатировать в соответствии с вашими потребностями):

<?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-код намного легче читать и редактировать.

0 голосов
/ 20 января 2012

Используйте <br/> в конце каждого эхо-оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...