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]   

> Без описания
optsar
Отправлено: 24 Сентября, 2015 - 20:01:44
Post Id


Новичок


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


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




Подскажите какой вариант правильный

CODE (htmlphp):
скопировать код в буфер обмена
  1. case('product'):
  2.  
  3. $prod = (int)$_GET['prod'];  
  4. $products = products($prod);
  5.  
  6. break;
  7.  
  8. function products($prod){
  9.     $query = "(SELECT * FROM goods WHERE goods_brandid = $prod)";
  10.     $res = mysql_query($query) or die(mysql_error());
  11.    
  12.     $products = array();
  13.     while($row = mysql_fetch_assoc($res)){
  14.         $products[$row[goods_id]] = $row;
  15.     }
  16.    
  17.     return $products;
  18. }



или


CODE (htmlphp):
скопировать код в буфер обмена
  1. case('product'):
  2.  
  3. $prod = (int)$_GET['prod'];
  4. products();
  5.  
  6. break;
  7.  
  8. function products(){
  9.         global $prod;
  10.     $query = "(SELECT * FROM goods WHERE goods_brandid = $prod)";
  11.     $res = mysql_query($query) or die(mysql_error());
  12.     global $products;
  13.     $products = array();
  14.     while($row = mysql_fetch_assoc($res)){
  15.         $products[$row[goods_id]] = $row;
  16.     }
  17. }
  18.  


в шаблон передается в любом варианте, только вот не знаю, как правильно это все делается.

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php foreach($products as $key) { ?>
  2.  
  3. <p><?=$key{goods_id}?><?=$key{name}?></p>
  4.  
  5. <?php } ?>
 
 Top
LIME
Отправлено: 24 Сентября, 2015 - 20:26:20
Post Id


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


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


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




1
Глобальные переменные есть зло
Ты потом сможешь использовать фцию повторно для других сущностей передавая параметры
 
 Top
broshurkaplus
Отправлено: 24 Сентября, 2015 - 20:26:29
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


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




может типа так
PHP:
скопировать код в буфер обмена
  1. function products($_GET['prod']){
  2.     //проверяем $_GET['prod'] если не гуд  - возвращаем сообщение нунуну
  3.     //иначе
  4.     while($row = mysql_fetch_assoc(mysql_query("SELECT указываем конкретно что выбрать FROM goods WHERE goods_brandid = $_GET['prod']"))){
  5.         //строим то что должно быть в блоке
  6.        $block=...;
  7.     }
  8.     return $block;
  9. }
  10. $element=products($_GET['prod']);

------------------------------
в шаблоне в нужное место
...html'.$element.'html...

непонятно зачем
global $prod;
$products = array();
и в шаблоне разбирать массив

(Отредактировано автором: 24 Сентября, 2015 - 20:28:22)

 
 Top
Мелкий Супермодератор
Отправлено: 24 Сентября, 2015 - 20:58:57
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




optsar пишет:
<p><?=$key{goods_id}?><?=$key{name}?></p>

Включите вывод ошибок. Здесь уже была пара E_NOTICE.
Во время разработки error_reporting обязан быть в E_ALL (или -1 для музейных версий PHP)
Хоть к элементам массивов действительно можно обращаться через {}, лучше пользоваться более привычными []

Затем, выкидывайте mysql_query и компанию. Это расширение уже не то что устарело, оно уже вообще удалено из кодовой базы PHP.

Непосредственно по теме - чем меньше у вас глобальных переменных, тем с этим потом кодом легче работать.

broshurkaplus пишет:
и в шаблоне разбирать массив

Про концепцию разделения логики обработки данных от логики вывода не слышали?


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 24 Сентября, 2015 - 21:22:38
Post Id


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


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


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




Мелкий пишет:
м с этим потом кодом легче работать.
а конкретнее?Улыбка
Что еще кроме возможности повторного использования в отрыве от контекста?
 
 Top
Мелкий Супермодератор
Отправлено: 24 Сентября, 2015 - 22:14:01
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




LIME пишет:
Что еще кроме возможности повторного использования в отрыве от контекста?

Неудобно передавать параметры и получать результат - надо держать реализацию функции перед глазами, side effects, приличный риск использовать одну переменную в разных местах и ловить неочевидные странности поведения, крайне неудобно разбираться в коде - вот видишь вьюху, в которой выводится $products - а где тот заполняется? А вдруг потом ещё меняется где-то в другой месте?
Может ещё какое счастье, о котором не вспомнил сразу.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 24 Сентября, 2015 - 22:53:49
Post Id


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


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


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




Это сейчас расписал невозможность повторного использования
Впрочем это и требовалосьУлыбка спасибо
(Добавление)
Ну и еще + коечто
 
 Top
broshurkaplus
Отправлено: 24 Сентября, 2015 - 23:05:09
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


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




ну тут я от том что логика представления позволит обработать все до нужного вида , а затем уже само представление
 
 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