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 :: Проблема с переменной

 PHP.SU

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


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

> Описание: Проблема с переменной
Earl
Отправлено: 21 Декабря, 2013 - 17:37:27
Post Id



Новичок


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


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




Здравствуйте господа)

Есть код, который выводит статьи с несколькими КАТЕГОРИЯМИ.

PHP:
скопировать код в буфер обмена
  1. $sql = "SELECT p.*, c.title as cat_title, c.id as cat_id FROM data p INNER JOIN connections con ON(p.id = con.pid) INNER JOIN categories c  ON(con.cid=c.id) ORDER BY id DESC LIMIT $start_pos, $perpage";
  2.         $result = mysqli_query($connection, $sql);
  3.  
  4.  
  5.         if(!$result) {
  6.         echo "ERROR! DATAS NOT FOUND";
  7.         }
  8.  
  9.         if (mysqli_num_rows($result) > 0)
  10.         {
  11.  
  12.  
  13.  
  14.         $ar = array();
  15.         while ($myrow = mysqli_fetch_array($result)){
  16.         if(!isset($ar[$myrow['id']])){
  17.         $ar[$myrow['id']] = $myrow;
  18.         }
  19.         $ar[$myrow['id']]['cat_arr'][] = array('id'=>$myrow['cat_id'], 'title'=>$myrow['cat_title']);
  20.         }
  21.  
  22.         foreach($ar as $p){
  23.        
  24.         $hrefs = '<a><b>Категория:</b></a> ';
  25.         $hrefArr = array();
  26.         foreach($p['cat_arr'] as $a){
  27.         $hrefArr[] = "<a href='view_category.php?category={$a['id']}'> {$a['title']} </a>";
  28.         }
  29.         $hrefs .= implode(', ', $hrefArr);
  30.        
  31.         $output.="<div class='post'>
  32.  
  33.          <div class='post_title'><a href='view_post.php?id={$p['id']}'> {$p['title']} </a></div>
  34.          <div class='home_img'><a href='view_post.php?id={$p['id']}'><img src='{$p['home_img']}' title='{$p['title']}'></a></div>
  35.  
  36.          <div class='post_author'><a><b>Автор:</b> {$p['author']} </a></div>
  37.          <div class='post_date'><a><b>Опубликовано:</b> {$p['date']} </a></div>
  38.          <div class='post_views'>$hrefs</div>
  39.  
  40.          <div class='brief_description'> {$p['description']} </div>
  41.          <div class='more'><a>Просмотров: {$p['views']} </a> <a class='moo' href='view_post.php?id={$p['id']}'> Подробнее </a></div>
  42.  
  43.          </div>";
  44.    
  45.         }
  46.         echo $output;
  47.         }
  48.  
  49.          
  50.  
  51.          else
  52.           {
  53.          echo "<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";    
  54.           }


Вот пример вывода



Но проблема в том что когда я вставляю в запрос ТЕКСТ WHERE con.cid = '$category', (как выглядит полностью запрос $sql = "SELECT p.*, c.title as cat_title, c.id as cat_id FROM data p INNER JOIN connections con ON(p.id = con.pid) INNER JOIN categories c ON(con.cid=c.id) WHERE con.cid = '$category' ORDER BY id DESC LIMIT $start_pos, $perpage";) у меня статьи начинают выводиться только с одной КАТЕГОРИЕЙ.

Как я правильно понял проблема в переменной $category.
Вот что связано с переменной $category

PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['category'])) {$category = $_GET['category']; }
  2.  
  3.           if (!isset($category)) {$category = 1;}
  4.  
  5.          
  6.          
  7.          
  8.           /*Проверяем, является ли переменная чмслом*/
  9.           if (!preg_match("|^[\d]+$|", $category)) {
  10.           exit ("Неверный формат запроса! Проверьте URL!");
  11.           }
  12.           /*Закрываем проверку*/
  13.          
  14.          
  15.          
  16.          
  17.  
  18.           $sql2 = "SELECT * FROM categories WHERE id = '$category'";
  19.           $result2 = mysqli_query($connection, $sql2);
  20.  
  21.           if (!$result2)
  22.           {
  23.           echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору admin@gmail.com. <b>Код ошибки:</b></p>";
  24.           exit (mysqli_error());
  25.           }
  26.  
  27.           if (mysqli_num_rows($result2) > 0)
  28.  
  29.           {
  30.           $myrow2 = mysqli_fetch_assoc($result2);
  31.           }
  32.  
  33.           else
  34.           {
  35.           echo "<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";  
  36.           exit();
  37.           }


А также что бы не возникали вопросы по поводу таблиц, оставляю БД

CODE (SQL):
скопировать код в буфер обмена
  1. --
  2. -- Table structure for table `categories`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `categories` (
  6.   `id` INT(1) NOT NULL AUTO_INCREMENT,
  7.   `title` VARCHAR(266) NOT NULL,
  8.   `meta_d` VARCHAR(266) NOT NULL,
  9.   `meta_k` VARCHAR(266) NOT NULL,
  10.   `text` text NOT NULL,
  11.   PRIMARY KEY (`id`)
  12. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
  13.  
  14.  
  15. --
  16. -- Table structure for table `connections`
  17. --
  18.  
  19. CREATE TABLE IF NOT EXISTS `connections` (
  20.   `pid` INT(6) NOT NULL,
  21.   `cid` INT(6) NOT NULL
  22. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  23.  
  24. --
  25. -- Dumping data for table `connections`
  26. --
  27.  
  28. INSERT INTO `connections` (`pid`, `cid`) VALUES
  29. (6, 1),
  30. (6, 3),
  31. (7, 1),
  32. (7, 2),
  33. (74, 2),
  34. (76, 2),
  35. (84, 1),
  36. (84, 2),
  37. (85, 1),
  38. (86, 1),
  39. (86, 2),
  40. (87, 1),
  41. (87, 2),
  42. (89, 1),
  43. (89, 2),
  44. (90, 1),
  45. (90, 2),
  46. (91, 1),
  47. (91, 2),
  48. (92, 1),
  49. (92, 2),
  50. (92, 3),
  51. (93, 3),
  52. (94, 1),
  53. (94, 2),
  54. (94, 3),
  55. (95, 2),
  56. (95, 4),
  57. (96, 3),
  58. (96, 4),
  59. (97, 1),
  60. (97, 2),
  61. (97, 3),
  62. (97, 4);
  63.  
  64. -- --------------------------------------------------------
  65.  
  66. --
  67. -- Table structure for table `data`
  68. --
  69.  
  70. CREATE TABLE IF NOT EXISTS `data` (
  71.   `id` INT(6) NOT NULL AUTO_INCREMENT,
  72.   `category` INT(6) NOT NULL,
  73.   `meta_d` VARCHAR(266) NOT NULL,
  74.   `meta_k` VARCHAR(266) NOT NULL,
  75.   `description` text NOT NULL,
  76.   `text` text NOT NULL,
  77.   `views` INT(7) NOT NULL,
  78.   `author` VARCHAR(100) NOT NULL,
  79.   `date` VARCHAR(50) NOT NULL,
  80.   `home_img` VARCHAR(266) NOT NULL,
  81.   `title` VARCHAR(266) NOT NULL,
  82.   PRIMARY KEY (`id`)
  83. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=98 ;
  84.  

(Отредактировано автором: 21 Декабря, 2013 - 17:39:36)

 
 Top
anakoman
Отправлено: 21 Декабря, 2013 - 19:25:56
Post Id


Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013  


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




PHP:
скопировать код в буфер обмена
  1. $sql2 = "SELECT * FROM categories WHERE id = '$category'";


все не смотрел, но здесь явная ошибка
$category в одиночных кавычках читается как строка

нужно было
PHP:
скопировать код в буфер обмена
  1. $sql2 = 'SELECT * FROM categories WHERE id = '.$category;


проверьте это во всем коде
(Добавление)
Во втором скрине 18 строка


-----
Иногда, пока не спросишь - сам не поймешь
 
 Top
Earl
Отправлено: 21 Декабря, 2013 - 19:55:54
Post Id



Новичок


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


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




anakoman пишет:
PHP:
скопировать код в буфер обмена
  1. $sql2 = "SELECT * FROM categories WHERE id = '$category'";


все не смотрел, но здесь явная ошибка
$category в одиночных кавычках читается как строка

нужно было
PHP:
скопировать код в буфер обмена
  1. $sql2 = 'SELECT * FROM categories WHERE id = '.$category;


проверьте это во всем коде
(Добавление)
Во втором скрине 18 строка


Спасибо конечно, но ничего не изменилось. мой вариант работает так же, ошибки я тут не вижу
(Добавление)
Ну ребят кто поможет?
 
 Top
LIME
Отправлено: 21 Декабря, 2013 - 23:59:50
Post Id


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


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


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




информация к размышлению:
CODE (SQL):
скопировать код в буфер обмена
  1.  WHERE con.cid = '$category'


CODE (SQL):
скопировать код в буфер обмена
  1.  WHERE con.cid IN ($categories)
 
 Top
kotyara1979
Отправлено: 22 Декабря, 2013 - 05:49:56
Post Id


Частый гость


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


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




если я правильно понял, и второй код формирует значение переменной $category, то она у вас всегда содержит одно значение.
Фактически этот код у вас проверяет переданное значение $_GET['category'] и получает из базы "обвес" для него.

Отсюда вопрос: а что собственно вы хотите сделать?
Что бы по единственному значению $category формировался перечень статей ,и что бы каждая статья в своем описании содержала полный перечень категорий, в которые она входит?

Если так, то вам необходимо в цикле обработки результата первого запроса "SELECT p.*, c.title as cat_title ... " сделать запрос для формирования списка категорий для выбранной статьи. И уже его его результаты формировать в строку и выводить.

ЗЫ Заранее извиняюсь за ненужную писанину, если неправильно понял цель данного кода.

(Отредактировано автором: 22 Декабря, 2013 - 05:52:11)



-----
Сделать можно все. Главное одеть каску.
 
 Top
Earl
Отправлено: 22 Декабря, 2013 - 10:49:08
Post Id



Новичок


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


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




kotyara1979 пишет:
если я правильно понял, и второй код формирует значение переменной $category, то она у вас всегда содержит одно значение.
Фактически этот код у вас проверяет переданное значение $_GET['category'] и получает из базы "обвес" для него.

Отсюда вопрос: а что собственно вы хотите сделать?
Что бы по единственному значению $category формировался перечень статей ,и что бы каждая статья в своем описании содержала полный перечень категорий, в которые она входит?

Если так, то вам необходимо в цикле обработки результата первого запроса "SELECT p.*, c.title as cat_title ... " сделать запрос для формирования списка категорий для выбранной статьи. И уже его его результаты формировать в строку и выводить.

ЗЫ Заранее извиняюсь за ненужную писанину, если неправильно понял цель данного кода.


Да вы правильно поняли, что я хочу реализовать, поможете мне с кодом?
Буду вам очень благодарен.
 
 Top
kotyara1979
Отправлено: 22 Декабря, 2013 - 13:21:07
Post Id


Частый гость


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


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




Примерно вот так.

CODE (php):
скопировать код в буфер обмена
  1. $query = "SELECT * FROM data p INNER JOIN connections con ON(p.id = con.pid) WHERE con.cid = '$category' ORDER BY id DESC LIMIT $start_pos, $perpage";
  2. $result = mysqli_query($connection, $query);
  3.  
  4. if(!$result) echo "ERROR! DATAS NOT FOUND";
  5.  
  6. if (mysqli_num_rows($result) > 0)
  7. {
  8.         while ($myrow = mysqli_fetch_array($result))
  9.         {
  10.                 $query = "select c.* from connections con left join categories c  ON(con.cid=c.id) where con.pid={$myrow['id']}";
  11.                 $rez = mysqli_query($connection, $query);
  12.                 $list_cat = '';
  13.                 while ($row = mysqli_fetch_array($result))
  14.                 {
  15.                         if($list_cat <> '') $list_cat.=', ';
  16.                         $list_cat.= "<a href='view_category.php?category={$row['id']}'> {$row['title']} </a>"
  17.                 }
  18.                 $list_cat = '<a><b>Категория:</b></a>'.$list_cat;
  19.                
  20.                 echo "<div class='post'>
  21.                 <div class='post_title'><a href='view_post.php?id={$myrow['id']}'> {$myrow['title']} </a></div>
  22.                 <div class='home_img'><a href='view_post.php?id={$myrow['id']}'><img src='{$myrow['home_img']}' title='{$myrow['title']}'></a></div>
  23.                 <div class='post_author'><a><b>Автор:</b> {$myrow['author']} </a></div>
  24.                 <div class='post_date'><a><b>Опубликовано:</b> {$myrow['date']} </a></div>
  25.                 <div class='post_views'>{$list_cat}</div>
  26.                 <div class='brief_description'> {$myrow['description']} </div>
  27.                 <div class='more'><a>Просмотров: {$myrow['views']} </a> <a class='moo' href='view_post.php?id={$myrow['id']}'> Подробнее </a></div>
  28.                 </div>";
  29.         }
  30. }
  31. else
  32. {
  33.         echo "<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";    
  34. }

(Отредактировано автором: 23 Декабря, 2013 - 03:03:10)



-----
Сделать можно все. Главное одеть каску.
 
 Top
Earl
Отправлено: 22 Декабря, 2013 - 15:38:08
Post Id



Новичок


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


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




Выдает ошибку
 
 Top
kotyara1979
Отправлено: 23 Декабря, 2013 - 03:01:46
Post Id


Частый гость


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


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




Earl пишет:
Выдает ошибку



Earl, извините, но я, как и большинство здесь, не телепат, вашей среды исполнения у меня нет.
Какую ошибку выдает? Ее текст приведите.

(Отредактировано автором: 23 Декабря, 2013 - 03:02:11)



-----
Сделать можно все. Главное одеть каску.
 
 Top
Earl
Отправлено: 23 Декабря, 2013 - 15:46:21
Post Id



Новичок


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


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




kotyara1979 пишет:
Earl пишет:
Выдает ошибку



Earl, извините, но я, как и большинство здесь, не телепат, вашей среды исполнения у меня нет.
Какую ошибку выдает? Ее текст приведите.


Вот такую ошибку

Parse error: syntax error, unexpected '}' in G:\home\simplesite.ru\www\post.php on line 17

(Отредактировано автором: 23 Декабря, 2013 - 15:46:52)

 
 Top
FaDev
Отправлено: 23 Декабря, 2013 - 15:49:38
Post Id


Новичок


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $list_cat.= "<a href='view_category.php?category={$row['id']}'> {$row['title']} </a>" ;
  3.  


(точка с запятой в конце)
 
 Top
Earl
Отправлено: 23 Декабря, 2013 - 17:05:58
Post Id



Новичок


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


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




FaDev пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. $list_cat.= "<a href='view_category.php?category={$row['id']}'> {$row['title']} </a>" ;
  3.  


(точка с запятой в конце)


Точку с запятой поставил, код начал работать, но не так как нужно(
Дело в том что в переменную $list_cat попадает не перечень категорий, а перечень названия (title) статей из таблицы post

(Отредактировано автором: 23 Декабря, 2013 - 17:10:38)

 
 Top
kotyara1979
Отправлено: 23 Декабря, 2013 - 18:09:53
Post Id


Частый гость


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


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




Cтроку while ($row = mysqli_fetch_array($result)) перепишите как while ($row = mysqli_fetch_array($rez)).
Идентификатор запроса неправильный я поставил. Это 13 строка.

(Отредактировано автором: 23 Декабря, 2013 - 18:13:52)



-----
Сделать можно все. Главное одеть каску.
 
 Top
Earl
Отправлено: 23 Декабря, 2013 - 18:48:10
Post Id



Новичок


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


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




kotyara1979 пишет:
Cтроку while ($row = mysqli_fetch_array($result)) перепишите как while ($row = mysqli_fetch_array($rez)).
Идентификатор запроса неправильный я поставил. Это 13 строка.



Спасибо вам большое)), все заработало так как, я задумывал.
Побольше бы таких людей умных, и добрых))

(Отредактировано автором: 23 Декабря, 2013 - 18:49:12)

 
 Top
Earl
Отправлено: 24 Декабря, 2013 - 12:48:16
Post Id



Новичок


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


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




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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB