PHP.SU

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

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

> Найдено сообщений: 58
Andrey Отправлено: 02 Февраля, 2008 - 21:58:22 • Тема: glob() и количество • Форум: Программирование на PHP

Ответов: 3
Просмотров: 344
В одной из тем я спрашивал как найти файлы, удолетворяющие некоторому условию. Спасибо подсказали функцию glob(). Код

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. foreach (glob("pic/4894.*.*.jpg") as $filename) {
  4.     echo "$filename <br>" . "\n";  }
  5. ?>
  6.  


выдаёт нужный мне результат. Например, результат именно этого кода:
------------------------------
pic/4894.1.big.jpg
pic/4894.1.small.jpg
pic/4894.2.big.jpg
pic/4894.2.small.jpg
pic/4894.3.big.jpg
pic/4894.3.small.jpg
--------------------------------

Теперь вопрос как подсчитать количество файлов, для этого случая их 6.
И как имена этих файлов запомнить в массив:

pic[1]=pic/4894.1.big.jpg
pic[2]=pic/4894.1.small.jpg
pic[3]=pic/4894.2.big.jpg
pic[4]=pic/4894.2.small.jpg
pic[5]=pic/4894.3.big.jpg
pic[6]=pic/4894.3.small.jpg
Andrey Отправлено: 31 Января, 2008 - 22:18:39 • Тема: Форум захламляют СПАМом • Форум: Прочее

Ответов: 1
Просмотров: 23
На сайте поставил готовый форум phpBB. Уже года два всё прекрасно работает, но в последнее время ОЧЕНЬ много порно СПАМа. Какую можно поставить защиту?
Andrey Отправлено: 31 Января, 2008 - 21:50:59 • Тема: Помогите с логикой • Форум: Программирование на PHP

Ответов: 28
Просмотров: 1389
valenok пишет:
Andrey , scuter
А что, просто проверять на наличие следующей картинки в голову не приходит?
CODE (text):
скопировать код в буфер обмена
  1. while ( file_exist("xxx.".$i.".jpg") ) $i++;

Ладно, может быть с опытом ..

А вообще делаейте через глоб().
А теперь объясните мне почему через глоб() и какая проблема в методе в коде строкой выше.


Так коде строкой выше проверка прекращается, если нет какой-нить промежуточной картинки: например, есть 1, 2, 3, 6, 7 - он на 3 и оборвётся. Так?
Andrey Отправлено: 31 Января, 2008 - 11:35:57 • Тема: Помогите с логикой • Форум: Программирование на PHP

Ответов: 28
Просмотров: 1389
Dastar пишет:
Получаешь название картинки (ХХХ), дальше из каталога просто достаешь все файлы, в которых есть это самое название. Вродь была там одна функция, с помощью которой можно было это сделать...


А какая именно функция?
(Добавление)
scuter пишет:
да прикольная логика,
PHP:
скопировать код в буфер обмена
  1.  
  2. $n = 10;
  3. $dir = './som_dir/';
  4. for($i=1;$i<$n;$i++)
  5. .....
  6. .....
  7. //картинка
  8. print '<img src="'.$logimg.'">';
  9. //количество картинок
  10. print $numimg;
  11.  

код не проверял, но вроде должен работать.


логика может и прикольная Закатив глазки Только здесь ты заставляешь цикл гонять 10 раз, а если, картинок, допустим 12? Можно, конечно выставить до 1000, но это же будет сильно тормозить... У меня вопрос, как подсчитать количество картинок, не ограничивая число итераций.
Andrey Отправлено: 30 Января, 2008 - 23:06:18 • Тема: Помогите с логикой • Форум: Программирование на PHP

Ответов: 28
Просмотров: 1389
Andrey пишет:
Интернет магазин. К каждому товару есть несколько картинок в формате XXXX.1.jpg, XXXX.2.jpg .... XXXX.n.jpg. То есть картинок максимум n штук, минимум - может ни одной небыть. В каталоге товара показывается картинка XXXX.1.jpg, а в карточке товара показываются все картинки ( от XXXX.1.jpg до XXXX.n.jpg). Если картинки XXXX.1.jpg на сервере нет, то вместо этой картинки картинка с надписью нет изображения (no.jpg).
Вопрос такой: как описать логику, чтобы скрипт если не находит картинку XXXX.1.jpg, подставлял в каталог картинку XXXX.2.jpg, если не находил, её, то XXXX.3.jpg и т.д. перебирал до n. И только если скрипт ненайдёт ни одной картинки с имененами от XXXX.1.jpg до XXXX.n.jpg, то подставлял кактинку no.jpg.
В карточке товара структура таблицы, где первый столбец - картинки, а второй описания и т.п. Как описать логику, чтобы скрипт подсчитавал, сколько есть картинок (например XXXX.1.jpg, XXXX.2.jpg = 2 картинки; XXXX.3.jpg = 1 картинка; XXXX.2.jpg, XXXX.7.jpg, XXXX.10.jpg = 3 картинки). Это надо для формирования количества строк таблицы.


Поставим вопрос по-другому.
Для каждого товара есть какое-то количество картинок от XXXX.1.jpg до XXXX.n.jpg.
Как узнать чему равно n?
Можно использовать цикл на проверку существования файла, например while. Но какое придумать условие? Я так понимаю, что можно задать шаблон XXXX.*.jpg, но не получается у меня Огорчение
Andrey Отправлено: 20 Января, 2008 - 15:24:20 • Тема: Помогите с логикой • Форум: Программирование на PHP

Ответов: 28
Просмотров: 1389
valenok пишет:
Вот и запишите file_exist в цикле.
Может пока будете писать - появятся идеи что делать с file_exist.
(Добавление)
p.s. Сколько конструкций циклов в php ?
Советую познакомиться со всеми


Мне известны только 3: while, do..while и for.
Я так понимаю, в моём случае подходят только while или do..while.
Но придумать условия не могу. Огорчение
Andrey Отправлено: 18 Января, 2008 - 23:53:41 • Тема: Помогите с логикой • Форум: Программирование на PHP

Ответов: 28
Просмотров: 1389
OverNik пишет:
Я так понял 3 картинки это большая среднея и маленькая (розмеры) и хранятса они в базе вот таким вот чудом 1.jpg|2.jpg|3.jpg или |||.


Нет, ты не так понял. Все три картинки - они одного размера. Вот ссылки с моего магазина:
1. Каталог товара
http://www[dot]magazinigrushek[dot]ru/index.php?page=7
Здесь как видно для артикулов 5380 и 5416 поскольку нет картинки с именем 5380.1.jpg (арт. 5380) и 5416.1.jpg, то выдает no.jpg
Но если зайти в карточку товара, то опять 1-я картинка no.jpg, а вторая есть.
Соответственно, если на серваке не найдётся 1 и 2 картинки, а будет только третья, то в карточке товара будут две картинки no.jpg. Я же хочу, чтобы, допустим, если нет 1 и 2 картинок, то в каталоге товара была не no.jpg (как сейчас), а 3-я картинка и в карточке товара тоже, чтобы отображались только те картинки, которые есть (если есть хотя бы одна). Если картинок нет, то в карточке товара первого столбца для картинок вообще бы небыло.

Если есть все, допустим 3 картинки, например, http://www[dot]magazinigrushek[dot]ru/sh[dot][dot][dot]hp?product_id=40
то здесь всё нормально
Andrey Отправлено: 18 Января, 2008 - 16:41:06 • Тема: Помогите с логикой • Форум: Программирование на PHP

Ответов: 28
Просмотров: 1389
valenok пишет:
поиск и делайте. file_exists


Как организовать поиск, если я не знаю сколько картинок? Для одного товара их может быть 20, а для другого - ни одной... file_exist можно запистить в цикле, но я не знаю до какого значения в цикле ставить счётчик.
Andrey Отправлено: 18 Января, 2008 - 00:48:39 • Тема: Помогите с логикой • Форум: Программирование на PHP

Ответов: 28
Просмотров: 1389
Dastar пишет:
Я бы сделал немного по другому:
есть таблица, в которой информация на все товары. И одна из ячеек - это ячейка с именами картинок. Каждая картинка разделяется каким-нибуть знаком (к примеру #).
Потом получаю эту ячейку и с помощью функции explode() получаю все картинки.
И тогда их просто вставляю в скрипт.


Не совсем представляю как это сделать...
Andrey Отправлено: 17 Января, 2008 - 23:04:53 • Тема: Помогите с логикой • Форум: Программирование на PHP

Ответов: 28
Просмотров: 1389
Dastar пишет:
Я не понял, у тебя в одной ячейке несколько названий картинок, или каждая строка - отдельная картинка?


Каждая строка отдельная картинка - это первый столбец и во втором слолбце уже отдельная таблица на описаные, возраст, цена и т.д.

Dastar пишет:

Для группы картинок к одному товару ХХХХ - одно имя, или изменяется от картинки к картинке?


Товар XXXX. К нему картинки XXXX.1.jpg .... XXXX.n.jpg
Товар YYYY. К нему картинки, например, YYYY.3.jpg и YYYY.5.jpg
Товар ZZZZ. К нему картинки, например, ZZZZ.2.jpg, ZZZZ.5.jpg и ZZZZ.6.jpg
Andrey Отправлено: 17 Января, 2008 - 22:38:24 • Тема: Помогите с логикой • Форум: Программирование на PHP

Ответов: 28
Просмотров: 1389
Интернет магазин. К каждому товару есть несколько картинок в формате XXXX.1.jpg, XXXX.2.jpg .... XXXX.n.jpg. То есть картинок максимум n штук, минимум - может ни одной небыть. В каталоге товара показывается картинка XXXX.1.jpg, а в карточке товара показываются все картинки ( от XXXX.1.jpg до XXXX.n.jpg). Если картинки XXXX.1.jpg на сервере нет, то вместо этой картинки картинка с надписью нет изображения (no.jpg).
Вопрос такой: как описать логику, чтобы скрипт если не находит картинку XXXX.1.jpg, подставлял в каталог картинку XXXX.2.jpg, если не находил, её, то XXXX.3.jpg и т.д. перебирал до n. И только если скрипт ненайдёт ни одной картинки с имененами от XXXX.1.jpg до XXXX.n.jpg, то подставлял кактинку no.jpg.
В карточке товара структура таблицы, где первый столбец - картинки, а второй описания и т.п. Как описать логику, чтобы скрипт подсчитавал, сколько есть картинок (например XXXX.1.jpg, XXXX.2.jpg = 2 картинки; XXXX.3.jpg = 1 картинка; XXXX.2.jpg, XXXX.7.jpg, XXXX.10.jpg = 3 картинки). Это надо для формирования количества строк таблицы.
Andrey Отправлено: 13 Сентября, 2007 - 20:17:00 • Тема: Помогите разобраться • Форум: Программирование на PHP

Ответов: 10
Просмотров: 544
evgenijj пишет:
Andrey пишет:

Усложняю задачу.


Ты наши знания проверяешь? Улыбка


Себе усложняю заданиеУлыбка Если бы я сомневался в Ваших знаниях, я бы не писал на форуме. Мне серьёзно нужна помощь. Что я делаю не так?
Andrey Отправлено: 12 Сентября, 2007 - 22:44:35 • Тема: Помогите разобраться • Форум: Программирование на PHP

Ответов: 10
Просмотров: 544

Усложняю задачу. Сначала у меня был поиск по артикулу. Теперь я к этой форме добавляю поля поиск по цене "от" ($pricefrom)и "до" ($priceto)

class.eshop.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. ....
  4. function find($artorname, $pricefrom, $priceto)
  5. {              
  6. if($artorname<>"")
  7.         {
  8.         $sql="select * from product where product_on_off=0 AND product_articul LIKE '%".$artorname."%' OR product_title LIKE '%".$artorname."%'";
  9.         $res=$this->conn->query($sql);
  10.         $num_product=$res->num_rows;
  11.         $this->np=ceil($num_product / $this->MAX_COUNT);
  12.         @ $page = intval($_GET['page']);
  13.         if ($page < 1 || $page > $this->np) {$page = 1; }
  14.         $sql='SELECT * FROM product where product_on_off=0 AND product_articul LIKE "%'.$artorname.'%" OR product_title LIKE "%'.$artorname.'%"
  15.                                                 ORDER BY product_articul LIMIT '.(($page - 1) * $this->MAX_COUNT).', '.$this->MAX_COUNT;               
  16.         $_SESSION['find_artorname']=1;
  17.                                 }
  18. elseif ($pricefrom<>"" && $priceto<>"")
  19.                                 {
  20.         $sql="select * from product where product_on_off=0 AND product_price>".$pricefrom."   AND product_price<".$priceto;
  21.         $res=$this->conn->query($sql);
  22.         $num_product=$res->num_rows;
  23.         $this->np=ceil($num_product / $this->MAX_COUNT);
  24.         @ $page = intval($_GET['page']);
  25.         if ($page < 1 || $page > $this->np) {$page = 1; }
  26.         $sql='SELECT * FROM product where product_on_off=0 AND product_price>'.$pricefrom.'   AND product_price<'.$priceto.'
  27.                                                 ORDER BY product_articul LIMIT '.(($page - 1) * $this->MAX_COUNT).', '.$this->MAX_COUNT;               
  28.            $_SESSION['find_price']=1;
  29.                                 }
  30.           $res=$this->conn->query($sql);                     <--------------- 648 строка
  31.           if (!$res)
  32.         return false;
  33.         $num_product=$res->num_rows;
  34.         if ($num_product==0)
  35.         return false;
  36.         $res=$this->db_result_to_array($res);
  37.         return $res;
  38.         return $np;
  39. }
  40.  
  41.    function page_find()  
  42.   {  
  43.  global $artorname;
  44.  
  45.   @ $page = intval($_GET['page']);  
  46.   echo 'Страницы: ';  
  47.   for ($i = 1; $i <= $this->np; $i++) {  
  48.   if (@ $page != $i) {  
  49.    print '<a href="?page='.$i.'&artorname='.$artorname.'"> ['.$i.']</a>  ';}  
  50.   else {  print '<b>>'.$i.'<</b> '; }  
  51.   }
  52.   }
  53.  
  54.     function page_find_price()
  55.         {  
  56.  global $pricefrom;
  57.  global $priceto;
  58.  
  59.   @ $page = intval($_GET['page']);  
  60.   echo 'Страницы: ';  
  61.   for ($i = 1; $i <= $this->np; $i++) {  
  62.   if (@ $page != $i) {  
  63.    print '<a href="?page='.$i.'&pricefrom='.$pricefrom.'&priceto='.$priceto.'"> ['.$i.']</a>  ';}  
  64.   else {  print '<b>>'.$i.'<</b> '; }  
  65.   }
  66.   }
  67. ....
  68. ?>
  69.  


find.php
PHP:
скопировать код в буфер обмена
  1.  
  2. include('class.eshop.php');
  3. $eshop=new EshopDB();
  4. @ $artorname=mysql_escape_string(stripslashes($_GET['artorname']));
  5. @ $agefrom=mysql_escape_string(stripslashes($_GET['agefrom']));
  6. @ $ageto=mysql_escape_string(stripslashes($_GET['ageto']));
  7. @ $pricefrom=mysql_escape_string(stripslashes($_GET['pricefrom']));
  8. @ $priceto=mysql_escape_string(stripslashes($_GET['priceto']));
  9. @ $agefrom=$agefrom*1;
  10. @ $ageto=$ageto*1;
  11. $product_array=$eshop->find($artorname, $agefrom, $ageto, $pricefrom, $priceto);
  12. $np=$eshop->np;
  13. $eshop->display_product_find($product_array);
  14. if($_SESSION['find_artorname']==1){ $eshop->page_find(); }
  15. elseif($_SESSION['find_price']==1){ $eshop->page_find_price(); }
  16. ?>
  17.  


Когда в форме поиска я ввожу цену "от" и "до", то всё нормально - выводит мне список товара, удолетворяющий данному условию и страницы [1][2]....
Но когда я нажимаю на какую-нибудь из страниц: [1], [2] и т.д. мне браузер выдает ошибку следущего содержания:

-------------------------------- -------------------------------- -----------------
Notice: Undefined variable: sql in C:Program FilesApache GroupApache2htdocsmyshop05class. eshop.php on line 648
Warning: mysqli::query() [function.mysqli-query]: Empty query in C:Program FilesApache GroupApache2htdocsmyshop05class. eshop.php on line 648
-------------------------------- -------------------------------- ---------------------------

Если же я запускаю по отдельности только форму для поиска по цене, то есть вместо
PHP:
скопировать код в буфер обмена
  1.  
  2. if($_SESSION['find_artorname']==1){ $eshop->page_find(); }
  3. elseif($_SESSION['find_price']==1){ $eshop->page_find_price(); }
  4.  

оставляю
PHP:
скопировать код в буфер обмена
  1.  
  2. if($_SESSION['find_price']==1){ $eshop->page_find_price(); }
  3.  

то всё работает корректно
Andrey Отправлено: 11 Сентября, 2007 - 22:47:57 • Тема: Помогите разобраться • Форум: Программирование на PHP

Ответов: 10
Просмотров: 544
Огромное спасибо! Всё работает
Andrey Отправлено: 10 Сентября, 2007 - 23:49:04 • Тема: Помогите разобраться • Форум: Программирование на PHP

Ответов: 10
Просмотров: 544
Задача такая: на сайте есть форма поиска. Человек вводит в поле поиска артикул или часть артикула товара и ему необходимо предоставить список товара, в артикуле которого встречается то, что он ввел в поле поиска.
Из формы методом POST забирается то, что человек ввёл ($artorname) и передаётся на обработку скрипту find.php.
find.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. @ $artorname=mysql_escape_string(stripslashes($_POST['artorname']));
  4. include('class.eshop.php');
  5. $eshop=new EshopDB();
  6. $product_array=$eshop->find($artorname);
  7. $np=$eshop->np;
  8. $eshop->display_product_find($product_array);
  9. $eshop->page_idx();
  10. ?>
  11.  


class.eshop.php
PHP:
скопировать код в буфер обмена
  1.  
  2. function find($artorname)
  3. {                              
  4. $sql="select * from product where  product_articul LIKE '%".$artorname."%'";
  5. $res=$this->conn->query($sql);
  6. $num_product=$res->num_rows;
  7. $this->np=ceil($num_product / $this->MAX_COUNT);
  8. @ $page = intval($_GET['page']);
  9. if ($page < 1 || $page > $this->np) {$page = 1; }
  10. $sql='SELECT * FROM product where product_on_off=0 AND product_articul LIKE "%'.$artorname.'%"
  11. ORDER BY product_articul LIMIT '.(($page - 1) * $this->MAX_COUNT).', '.$this->MAX_COUNT;               
  12. $res=$this->conn->query($sql);
  13. if (!$res)
  14. return false;
  15. $num_product=$res->num_rows;
  16. if ($num_product==0)
  17. return false;
  18. $res=$this->db_result_to_array($res);
  19. return $res;
  20. return $np;}
  21.  
  22. function db_result_to_array($res) {
  23. $res_array=array();
  24. for ($count=0; $row= $res->fetch_assoc(); $count++)
  25. $res_array[$count] = $row;
  26. return $res_array;
  27.                                            }
  28.  
  29. function page_idx()
  30. {
  31. @ $page = intval($_GET['page']);
  32. echo 'Страницы: ';
  33. for ($i = 1; $i <= $this->np; $i++) {
  34. if (@ $page != $i) {
  35.  print '<a href="?page='.$i.'"> ['.$i.']</a>  ';}
  36. else {  print '<b>>'.$i.'<</b> '; }
  37. }      
  38.  


На первый взгляд всё работает. Браузер мне выдаёт нужное количество товара, делит на правильное количество страниц, что-то типа:

товар 1
товар 2
.......

Страницы: [1][2][3]....

Но когда я нажимаю на 2, 3 и т. д. страницы, браузер мне сбрасывает фильтр, а высыпает весь товар из базы.
То есть, допустим, в базе 100 единиц товара, условию поиска удолетворяют 10. На странице выводим по 4 единицы товара. В итоге для начала получаем 25 страниц - всё отображается корректно: [1][2][3]....[25]. Когда щёлкаешь на каждую из страниц - всё правильно. После ввода условия отображаются [1][2][3] - это тоже всё хорошо. Но, когда щёлкаю на [2] или [3] получаю:
[1][2][3]....[25].



Страниц (4): [1] 2 3 4 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB