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

 PHP.SU

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


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

> Без описания
77_well
Отправлено: 05 Ноября, 2013 - 18:49:40
Post Id



Новичок


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


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

[+]


здравствуйте я написал некий код, кстати он работает, вывод постранично из mysql.
вот часть кода из класса отвечающего за выборку из mysqj:

PHP:
скопировать код в буфер обмена
  1. public function resultOrder_0(){
  2.                         return $result_set = $this->db->query("SELECT * FROM `order` LIMIT 0,                          3");
  3.                 }
  4.                
  5.                 public function resultOrder_3(){
  6.                         return $result_set = $this->db->query("SELECT * FROM `order` LIMIT 3, 3");
  7.                 }
  8.                
  9.                 public function resultOrder_6(){
  10.                         return $result_set = $this->db->query("SELECT * FROM `order` LIMIT 6, 3");
  11.                 }
  12.                
  13.                 public function resultOrder_9(){
  14.                         return $result_set = $this->db->query("SELECT * FROM `order` LIMIT 9, 3");
  15.                 }


а вот часть кода из индекса:

PHP:
скопировать код в буфер обмена
  1.                         if ($_GET["num"] == 3){
  2.                                 $result_set = $order->resultOrder_0();
  3.                                 printResult($result_set);
  4.                         }elseif ($_GET["num"] == 6){
  5.                                 $result_set = $order->resultOrder_3();
  6.                                 printResult($result_set);
  7.                         }elseif ($_GET["num"] == 9){
  8.                                 $result_set = $order->resultOrder_6();
  9.                                 printResult($result_set);
  10.                         }elseif ($_GET["num"] == 12){
  11.                                 $result_set = $order->resultOrder_9();
  12.                                 printResult($result_set);
  13.                         }


и нумерация страниц:

PHP:
скопировать код в буфер обмена
  1. $article = 3;// количество статей на странице
  2.                         $pages = $order->resultPages();//общее количество статей
  3.                         $total_pages = ceil($pages / $article);//получаем количество страниц
  4.                         for ($i=1; $i <= $total_pages; $i++){// запускаем цикл - количество итераций равно количеству страниц
  5.                                 echo '<a href="'.$_SERVER['PHP_SELF'].'?num='.$i*$article.'">'.$i."</a>\n";
  6.                         }


в классе я решил проблемму следующим образом:

PHP:
скопировать код в буфер обмена
  1. public function resultOrder($size){
  2.                         return $result_set = $this->db->query("SELECT * FROM `order` LIMIT $size, 3");
  3.                 }


я хочу что бы на странице было по три записи и нумерация страниц при нажатии на страницу в этом же индексе выводятся следующие три записи. вопрос в том как мне часть из индекса переписать в цикле. со сложными циклами путаюсь) не могу реализовать помогите пожалуйста)
(Добавление)
вот решил добавить функцию из индекса:

PHP:
скопировать код в буфер обмена
  1. function printResult($result_set){
  2.                
  3.                 while (($row = $result_set->fetch_assoc()) != false){//fetch_assoc() создает массив из $result_set
  4.                         echo "
  5.                                 <dt>".$row['id']."</dt>
  6.                                         <dd>".$row['id_product']."</dd>
  7.                                         <dd>".$row['name_client']."</dd>
  8.                                         <dd>".$row['email']."</dd>
  9.                                         <dd>".$row['coment']."</dd>
  10.                                         <dd>".$row['date']."</dd>
  11.                         ";
  12.                 }
  13.         }


Отредактировано модератором: OrmaJever, 05 Ноября, 2013 - 20:18:03
 
 Top
OrmaJever Модератор
Отправлено: 05 Ноября, 2013 - 19:56:56
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




77_well пишет:
public function resultOrder_0(){

77_well пишет:
public function resultOrder_3(){

77_well пишет:
public function resultOrder_6(){

77_well пишет:
public function resultOrder_9(){

Всегда знал что параметры функций для лохов, но был не уверен.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
OrmaJever Модератор
Отправлено: 05 Ноября, 2013 - 20:34:28
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




77_well пишет:
куда модераторы смотрят.

Я и есть модератор. Удалю данный пост и дам предупреждение на всякий случай.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
77_well
Отправлено: 05 Ноября, 2013 - 20:36:37
Post Id



Новичок


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


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

[+]


ты вообще тему читал.
PHP:
скопировать код в буфер обмена
  1. public function resultOrder($size){
  2.                         return $result_set = $this->db->query("SELECT * FROM `order` LIMIT $size, 3");
  3.                 }

вот нормальная запись
(Добавление)
это рабочаяверсия. не могу цикл написать. чтобы и if ($_GET["num"] == 3) поменять 3 6 9 12
и resultOrder(0) 0 3 6 9 поменять
(Добавление)
тема создана в разделе для новичков. ты чего хотел, я только учу php.

(Отредактировано автором: 05 Ноября, 2013 - 20:37:23)

 
 Top
biperch
Отправлено: 05 Ноября, 2013 - 21:02:02
Post Id



Частый посетитель


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. public $step = 3;
  3. public function resultOrder($page){
  4.           $start = $page * $this->step; // начальная позиция
  5.           return $result_set = $this->db->query("SELECT * FROM `order` LIMIT $start, ".$this->step);
  6. }
  7.  
  8.  
  9.  
 
 Top
77_well
Отправлено: 05 Ноября, 2013 - 21:10:23
Post Id



Новичок


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


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

[+]


спс
 
 Top
OrmaJever Модератор
Отправлено: 05 Ноября, 2013 - 21:18:17
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




77_well пишет:
тема создана в разделе для новичков. ты чего хотел, я только учу php.

Да ничего я не хотел, просто за многие годы первый раз такое вижу, вот и насмешило.
77_well пишет:
это рабочаяверсия. не могу цикл написать. чтобы и if ($_GET["num"] == 3) поменять 3 6 9 12

А почему нельзя просто $_GET["num"] прям в запрос поставить?

PHP:
скопировать код в буфер обмена
  1. $result_set = $this->db->query("SELECT * FROM `order` LIMIT {$_GET["num"]}, 3");


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
biperch
Отправлено: 05 Ноября, 2013 - 21:37:37
Post Id



Частый посетитель


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


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




OrmaJever пишет:
А почему нельзя просто $_GET["num"] прям в запрос поставить?

PHP:
скопировать код в буфер обмена
$result_set = $this->db->query("SELECT * FROM `order` LIMIT {$_GET["num"]}, 3");

не камильфо
 
 Top
77_well
Отправлено: 05 Ноября, 2013 - 21:45:16
Post Id



Новичок


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


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

[+]


$_GET["num"] в индексе
PHP:
скопировать код в буфер обмена
  1. $article = 3;// количество статей на странице
  2.                         $pages = $order->resultPages();//общее количество статей
  3.                         $total_pages = ceil($pages / $article);//получаем количество страниц
  4.                         for ($i=1; $i <= $total_pages; $i++){// запускаем цикл - количество итераций равно количеству страниц
  5.                                 echo '<a href="'.$_SERVER['PHP_SELF'].'?num='.$i*$article.'">'.$i."</a>\n";

а выборка в отдельном классе, а класс в отдельном файле
PHP:
скопировать код в буфер обмена
  1. $result_set = $this->db->query("SELECT * FROM `order` LIMIT {$_GET["num"]}, 3");

и $_GET["num"] должен принимать значения 3 6 9 12
а resultOrder($size) 0 3 6 9 тоже шаг 3 но с нуля
 
 Top
OrmaJever Модератор
Отправлено: 05 Ноября, 2013 - 21:52:32
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




77_well пишет:
а выборка в отдельном классе, а класс в отдельном файле

Ну дак предавайте $_GET["num"] в параметре метода класса.
В индексе
PHP:
скопировать код в буфер обмена
  1. $result_set = $order->resultOrder((int)$_GET['num']);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
77_well
Отправлено: 05 Ноября, 2013 - 22:02:05
Post Id



Новичок


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


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

[+]


PHP:
скопировать код в буфер обмена
  1. if ($_GET["num"] == 3){
  2.                                 $result_set = $order->resultOrder(0);
  3.                                 printResult($result_set);
  4.                         }elseif ($_GET["num"] == 6){
  5.                                 $result_set = $order->resultOrder(3);
  6.                                 printResult($result_set);
  7.                         }elseif ($_GET["num"] == 9){
  8.                                 $result_set = $order->resultOrder(6);
  9.                                 printResult($result_set);
  10.                         }elseif ($_GET["num"] == 12){
  11.                                 $result_set = $order->resultOrder(9);
  12.                                 printResult($result_set);
  13.                         }

возможно в цикле перебрать эту часть чтобы
$_GET["num"] == 3, а resultOrder(0), итерация 1
$_GET["num"] == 6, а resultOrder(3), итерация 2
$_GET["num"] == 9, а resultOrder(6), итерация 3
$_GET["num"] == 12, а resultOrder(9), итерация 4
возможно это вообще, само сабой не используя switch-case
спс
 
 Top
OrmaJever Модератор
Отправлено: 05 Ноября, 2013 - 22:09:45
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




77_well пишет:
$_GET["num"] == 3, а resultOrder(0), итерация 1

ну раз у вас не совпадают цифры то отнимите разницу.
PHP:
скопировать код в буфер обмена
  1. resultOrder((int)$_GET["num"] - 3);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
77_well
Отправлено: 05 Ноября, 2013 - 22:13:24
Post Id



Новичок


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


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

[+]


OrmaJever пишет:
77_well пишет:
а выборка в отдельном классе, а класс в отдельном файле

Ну дак предавайте $_GET["num"] в параметре метода класса.
В индексе
PHP:
скопировать код в буфер обмена
  1. $result_set = $order->resultOrder((int)$_GET['num']);


не получится $_GET['num'] принемает значения 3, 6, 9 и 12
а resultOrder 0, 3, 6 и 9
ни как не получается чтобы они принемали одно значение
$_GET['num'] зависет от построничной навигации
PHP:
скопировать код в буфер обмена
  1. $article = 3;// количество статей на странице
  2.                         $pages = $order->resultPages();//общее количество статей
  3.                         $total_pages = ceil($pages / $article);//получаем количество страниц
  4. for ($i=1; $i <= $total_pages; $i++){// запускаем цикл - количество итераций равно количеству страниц
  5.                                 echo '<a href="'.$_SERVER['PHP_SELF'].'?num='.$i*$article.'">'.$i."</a>\n";

а resultOrder от запроса выборки
PHP:
скопировать код в буфер обмена
  1. $result_set = $this->db->query("SELECT * FROM `order` LIMIT $size, 3");

(Добавление)
спс попробую
(Добавление)
спасибо все заработоло Радость

(Отредактировано автором: 05 Ноября, 2013 - 22:15:02)

 
 Top
biperch
Отправлено: 05 Ноября, 2013 - 22:26:25
Post Id



Частый посетитель


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


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




77_well пишет:
$_GET["num"] == 3, а resultOrder(0), итерация 1
$_GET["num"] == 6, а resultOrder(3), итерация 2
$_GET["num"] == 9, а resultOrder(6), итерация 3
$_GET["num"] == 12, а resultOrder(9), итерация 4


если 3 то 3/3-1 = 0
6 то 6/3-1=1

а вообще то я выше приводил пример когда используется не номер записи с которой начать а номер страницы в котором принимается 0 как первая страница.
и это исключает все эти мансы
 
 Top
deblogger
Отправлено: 06 Ноября, 2013 - 09:18:22
Post Id


Новичок


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


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

[+]


77_well пишет:
ни как не получается чтобы они принемали одно значение
$_GET['num'] зависет от построничной навигации


Кроме php вы явно нуждаетесь в изучении такого языка как ru

Если принять за неибежность такой могучий косяк с непреодолимой невозможностью нормализовать данные, то обойти его легко с помощью пар ключ-значение.

Цитата:
не получится $_GET['num'] принемает значения 3, 6, 9 и 12
а resultOrder 0, 3, 6 и 9


PHP:
скопировать код в буфер обмена
  1. $nav_map = array(0=>3, 6=>3, 9=>6, 12=>9);
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB