Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: CONCAT_WS и <br>
 
 автор: Лена   (06.07.2009 в 16:48)   письмо автору
 
 


<?php
        $sql 
"SELECT CONCAT_WS('<br>',td.name,n.title) AS book_name, n.nid nnid, td.tid 
tt, th.parent tp
                FROM {node} n
                JOIN {term_node} tn ON tn.nid=n.nid
                JOIN {term_data} td ON td.tid = tn.tid
                JOIN {term_hierarchy} th ON td.tid = th.tid
                WHERE td.vid=%d AND th.parent <>0 AND n.type='library'"
;
?>


У меня сейчас на страницу выводится <br>, он не меняется на разрыв строки:
Запись1<br>запись 2

А надо, чтобы было так:
Запись1
Запись2
Как убрать <br>?

  Ответить  
 
 автор: Trianon   (06.07.2009 в 20:30)   письмо автору
 
   для: Лена   (06.07.2009 в 16:48)
 

здесь нет никакого вывода.
Только текст SQL-запроса.

Если впоследствии текст передается кодами html, имеет смысл поставить CONCAT_WS("\r\n", a, b)
Или что то же самое, но понятней - CONCAT(a, "\r\n", b)

  Ответить  
 
 автор: Лена   (06.07.2009 в 23:20)   письмо автору
 
   для: Trianon   (06.07.2009 в 20:30)
 

У меня что-то ни первый вариант не работает, ни второй. Два столбца, которые получаются в результате выборки из базы, выводятся в одну строку.
Смотрите, вот вся функция, она небольшая:

<?php
function new_book_block($op='list'$delta=0) {
//админ-часть блока
 
if($op=='list'){
  
$block["info"] = t("Book");
  return 
$block;
 }
  
//контент блока
  
else if ($op == 'view') {
  
$block = array();
        
$sql "SELECT CONCAT(td.name,'\r\n',n.title) AS book_name, n.nid nnid, td.tid tt, th.parent tp
                FROM {node} n
                JOIN {term_node} tn ON tn.nid=n.nid
                JOIN {term_data} td ON td.tid = tn.tid
                JOIN {term_hierarchy} th ON td.tid = th.tid
                WHERE td.vid=%d AND th.parent <>0 AND n.type='library'"
;
         
         
$result db_query_range($sql,9,0,3);
         if(!
$result) return drupal_not_found();
           while (
$new_book db_fetch_object($result))
           
$block_content[] = "<a href = 'library/$new_book->tp/$new_book->tt/$new_book->nnid'>" 

$new_book->book_name "</a><br>";

               if(
$block_content==''){
               return;
               }else{    
               
//отобразить блок
               
$block['subject'] = 'Our block'
               
$block['content'] = $block_content;
           }
        }    
    return 
$block;
}
?>

Уже думаю, может выбрать по отдельности эти два столбца и поставить между ними <br> или \r\n

  Ответить  
 
 автор: GeorgeIV   (07.07.2009 в 09:41)   письмо автору
 
   для: Лена   (06.07.2009 в 23:20)
 

Лена, Вы так и не привели, а где собственно вывод происходит!

  Ответить  
 
 автор: Лена   (07.07.2009 в 10:53)   письмо автору
 
   для: GeorgeIV   (07.07.2009 в 09:41)
 

Вывод идет через шаблон, в том-то и дело, что там ничего подозрительного нет.
Вот шаблон этого блока:

<?php
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="block block-<?php print $block->module ?> unstyled-block">
    <?
php if ($block->subject): ?>
        <h4><?php print $block->subject?></h4> 
    <?php endif;?>
    <div class="content"><?php print $block->content ?></div>
</div>
?>

  Ответить  
 
 автор: GeorgeIV   (07.07.2009 в 13:12)   письмо автору
 
   для: Лена   (07.07.2009 в 10:53)
 

\r\n в html не даст перевода строки, надо использовать <br>.
Посмотрите, может где то по дороге происходит экранирование html-тэгов, или их исключение из запроса.

Посмотрите исходный текст полученной HTML страницы - что там реально стоит между столбцами?

  Ответить  
 
 автор: Лена   (07.07.2009 в 15:30)   письмо автору
 
   для: GeorgeIV   (07.07.2009 в 13:12)
 

Можно сказать, извратилась.
Перед самим выводом делаю в шаблоне замену:
$text = preg_replace('/&lt;br&gt;/','<br>',$content);
И на странице - как надо, в две строки
Есть где-то фильтр(скорее всего, с htmlspecialchars()), который конвертирует<br> в &lt;br&gt; , только я его никак не могу найти.

  Ответить  
 
 автор: GeorgeIV   (07.07.2009 в 15:46)   письмо автору
 
   для: Лена   (07.07.2009 в 15:30)
 

Тогда действительно может лучше выбирать два столбца и уже в результате делать склейку.

  Ответить  
 
 автор: LoraCat   (07.07.2009 в 13:25)   письмо автору
 
   для: Лена   (06.07.2009 в 16:48)
 

В PHP можно ставить как одинарные, так и двойные кавычки, но текст, заключенный в одинарные кавычки рассматривается только как текст, поэтому у Вас и выводится <br>. Нужно было бы заключить его в двойные кавычки, но тогда это расценится как конец запроса. Попробуйте <br> в двойных кавычках присвоить какой-нибудь переменной, а в запрос вставлять уже переменную. Хотя, если честно, вывод данных делается не так, но у вас шаблон, поэтому точно ничего не скажу.

  Ответить  
 
 автор: GeorgeIV   (07.07.2009 в 13:28)   письмо автору
 
   для: LoraCat   (07.07.2009 в 13:25)
 

На <br> Ваше замечание не распространяется - тэги HTML распознаются броузером и в одинарных кавычках (можете проверить на досуге).

  Ответить  
 
 автор: Trianon   (07.07.2009 в 13:32)   письмо автору
 
   для: LoraCat   (07.07.2009 в 13:25)
 

>Нужно было бы заключить его в двойные кавычки, но тогда это расценится как конец запроса.

Не надо запутывать автора.
У него php-текст во всех сообщениях заключен именно в двойные кавычки.
Действие кавычек на любой механизм оценивается не по контексту, а по синтаксису.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования