Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как сделать вывод текста по отдельности из ячейки mysql

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
spark108
Отправлено: 12 Августа, 2015 - 01:38:38
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Есть таблица с новостями в БД, в этой таблице есть столбец с тегами для каждой новости. В ячейках этого столбца садержутся сами теги через запятую например "Конкурсы, Новости, Видео" Нужно сделать так чтобы все это выводилось из БД, теги преобразовывались в масив и выводились в нужном месте. Как это сделать? При этом я хочу чтобы эти теги стали раздельными, а потом присваивалась ссылка к каждому своя.

Вроде как через explide(); и через str_result(); можно сделать подобное, но как?

Вот если нужен код вывода новостей:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include 'config.php';
  3. if (isset($_GET['news'])) { $limit = $_GET['news'];} else { $limit = '3';};
  4. $request = "SELECT news, user, title, tag, date_format(data,'%e.%m.%Y') as data1 FROM news ORDER BY id DESC LIMIT $limit";
  5. $result = mysql_query($request);
  6. if (!mysql_error()) {
  7.  
  8. // Цикл, вынимающий строку как массив с числовым индексом
  9.   while ($row = mysql_fetch_row($result)) {
  10.       print '<div id="colLeft">';
  11.           print '<div class="postItem">';
  12.       print '<h2>'.$row[2].'</h2>';
  13.       print '<p>'.$row[0].'</p>';
  14.       print '</div>';  
  15.       print '<div class="meta meta-comments">';
  16.       print 'Дата публикации: '.$row[4].' | Опубликовал: '.$row[1].' | Метки: '.$row[3].'</div>';
  17.       print '</div>';
  18.          
  19. };
  20.   };
Где $row[3] выводятся эти метки напрямую. без каких либо изменений.

(Отредактировано автором: 12 Августа, 2015 - 01:45:31)

 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Августа, 2015 - 08:48:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




 
 Top
spark108
Отправлено: 12 Августа, 2015 - 10:23:22
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




DeepVarvar пишет:
http://forum.php.su/topic.php?forum=33&topic=793

Причом тут это? у меня с кодом все нормално и редиректы не использую и причом тут магазин.
 
 Top
andrewkard
Отправлено: 12 Августа, 2015 - 10:39:38
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




spark108
Вам в цикле нужно записать их в массив,

и потом в другом цикле вывести:
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach ($arr as $row){
  3. echo $row;
  4. }
  5.  
 
 Top
spark108
Отправлено: 12 Августа, 2015 - 16:09:33
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Нечего не работает.
(Добавление)
spark108 пишет:
Нечего не работает.
Что arr[], что array(); после выполнения foreach ($arr as $row){
echo $row;
} выводит большие вопросы.
 
 Top
Viper
Отправлено: 12 Августа, 2015 - 17:11:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




spark108 пишет:
выводит большие вопросы.
кодировки? Файл в какой кодировке сохранили?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
spark108
Отправлено: 12 Августа, 2015 - 17:16:16
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Viper пишет:
spark108 пишет:
выводит большие вопросы.
кодировки? Файл в какой кодировке сохранили?
UTF-8 без BOM
 
 Top
andrewkard
Отправлено: 12 Августа, 2015 - 17:29:57
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Код не проверял:
PHP:
скопировать код в буфер обмена
  1.  
  2. include 'config.php';
  3. if (isset($_GET['news'])) {
  4.     $limit = (int)$_GET['news'];
  5. } else {
  6.     $limit = '3';
  7. }
  8. $request = "SELECT news, user, title, tag, date_format(data,'%e.%m.%Y') as data1 FROM news ORDER BY id DESC LIMIT $limit";
  9. $result = mysql_query($request);
  10. $arr_tags = array();
  11. if (!mysql_error()) {
  12. // Цикл, вынимающий строку как массив с числовым индексом
  13.     while ($row = mysql_fetch_row($result)) {
  14.         print '<div id="colLeft">';
  15.         print '<div class="postItem">';
  16.         print '<h2>'.$row[2].'</h2>';
  17.         print '<p>'.$row[0].'</p>';
  18.         print '</div>';
  19.         print '<div class="meta meta-comments">';
  20.         print 'Дата публикации: '.$row[4].' | Опубликовал: '.$row[1].' | Метки: '.$row[3].'</div>';
  21.         print '</div>';
  22.         $arr_tags[]=$row[3];
  23.  
  24.     }
  25. }
  26. $i=0;
  27. foreach ($arr_tags as $tag){
  28.     echo '<a href=index.php?tag='.$i.'> '.$tag.' </a>;';
  29.     $i++;
  30. }
  31.  
 
 Top
spark108
Отправлено: 12 Августа, 2015 - 17:51:59
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




andrewkard пишет:
Код не проверял:


Все нормально, но теги выводятся в конце страницы и у них 1 общая ссылка.

Хотя должно быть так: Запятая между ними без ссылки, а на каждое слово своя ссылка. И после тегов стоят знаки ";', а между ними неболольшие нижние черточки с разными ссылками.
(Добавление)
Код слегка изменил и получилось вот так:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include 'config.php';
  3. if (isset($_GET['news'])) {
  4.     $limit = (int)$_GET['news'];
  5. } else {
  6.     $limit = '3';
  7. }
  8. $request = "SELECT news, user, title, tag, date_format(data,'%e.%m.%Y') as data1 FROM news ORDER BY id DESC LIMIT $limit";
  9. $result = mysql_query($request);
  10. $arr_tags = array();
  11. if (!mysql_error()) {
  12. // Цикл, вынимающий строку как массив с числовым индексом
  13.  
  14.     while ($row = mysql_fetch_row($result)) {
  15.                         $arr_tags[]=$row[3];
  16.                 $i=0;
  17. foreach ($arr_tags as $tag){
  18.     $tag = '<a href=index.php?tag='.$i.'> '.$tag.' </a>,';
  19.     $i++;
  20. }
  21.         print '<div id="colLeft">';
  22.         print '<div class="postItem">';
  23.         print '<h2>'.$row[2].'</h2>';
  24.         print '<p>'.$row[0].'</p>';
  25.         print '</div>';
  26.         print '<div class="meta meta-comments">';
  27.         print 'Дата публикации: '.$row[4].' | Опубликовал: '.$row[1].' | Метки: '.$tag.'</div>';
  28.         print '</div>';
  29.  
  30.     }
  31. }

Но он все ровно выводит не так. Вопрос остается тем же.
Как выводить слова из Mysql раздельно?
Или вообще как реалезовать вывод меток для новости?
 
 Top
andrewkard
Отправлено: 12 Августа, 2015 - 18:40:18
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Видимо я упустил это:
spark108 пишет:
В ячейках этого столбца садержутся сами теги через запятую например "Конкурсы, Новости, Видео"

Вот это не понял:
spark108 пишет:
И после тегов стоят знаки ";', а между ними неболольшие нижние черточки с разными ссылками.


Пробуйте так:
PHP:
скопировать код в буфер обмена
  1.  
  2. include 'config.php';
  3. if (isset($_GET['news'])) {
  4.     $limit = (int)$_GET['news'];
  5. } else {
  6.     $limit = '3';
  7. }
  8. $request = "SELECT news, user, title, tag, date_format(data,'%e.%m.%Y') as data1 FROM news ORDER BY id DESC LIMIT $limit";
  9. $result = mysql_query($request);
  10.  
  11. if (!mysql_error()) {
  12. // Цикл, вынимающий строку как массив с числовым индексом
  13.     while ($row = mysql_fetch_row($result)) {
  14.         //массив ключевых слов
  15.         $arr_tags = explode(',',$row[3]);
  16.         //обработка
  17.         $i=0;
  18.         $tags='';
  19.         foreach ($arr_tags as $tag){
  20.             $tags .= '<a href=index.php?tag='.$i.'> '.$tag.' </a> ';
  21.             $i++;
  22.         }
  23.  
  24.         print '<div id="colLeft">';
  25.         print '<div class="postItem">';
  26.         print '<h2>'.$row[2].'</h2>';
  27.         print '<p>'.$row[0].'</p>';
  28.         print '</div>';
  29.         print '<div class="meta meta-comments">';
  30.         print 'Дата публикации: '.$row[4].' | Опубликовал: '.$row[1].' | Метки: '.$tags.'</div>';
  31.         print '</div>';
  32.         $arr_tags[]=$row[3];
  33.  
  34.     }
  35. }
  36.  
  37.  
 
 Top
spark108
Отправлено: 12 Августа, 2015 - 19:14:15
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Все работает.
Только вот вопрос таков. А если теги поменять местами, то и их ссылки сменятся тоже к примеру так:

Если первый стоит тег "Новости" то ему присваивается число 0, а следующему тегу число больше предыдущего на 1. При этом получается что тег не привязан к определенному числу.
Если число то ссылка выглядит так: /index.php?tag=0

А если убрать $i и $i++ а в месте URL установить переменную с списком тегов, то правельная ссылка выводится токо на первый тег "/index.php?tag=Тег (Например: Новости)", а на следующие теги выводит уже так "/index.php?tag=" (то есть в гет запросе пусто). Что с этим тогда делать?

(Отредактировано автором: 12 Августа, 2015 - 19:37:05)

 
 Top
Viper
Отправлено: 12 Августа, 2015 - 20:52:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




spark108 $i=0; перед while нужно.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
spark108
Отправлено: 13 Августа, 2015 - 01:26:44
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Viper пишет:
spark108 $i=0; перед while нужно.

Это уже стоит в первом случие если ссылка на тег в виде числа.

И я уже сказал что число к тегу не привязана, а я хочу чтобы было привязано.
Так как мне еще эти новости выводить на отдельную страницу где они будут разделены по категориям в зависимости от тега. А если тег не привязан к своей ссылке или числу, то он будет просто переменным.
(Добавление)
Я с этой проблемой сделал слегка подругому.
Сами теги в базе данных указал как число и при вытаскивание этих чисел из бД, с помощью оператора if присваивал им слова например:
1 это Новости.
2 это Конкурсы.
И он исходя из этого заменял все числа в полученых данных словом, и собвенно URL стал привязаным. и получилось это так:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function tagnews($row){
  4.                 //массив ключевых слов
  5.         $arr_tags = explode(' ',$row);
  6.         //обработка
  7.         $tags='';
  8.         foreach ($arr_tags as $tag){
  9.                         $i = '';
  10.                         if ($tag == '1') { $i .= 'Новости';};
  11.                         if ($tag == '2') { $i .= 'Конкурсы';};
  12.             $tags .= '[<a href=index.php?tag='.$i.'>'.$i.'</a>]';
  13.         };
  14.                 return $tags;
  15. };
  16.  
  17. include 'inc/config.php';
  18. if (isset($_GET['news'])) {
  19.     $limit = (int)$_GET['news'];
  20. } else {
  21.     $limit = '3';
  22. }
  23. $request = "SELECT news, user, title, tag, date_format(data,'%e.%m.%Y') as data1 FROM news ORDER BY id DESC LIMIT $limit";
  24. $result = mysql_query($request);
  25.  
  26. if (!mysql_error()) {
  27. // Цикл, вынимающий строку как массив с числовым индексом
  28.     while ($row = mysql_fetch_row($result)) {
  29.  
  30.         print '<div id="colLeft">';
  31.         print '<div class="postItem">';
  32.         print '<h2>'.$row[2].'</h2>';
  33.         print '<p>'.$row[0].'</p>';
  34.         print '</div>';
  35.         print '<div class="meta meta-comments">';
  36.         print 'Дата публикации: '.$row[4].' | Опубликовал: '.$row[1].' | Метки: '.tagnews($row[3]). '</div>';
  37.         print '</div>';
  38.  
  39.  
  40.     }
  41. }
  42.  


Как видно я создал функцию чтобы не путатся xD, может её стоит убрать и из неё все поместить в цикл.

В explode(' ',$row); - в качестве разделяющего знака поставил пробел, незнаю чем это может быть черевато, но при записе с помощью скрипта добовленя новости, мне точно будт проще с пробелом.
(Добавление)
Вопрос решен!

(Отредактировано автором: 13 Августа, 2015 - 04:35:40)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB