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 :: Помогите с фильтрациями значений
извлекающий от 1 до 3 строк из бд, в зависимости от их наличия.
строки должны выводится хитрым образом на странице таким образом:
первая, - всегда в шапке страницы, а две другие сбоку (html-оболочка для первой строки одна, а для двух боковых выводимых строк, - другая).
В выводе боковых строк подставляется ссылка на эту же страницу, содержащая параметр $st (ключ текущего выводимого значения массива). Этот параметр используется для вывода одного из значений массива в шапке страница. Если параметр не передан, то выводится в шапке 1, а сбоку 2 и 3 значения, Если передано 2, то - 2 в шапке, 1 и 3 сбоку.
Вот тут у меня проблема мне кажется этот код работать не будет , поскольку надо наверно выводить эти 2 или одно(если в базе удалили 1) значение в цикле, как-то перед этим удаляя из массива то значение, которое уже выведено в шапке.. вот как это сделать я не знаю и очень прошу помочь.
JustUserR
Отправлено: 22 Декабря, 2010 - 09:29:20
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Zuldek пишет:
Извлекающий от 1 до 3 строк из бд, в зависимости от их наличия
Для осуществления извлечения требуемого числа элементов информационных полей из объекта предоставляющего результата запроса к серверу БД - допустимо использования функции mysql_num_rows позволяющих определить целевое количетсво элементов - в случае если в зависимости от вариативного количества элементов производится выполнение различных действия то возможно включения дополнительного услового оператора
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Мелкий
Отправлено: 22 Декабря, 2010 - 09:44:52
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Zuldek пишет:
извлекающий от 1 до 3 строк из бд, в зависимости от их наличия.
Не согласен. Показан код, жёстко требующий 3 строки. Если строк меньше, элементов массива всё равно будет 3, но пустые будут содержать false вместо массива.
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Мелкий пишет:
Но пустые будут содержать false вместо массива
Процесс формирования пользовательского содержимого целевой страницы включающей элементы информационных полей выбранных из БД посредством целевого запроса - основан на инерполяции предпоалгаемых индексов в строку что может приводить в ошибке в случае применения в качестве lvalue-значения для запроса индекса константы несоответствующего типа такую как false или null
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Zuldek
Отправлено: 22 Декабря, 2010 - 10:08:59
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
JustUserR пишет:
Для осуществления извлечения требуемого числа элементов
Спасибо, но проблема не с извлечением элементов из бд. Вот полный код извлечения и записи в массив:
Извлекаем только те акции у которых active = 1. Максимум их может быть 3, минимум 1, так что $i=1; $i<=3; $i++ вообще говоря лишний.
Но основная проблема состоит именно в правильном выводе значений на странице. Как и описал выше, на странице 2 места вывода значеий массива. 1 место для одной акции, идущей на первом месте в массиве (с наименьшим share_status в бд, которым имеет значения от 1 до 3.) и второе место для вывода всех оставшихся значений массива (дополнительные акции, 1-2, в зависимости от наличия их в бд).
Так вот в выводе каждой дополнительной акции там стоит ссылка на текущую страницу, которая передаёт ей параметр st (см. первый пост), который равен ключу текущего выводимого значения в массиве. Этот ключ используется для вывода главной акции в позиции 1 (шапка страницы).
В идеале, когда из бд извлечены 3 акции и через GET не передан st (страница открыта без параметров), приравниваю его к единице. В месте вывода значения главной акции
echo $share[$st]['name']; в месте вывода двух других акций пишу:
таким образом если посетитель давит на ссылку с st=2, грузится эта же страница, только в шапке выводится уже вторая акция $share[2]['name'];
При этом надо чтобы месте вывода допольнительных акций выводились уже акция 1 (на месте 2, которая отобразилась на месте главной), и акция 3.
Аналогично должно быть и для акции $share[3]['name'] : если она кажется месте главной, то как дополнительные отображаются 1, и 2.
При этом надо чтобы если удалят одну любую (или две) акции из бд, то отображалось бы всё равно всё корректно. Вот не могу сообразить как это сделать(.. вроде надо выводить дополнительные акций в виде одного цикла...
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Zuldek пишет:
Спасибо, но проблема не с извлечением элементов из бд. Вот полный код извлечения и записи в массив
Пожалуйста! Для реализации предявленной вами формулировки задачи возможно использование копирования определенных значений массива - в таком случае возможно прохождение по его элементам посредством foreach-цикла производящего выборку существующих и определенных элементов на основе внутреннего счетчика - для всех определенных элементов осуществляется копирование в новый массив с последовательной индексацией В таком случае используемых индекс выводимого элемента будет соответстовать порядковому номеру выбранного значеня - и целевая нумерация будет последовательной
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Zuldek
Отправлено: 22 Декабря, 2010 - 10:19:24
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
Мелкий пишет:
Не согласен. Показан код, жёстко требующий 3 строки. Если строк меньше, элементов массива всё равно будет 3, но пустые будут содержать false вместо массива.
Хм, верно. Сейчас уберу счётчик из цикла и как условие поставлю истину выражения mysql_query($query). Но вопрос реализации вывода значений (разъяснил его выше) всё равно остался (Добавление)
JustUserR пишет:
Для реализации предявленной вами формулировки задачи возможно использование копирования определенных значений массива - в таком случае возможно прохождение по его элементам посредством foreach-цикла производящего выборку существующих и определенных элементов
А нельзя-ли использовать уже имеющийся массив значений, отфильтровывая их как-то, исключая элементы по ключу (например в роли главной акции через GET передался параметр st=2, следовательно кажем 2-ую строку массива в месте для главной акции, а в месте для дополнительных акций кажем акции 1 и 3, как. То есть чтобы отобразить доп. акции надо отфильтровать массив share, исключив из него строку с ключём 2, выведя остальные элементы в порядке значений их ключей, то есть 1, 3...?
А foreach - если он пытался работать как раз после этих ошибок, то ничего удивительного, массива $share то нету, который ему скормить пытаются.
----- PostgreSQL DBA
Zuldek
Отправлено: 22 Декабря, 2010 - 12:50:50
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
ошибку поправил почти сразу как пост создал ). Спасибо большое, теперь буду думать как обойтись без создания второго массива и искать изящное решение)
JustUserR
Отправлено: 22 Декабря, 2010 - 21:25:15
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Zuldek пишет:
Буду думать как обойтись без создания второго массива и искать изящное решение
Осуществления предполагаемой вами формулировки задачи заключаемой в реализации устаовки в указанном ассоциативном массиве с индексной индексаций порядка сопоставления внутреннем ключа идентичному соответствующего элементу запрашиваемого числового порядка в области определения размера массива - что может быть осущемствлено посредсвом выбора требуемого реального объекта основанного на внутреннем ключе посредством функций next/reset
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.