PHP.SU

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

Страниц (81): В начало « ... 73 74 75 76 77 78 79 [80] 81 »

> Найдено сообщений: 1209
evgenijj Отправлено: 19 Ноября, 2006 - 00:44:44 • Тема: Редакторы PHP • Форум: Программное обеспечение

Ответов: 421
Просмотров: 257469
Раньше пользовался PHP Expert Editor. Хороший редактор - но только для PHP. Главное - для жителей СНГ бесплатен. Два-три месяца назад поставил себе NotePad++. Подсвечивает синтаксис около 30 языков программирования. И что не менее важно - CSS, SQL, HTML, XML. Легкая настройка подсветки синтаксиса. Описывать все возможности - долго получится. Лучше скачать и попробовать самому. Программа бесплатная.
evgenijj Отправлено: 13 Ноября, 2006 - 09:37:24 • Тема: PHP & MySQL • Форум: Программирование на PHP

Ответов: 19
Просмотров: 2493
Maksir пишет:
Нет.. структуру БД понять не могу...

А это что, не база?! Ладно, вот еще вариант:
PHP:
скопировать код в буфер обмена
  1.  
  2. Таблица CATEGORIES:
  3.  
  4. 1;0;Извещатели охранные;1
  5. 2;0;Извещатели пожарные;2
  6. 3;0;Приборы приемно-контрольные;3
  7. 6;1;Извещатели охранные магнитоконтактные;1
  8. 7;1;Извещатели охранные электроконтактные;2
  9. 8;1;Извещатели охранные ударноконтактные;3
  10. 9;2;Извещатели пожарные тепловые;1
  11. 10;2;Извещатели пожарные дымовые;2
  12. 11;2;Извещатели пожарные комбинированные;3
  13. 17;3;Приборы приемно-контрольные охранные;1
  14. 18;3;Приборы приемно-контрольные пожарные;2
  15. 19;3;Приборы приемно-контрольные охранно-пожарные;3
  16.  
  17. Таблица PRODUCTS:
  18.  
  19. 1;6;Извещатель охранный магнитоконтактный ИО 102-2;Технические характеристики ИО 102-2;1
  20. 2;6;Извещатель охранный магнитоконтактный ИО 102-4;Технические характеристики ИО 102-4;2
  21. 3;6;Извещатель охранный магнитоконтактный ИО 102-14;Технические характеристики ИО 102-14;3
  22. 4;7;Извещатель охранный электроконтактный ИО 201-1;Технические характеристики ИО 201-1;1
  23. 5;7;Извещатель охранный электроконтактный ВПК 2112;Технические характеристики ВПК 2112;2
  24. 6;8;Извещатель охранный ударноконтактный "Окно-4";Технические характеристики "Окно-4";1
  25. 7;8;Извещатель охранный ударноконтактный "Окно-5";Технические характеристики "Окно-5";2
  26. 8;8;Извещатель охранный ударноконтактный "Окно-6";Технические характеристики "Окно-6";3
  27. 9;9;Извещатель пожарный тепловой ИП 114-01;Технические характеристики ИП 114-01;1
  28. 10;9;Извещатель пожарный тепловой ИП 101-1A;Технические характеристики ИП 101-1A;2
  29. 11;9;Извещатель пожарный тепловой ИП 101-30;Технические характеристики ИП 101-30;3
  30. 12;10;Извещатель пожарный дымовой ИП 212-3СМ;Технические характеристики ИП 212-3СМ;1
  31. 13;10;Извещатель пожарный дымовой ИП 212-18СИ;Технические характеристики ИП 212-18СИ;2
  32. 14;11;Извещатель пожарный комбинированный ИП 212/101-78-А1;Технические характеристики ИП 212/101-78-А1;1
  33. 15;11;Извещатель пожарный комбинированный ИП 212/101-18 А3R1;Технические характеристики ИП 212/101-18 А3R1;2
  34. и т.д.
  35.  
  36. Запрос на выборку корневых категорий:
  37. SELECT id_ctg, title FROM categories WHERE id_parent=0 ORDER BY sortorder;
  38. Получим записи
  39. id_ctg=1 title="Извещатели охранные"
  40. id_ctg=2 title="Извещатели пожарные"
  41. id_ctg=3 title="Приборы приемно-контрольные"
  42.  
  43. Запрос на выборку подкатегорий категории id_ctg=1 title="Извещатели охранные":
  44. SELECT id_ctg, title FROM categories WHERE id_parent=1 ORDER BY sortorder;
  45. Получим записи
  46. id_ctg=6 title="Извещатели охранные магнитоконтактные"
  47. id_ctg=7 title="Извещатели охранные электроконтактные"
  48. id_ctg=8 title="Извещатели охранные ударноконтактные"
  49.  
  50. Запрос на выборку товарных позиций категории id_ctg=6 title="Извещатели охранные магнитоконтактные":
  51. SELECT id_prd, title FROM products WHERE id_ctg=6 ORDER BY sortorder;
  52. Получим записи
  53. id_prd=1 title="Извещатель охранный магнитоконтактный ИО 102-2"
  54. id_prd=2 title="Извещатель охранный магнитоконтактный ИО 102-4"
  55. id_prd=3 title="Извещатель охранный магнитоконтактный ИО 102-14"
  56.  

evgenijj Отправлено: 12 Ноября, 2006 - 22:02:56 • Тема: PHP & MySQL • Форум: Программирование на PHP

Ответов: 19
Просмотров: 2493
Так понятнее?

1;0;Категория_1;1
2;0;Категория_2;2
3;0;Категория_3;3
4;1;Категория_11;1
5;1;Категория_12;2
6;2;Категория_21;1
7;2;Категория_22;2

1;4;Товар_1;Описание_товара_1;1
2;4;Товар_2;Описание_товара_2;2
3;5;Товар_3;Описание_товара_3;1
4;5;Товар_4;Описание_товара_4;2
5;6;Товар_5;Описание_товара_5;1
6;3;Товар_6;Описание_товара_6;1
7;3;Товар_7;Описание_товара_7;2

Разделитель - ";"
evgenijj Отправлено: 12 Ноября, 2006 - 21:36:21 • Тема: PHP & MySQL • Форум: Программирование на PHP

Ответов: 19
Просмотров: 2493
Цитата:

Бился сегодня целый день. Хотел поставить условие таким образом, что бы было сравнение с последним id категории. Но, в цикле, естественно - не получается... На выходе от одной переменной получаются сразу все значения. И как это разделить, что бы в цикл передать для условия только последний id (замыкающего) этот id равен категории.

Честно - ничего не понял. Я примерно представляю, что тебе нужно - но у тебя на сайте и так все работает. Я бы сделал примерно так (код в работе не проверял - сам тестируй):
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. // +----------------+
  5. // |root_category 1 |
  6. // +----------------+
  7. // |                 +---------------+
  8. // +-----------------|subcategory 11 |
  9. // |                 +---------------+
  10. // |                 |                +---------+
  11. // |                 +----------------|product 1|
  12. // |                 |                +---------+
  13. // |                 |                +---------+
  14. // |                 +----------------|product 2|              
  15. // |                                  +---------+
  16. // |                 +---------------+
  17. // +-----------------|subcategory 12 |
  18. // |                 +---------------+
  19. // |                 |                +---------+
  20. // |                 +----------------|product 3|
  21. // |                                  +---------+
  22. // |                 +---------------+
  23. // +-----------------|subcategory 13 |
  24. //                   +---------------+
  25. //                   |                +---------+
  26. //                   +----------------|product 4|
  27. //                   |                +---------+
  28. //                   |                +---------+
  29. //                   +----------------|product 5|              
  30. //                                    +---------+
  31. // Картинки:
  32. // |
  33. // +- continue.gif
  34. // |
  35. //
  36. // |
  37. // | vertical.gif
  38. // |
  39. //
  40. // |
  41. // +- end.gif
  42.  
  43. // Корневые категории - для верхнего меню
  44. $query = "SELECT id_ctg, title FROM categories WHERE id_parent=0 ORDER BY sortorder";
  45. $res = mysql_query( $query );
  46. while ( $ctg = mysql_fetch_array( $res ) )
  47. {
  48.         $root[] = $ctg;
  49.         echo "<a href='".$_SERVER["PHP_SELF"]."?id_ctg="$ctg["id_ctg"]."'>".$ctg["title"]."</a>&nbsp;|";
  50. }
  51.  
  52. if ( !isset( $_GET["id_ctg"] ) ) $_GET["id_ctg"] = $root[0]["id_ctg"];
  53.  
  54. // Получаем подкатегории текущей корневой категории
  55. $query = "SELECT id_ctg, title FROM categories WHERE id_parent=".$_GET["id_ctg"]." ORDER BY sortorder";
  56. $res = mysql_query( $query );
  57. $cnt_ctg = mysql_num_rows( $res );
  58. $row_ctg = 1;
  59.  
  60. if ( $cnt_ctg )
  61. {
  62.         echo "<table>";
  63.         while ( $ctg = mysql_fetch_array( $res ) )
  64.         {
  65.                 if ( $cnt_ctg == $row_ctg )
  66.                 {
  67.                         echo "<tr><td>end.gif</td>
  68. <td><a href='".$_SERVER["PHP_SELF"]."?id_ctg="$ctg["id_ctg"]."'>".$ctg["title"]."</a></td>
  69. <td></td></tr>";
  70.                         $tmp = 1;
  71.                 }
  72.                 else
  73.                 {
  74.                         echo "<tr><td>continue.gif</td>
  75. <td><a href='".$_SERVER["PHP_SELF"]."?id_ctg="$ctg["id_ctg"]."'>".$ctg["title"]."</a></td>
  76. <td></td></tr>";
  77.                         $tmp = 0;                      
  78.                 }
  79.                        
  80.                 $q = "SELECT id_prd, title FROM products WHERE id_ctg=".$ctg["id_ctg"]." ORDER BY sortorder";
  81.                 $r = mysql_query( $q );
  82.                 $cnt_prd = mysql_num_rows( $r );
  83.                 $row_prd = 1;
  84.                
  85.                 if( $cnt_prd )
  86.                 {
  87.                         while( $prd = mysql_fetch_array( $r ) )
  88.                         {
  89.                                 if ( $cnt_prd == $row_prd )
  90.                                 {
  91.                                         if ( $tmp )
  92.                                         {
  93.                                                 echo "<tr><td></td>
  94. <td>end.gif</td>
  95. <td><a href='".$_SERVER["PHP_SELF"]."?id_prd=".$prd["id_prd"]."'>".$prd["title"]."</a>
  96. </td></tr>";
  97.                                         }
  98.                                         else
  99.                                         {
  100.                                                 echo "<tr><td>vertical.gif</td>
  101. <td>end.gif</td><td><a href='".$_SERVER["PHP_SELF"]."?id_prd=".$prd["id_prd"]."'>".$prd["title"]."</a>
  102. </td></tr>";
  103.                                                
  104.                                         }
  105.                                 }
  106.                                 else
  107.                                 {
  108.                                         if ( $tmp )
  109.                                         {
  110.                                                 echo "<tr><td></td><td>continue.gif</td>
  111. <td><a href='".$_SERVER["PHP_SELF"]."?id_prd=".$prd["id_prd"]."'>".$prd["title"]."</a>
  112. </td></tr>";
  113.                                         }
  114.                                         else
  115.                                         {
  116.                                                 echo "<tr><td>vertical.gif</td><td>continue.gif</td>
  117. <td><a href='".$_SERVER["PHP_SELF"]."?id_prd=".$prd["id_prd"]."'>".$prd["title"]."</a>
  118. </td></tr>";                                   
  119.                                         }
  120.                                 }
  121.                                 $row_prd = $row_prd + 1;
  122.                         }
  123.                 }
  124.                
  125.                 $row_ctg = $row_ctg + 1;
  126.         }
  127.         echo "</table>";
  128. }
  129.  
  130. ?>
  131.  
evgenijj Отправлено: 12 Ноября, 2006 - 17:44:50 • Тема: PHP & MySQL • Форум: Программирование на PHP

Ответов: 19
Просмотров: 2493
Как мало человеку для счастья нужно Улыбка. Осталось сделать еще один шаг - признать тот факт, что структура БД не оптимальна. Постараюсь объяснить. Итак, есть каталог продукции некоторой фирмы. Для хранения информации о товарах и категориях используем две таблицы: CATEGORIES и PRODUCTS. Категория может содержать вложенные категории и/или товары. Проводя аналогию с файловой системой, директория может содержать вложенные директории и/или файлы. Некоторые из этих директорий могут лежать в корне логического диска ( напимер, D: ). Но это не делает их какими-то "особенными", чтобы хранить информацию о них в отдельной таблице БД. Каждый элемент таблиц CATEGORIES и PRODUCTS содержит ссылку на родительский элемент - id_parent.
Таблица CATEGORIES:
id_ctg - уникальный идентификатор категории
id_parent - ссылка на родительский элемент
title - название категории
sortorder - порядок сортировки
Таблица PRODUCTS:
id_prd - уникальный идентификатор товарной позиции
id_ctg - ссылка на родительский элемент
title - наименование товарной позиции
description - описание товара
sortorder - порядок сортировки

1;0;Категория 1;1
2;0;Категория 2;2
3;0;Категория 3;3
4;1;Категория 11;1
5;1;Категория 12;2
6;2;Категория 21;1
7;2;Категория 22;2

1;4;Товар 1;Описание товара 1;1
2;4;Товар 2;Описание товара 2;2
3;5;Товар 3;Описание товара 3;1
4;5;Товар 4;Описание товара 4;2
5;6;Товар 5;Описание товара 5;1
6;3;Товар 6;Описание товара 6;1
7;3;Товар 7;Описание товара 7;2

PHP:
скопировать код в буфер обмена
  1.  
  2. Категория 1
  3.   Категория 11
  4.     Товар 1
  5.     Товар 2
  6.   Категория 12
  7.     Товар 3
  8.     Товар 4
  9. Категория 2
  10.   Категория 21
  11.     Товар 5
  12.   Категория 22
  13.     Пустая категория
  14. Категория 3
  15.   Товар 6
  16.   Товар 7
  17.  

Чтобы получить из БД корневые категории (в твоей терминологии - каталоги) делаем запрос:
PHP:
скопировать код в буфер обмена
  1.  
  2. SELECT id_ctg, title FROM categories WHERE id_parent=0 ORDER BY sortorder;
  3.  

И не надо никакой третьей таблицы - а то она как пятое колесо в телеге: не несет никакой функциональной нагрузки, но создает дополнительные трудности при кодировании.
evgenijj Отправлено: 10 Ноября, 2006 - 14:25:52 • Тема: PHP & MySQL • Форум: Программирование на PHP

Ответов: 19
Просмотров: 2493
Во-первых, неправильно спроектирована структура БД. Здесь искусственно накладывается ограничение на уровень вложенности. Трехуровневый каталог - три таблицы. А если понадобится создать еще один уровень - создашь еще одну таблицу SUPERCATALOG? А еще один - MEGACATALOG? В твоем примере нет принципиальной разницы между каталогом и категорией. Каталог - это категория, для которой parentID=0 ( или NULL - это уж кому как больше нравится ).

Теперь, что касается картинки. Положим, мы выбираем из БД категории, для которых parentID=5:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $query = "SELECT id_ctg, title FROM categories WHERE parentID=5 ORDER BY sortorder";
  4. $res = mysql_query( $query );
  5. $cnt = mysql_num_rows( $res )
  6. if ( $cnt )
  7. {
  8.     $row = 1;
  9.     echo "<table>";
  10.     while( $ctg = mysql_fetch_array( $res ) )
  11.     {
  12.         if ( $row == $cnt )
  13.             echo "<tr><td><img src='end.gif' alt=''></td><td>".$ctg["title"]."</td></tr>";
  14.         else
  15.             echo "<tr><td><img src='continue.gif' alt=''></td><td>".$ctg["title"]."</td></tr>";
  16.         $row = $row + 1;
  17.     }
  18.     echo "</table>";
  19. }
  20. else
  21. {
  22.     echo "Пустая категория";
  23. }
  24. ?>
  25.  
evgenijj Отправлено: 07 Ноября, 2006 - 20:49:16 • Тема: даже не знаю как сказать что мне нужно... • Форум: Программирование на PHP

Ответов: 2
Просмотров: 441
В php.ini выставить

Или так:
evgenijj Отправлено: 26 Октября, 2006 - 13:39:20 • Тема: помогите разобраться с категориями • Форум: Программирование на PHP

Ответов: 2
Просмотров: 509
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. // Получаем дерево категорий
  4. $categories = get_ctgs_tree( 0, 0 );
  5. echo "<h3>Дерево каталога</h3>";
  6.  
  7. foreach ( $categories as $ctg )
  8. {
  9.         echo "<div style='margin-left:".($ctg[2]*15)."px'>
  10.         <img src='/images/admin/point_menu.gif' alt=''>&nbsp;
  11.         <a href='".$_SERVER["PHP_SELF"]."?id_ctg=".$ctg[0]."'>".$ctg[1]."</a></div>";
  12. }
  13.  
  14. // Функция возвращает дерево категорий в виде массива
  15. function get_ctgs_tree($parent, $level)
  16. {
  17.         $q = db_query("SELECT id_ctg, title
  18.         FROM ".TABLE_CATEGORIES." WHERE id_parent=".$parent." ORDER BY title")
  19.         or die (db_error());
  20.         $ctg = array(); // категории
  21.         while ($row = db_fetch_row($q))
  22.         {
  23.                 // Уровень вложенности категории
  24.                 $row[2] = $level;
  25.                 $ctg[] = $row;
  26.                 // получаем подкатегории для текущей категории
  27.                 $children = get_ctgs_tree($row[0], $level+1);
  28.                 // добавляем детей текущей категории в конец массива $ctg[]
  29.                 for ($j=0; $j<count($children); $j++)
  30.                 {
  31.                         $ctg[] = $children[$j];
  32.                 }
  33.         }
  34.  
  35.         return $ctg;
  36. }
  37. ?>
  38.  
evgenijj Отправлено: 18 Октября, 2006 - 15:19:49 • Тема: Гляньте кому не лень ? • Форум: Прочее

Ответов: 11
Просмотров: 187
Попробуй открыть сайт в браузере FireFox - левое меню на половину экрана. Над версткой придется поработать. И к чему этот нестандартный тег MARQUEE (бегущая строка), да к тому же нерабочий.
evgenijj Отправлено: 17 Октября, 2006 - 13:25:03 • Тема: Нужно правильно файл сохранить. • Форум: Программирование на PHP

Ответов: 2
Просмотров: 560
Ты установил директорию, в которой нет файла index.html -- это имя хранится в переменной $path. Далее в этой директории ты создаешь новый файл
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $fnew = fopen($path.$nfile, "w");
  3.  

После зачем-то проверяешь, а вдуг FreeBSD не создала этот файл. Положим, что так -- у тебя нет прав на запись в эту директорию. Ты намеренно вводишь пользователя в заблуждение, извещая его о том, что файл существует:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. if(!file_exists($path.$nfile))
  3. {
  4.   print "<script>alert('File exist.')</script>";
  5. }
  6.  

И далее, назависимо от результатов проверки пишешь в этот вновь созданный файл.

Вызывает также некоторое сомнение условие:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. if(!file_exists($file_1) or !file_exists($file_2))
  3. {
  4.   $path = "../_base/".$_GET['ad']."/";
  5. }
  6. else
  7. {
  8.   $path = "../_base/".$_GET['ad']."/_data/";
  9. }
  10.  

Если в директории
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $path = "../_base/_ad/"
  3.  

лежит файл index.html или файл index.htm то новый файл с именем $nfile будет опять записан в директорию

вполне возможно, перезаписав уже существующий. Новый файл будет записан в директорию
CODE (text):
скопировать код в буфер обмена
  1. $path = "../_base/_ad/_data/"

только если в директории

лежат оба файла: и index.htm и index.html.
evgenijj Отправлено: 17 Октября, 2006 - 11:54:25 • Тема: вставка с проверкой в несколько таблиц • Форум: SQL и Архитектура БД

Ответов: 3
Просмотров: 104
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $query = "SELECT id FROM country WHERE country_name='".$_POST["country"]."'";
  4. $res = mysql_query ( $query );
  5. if ( mysql_num_rows( $res ) > 0 )
  6. {
  7.         $id_country = mysql_result( $res, 0, 0 );      
  8. }
  9. else
  10. {
  11.         // Предполагается, что первичный ключ id снабжен механизмом AUTO_INCREMENT
  12.         $query = "INSERT INTO country (country_name) VALUES ('".$_POST["country"]."')";
  13.         mysql_query( $query );
  14.         $id_country = mysql_insert_id();
  15. }
  16.  
  17. $query = "SELECT id FROM director WHERE director_name='".$_POST["director"]."'";
  18. $res = mysql_query ( $query );
  19. if ( mysql_num_rows( $res ) > 0 )
  20. {
  21.         $id_director = mysql_result( $res, 0, 0 );     
  22. }
  23. else
  24. {
  25.         // Предполагается, что первичный ключ id снабжен механизмом AUTO_INCREMENT
  26.         $query = "INSERT INTO director (director_name) VALUES ('".$_POST["director"]."')";
  27.         mysql_query( $query );
  28.         $id_director = mysql_insert_id();
  29. }
  30.  
  31. $query = "SELECT id FROM format WHERE format_name='".$_POST["format"]."'";
  32. $res = mysql_query ( $query );
  33. if ( mysql_num_rows( $res ) > 0 )
  34. {
  35.         $id_format = mysql_result( $res, 0, 0 );       
  36. }
  37. else
  38. {
  39.         // Предполагается, что первичный ключ id снабжен механизмом AUTO_INCREMENT
  40.         $query = "INSERT INTO format (format_name) VALUES ('".$_POST["format"]."')";
  41.         mysql_query( $query );
  42.         $id_format = mysql_insert_id();
  43. }
  44.  
  45. $query = "INSERT INTO movies
  46.                  (russian,
  47.                  original,
  48.                  lenght,
  49.                  director_id,
  50.                  country_id,
  51.                  yearrr,
  52.                  number,
  53.                  format_id)
  54.                  VALUES
  55.                  ('русское название',
  56.                  'английское',
  57.                  222,
  58.                  ".$id_director.",
  59.                  ".$id_country.",
  60.                  22,
  61.                  2,
  62.                  ".$id_format.")";
  63. mysql_query( $query );
  64. $id_new_movies = mysql_insert_id();
  65.  
  66. ?>
  67.  
evgenijj Отправлено: 09 Октября, 2006 - 10:58:39 • Тема: Поисковая система • Форум: Программирование на PHP

Ответов: 11
Просмотров: 793
Тут пришлось писать систему поиска по каталогу продукции - может кому и пригодится.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. require "./cfg/general.inc.php";
  4. require "./cfg/connect.inc.php";
  5. require "./functions/mysql.php";
  6.  
  7. // Соединяемся с базой данных
  8. db_connect(DB_HOST,DB_USER,DB_PASS) or die (db_error());
  9. db_select_db(DB_NAME) or die (db_error());
  10.  
  11. // Количество записей результатов поиска на странице           
  12. define("SEARCH_RESULT_ON_PAGE", 5);
  13.  
  14. echo get_html_search();
  15.  
  16. function get_search_form()
  17. {
  18.         $html = "<form name='search' action='".$_SERVER["PHP_SELF"]."' method='GET'>[slash]n";
  19.         $html = $html."Поиск:<input value='Введите слово' name='query' onfocus=[slash]"query.value=''[slash]" size='20' maxlength='64'/>[slash]n";
  20.         $html = $html."<input type='submit' value='Искать'/>[slash]n";
  21.         $html = $html."</form>[slash]n";
  22.         return $html;
  23. }
  24.  
  25. function get_html_search()
  26. {
  27.         if ( !isset($_GET["query"]) or empty($_GET["query"]) )
  28.         {
  29.                 $html = "<h3>Поиск</h3>[slash]n".get_search_form();
  30.         }
  31.         else
  32.         {
  33.                 // Обрезаем строку до длины, указанной в атрибуте maxlength
  34.                 $search = substr( $_GET["query"], 0, 64 );
  35.                 // Убираем пробелы в начале и конце строки поиска
  36.                 $search = trim( $search );
  37.                 // Убираем все "ненормальные" символы
  38.                 $good = preg_replace("/[^\\w\\x7F-\\xFF\\s]/", " ", $search);
  39.                 // Сжимаем двойные пробелы
  40.                 $good = ereg_replace(" +", " ", $good);
  41.                
  42.                 // Получаем корни искомых слов
  43.                 $stemmer = new Lingua_Stem_Ru();
  44.                 $tmp = explode( " ", $good );
  45.                 foreach ( $tmp as $wrd )
  46.                 {
  47.                         // Если слово очень короткое - не используем его в поиске
  48.                         if ( strlen($wrd) < 3 ) continue;
  49.                         $words[] = $stemmer->stem_word($wrd);
  50.                 }
  51.                 // Склеиваем массив $words обратно в строку
  52.                 $search_str = implode( "* ", $words );
  53.                 $search_str = $search_str."*";
  54.                
  55.                 // Составляем запрос к БД, чтобы узнать количество записей в результатах поиска -
  56.                 // это нужно для построения постраничной навигации
  57.                 $search_query = "SELECT COUNT(*)
  58.                                                 FROM ".PRODUCTS_TABLE."
  59.                                                 WHERE MATCH (name, description) AGAINST ('".$search_str."' IN BOOLEAN MODE)>0";
  60.                
  61.                 $res = db_query( $search_query );
  62.                 $total = db_result( $res, 0, 0 );
  63.                
  64.                 // Проверяем передан ли номер текущей страницы - постраничная навигация
  65.                 if ( isset($_GET['page']) )
  66.                         $page = $_GET['page'];
  67.                 else
  68.                         $page = 1;
  69.  
  70.                 // Начальная позиция
  71.                 $start = ($page - 1) * SEARCH_RESULT_ON_PAGE;
  72.                        
  73.                 if ( $total > 0 )
  74.                 {
  75.                         $html = "<h3>Результаты поиска:</h3>[slash]n";
  76.                         $html = $html."<p>Вы искали: ".$good."</p>[slash]n";
  77.                         $search_query = "SELECT productID, name, description,
  78.                                                         MATCH (name, description) AGAINST
  79.                                                         ('".$search_str."' IN BOOLEAN MODE) AS relev
  80.                                                         FROM ".PRODUCTS_TABLE."
  81.                                                         HAVING relev>0 ORDER BY relev DESC LIMIT ".$start.", ".SEARCH_RESULT_ON_PAGE;
  82.                                                                
  83.                         $res = db_query( $search_query );
  84.                        
  85.                         // Это для подсвечивания искомых слов
  86.                         $highlight = implode( "[^-,[:space:]]*|", $words )."[^-,[:space:]]*";
  87.                        
  88.                         $html = $html."<table width='100%' cellspacing='4' cellpadding='2'>[slash]n";
  89.                         $html = $html."<tr bgcolor='#EEEEEE'><th width='5%'>ID</th><th>Наименование</th><th >Описание</th></tr>[slash]n";
  90.                         while ( $result = db_fetch_array( $res ) )
  91.                         {
  92.                                 $html = $html."<tr bgcolor='#F5F5F5' valign='top'>[slash]n";
  93.                                 $html = $html."<td>".$result["productID"]."</td>[slash]n";
  94.                                 // Подсвечиваем искомые слова
  95.                                 $result["name"] = eregi_replace($highlight, "<font color='#cc0000'>[slash][slash]0</font>", $result["name"]);
  96.                                 $html = $html."<td>".$result["name"]."</td>[slash]n";  
  97.                                 // Подсвечиваем искомые слова
  98.                                 $result["description"] = eregi_replace($highlight, "<font color='#cc0000'>[slash][slash]0</font>", $result["description"]);                            
  99.                                 $html = $html."<td>".$result["description"]."</td>[slash]n";                           
  100.                                 $html = $html."</tr>[slash]n";
  101.                         }
  102.                         $html = $html."</table>[slash]n";
  103.                        
  104.                         // Число страниц с результатами поиска
  105.                         $cnt_pages = ceil( $total/SEARCH_RESULT_ON_PAGE );
  106.                        
  107.                         // Постраничная навигация
  108.                         if ( $cnt_pages > 1 )
  109.                         {
  110.                                 $html = $html."<div style='margin-left:4px'>";
  111.                                 for( $i = 1; $i <= $cnt_pages; $i++ )
  112.                                 {
  113.                                         if($i != $cnt_pages)
  114.                                         {
  115.                                                 if($page == $i)
  116.                                                 {
  117.                                                         $html = $html."[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$i*SEARCH_RESULT_ON_PAGE."] ";
  118.                                                 }
  119.                                                 else
  120.                                                 {
  121.                                                         $html = $html."<a href='".$_SERVER["PHP_SELF"]."?page=".$i."&query=".$good."'>[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$i*SEARCH_RESULT_ON_PAGE."]</a> ";
  122.                                                 }
  123.                                         }
  124.                                         else
  125.                                         {
  126.                                                 if($page == $i)
  127.                                                 {
  128.                                                         $html = $html."[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$total."] ";
  129.                                                 }
  130.                                                 else
  131.                                                 {
  132.                                                         $html = $html."<a href='".$_SERVER["PHP_SELF"]."?page=".$i."&query=".$good."'>[".(($i - 1)*SEARCH_RESULT_ON_PAGE + 1)."-".$total."]</a> ";
  133.                                                 }
  134.                                         }
  135.                                 }
  136.                                 $html = $html."</div>[slash]n";
  137.                         }
  138.                        
  139.                 }
  140.                 else
  141.                 {
  142.                         $html = "<h3>Результаты поиска:</h3>[slash]n<p>Ничего не найдено.</p>[slash]n";
  143.                 }              
  144.         }      
  145.         return $html;  
  146. }
  147. ?>
  148.  

А класс для извлечения корней русских слов можно взять на сайте Дмитрия Котерова:
http://forum[dot]dklab[dot]ru/php/advise[dot][dot][dot]RussianWord[dot]html
evgenijj Отправлено: 06 Октября, 2006 - 11:40:37 • Тема: Запись массива в файл • Форум: Программирование на PHP

Ответов: 11
Просмотров: 12411
ARTY пишет:
Можно так. Имееем массив $array:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $fp = fopen ($file, "w");
  3.  
  4. foreach ($array as $output)
  5. {
  6. fwrite($fp, $output."`r`n");
  7. }
  8.  
  9. fclose($fp);
  10.  


Вместо ` впиши обратный слэш (в тексте на форуме обрезается).

Если нужно, блокировку файла сделать не забудь Улыбка


У автора второй элемент массива содержит символ перевода строки
Цитата:
Первые две строки записались в 1 строке файла, третья во второй.

Поэтому лучше их удалить, чтобы не было пустой строки:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $fp = fopen ($file, "w");
  3.  
  4. foreach ($array as $output)
  5. {
  6. fwrite($fp, trim($output)."`r`n");
  7. }
  8.  
  9. fclose($fp);
  10.  
evgenijj Отправлено: 04 Октября, 2006 - 08:36:18 • Тема: запрос UPDATE • Форум: SQL и Архитектура БД

Ответов: 7
Просмотров: 176
Цитата:

не... я уже давно разобрался, ошибка была в другом. Дело в том, что почему-то нельзя делать ключевое поле с именем "index". Переименовываю в "id" и всё замечательно работает.

INDEX - ключевое слово, и его в качестве имен полей использовать нельзя. Еще один пример:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. SELECT id, title FROM mytable WHERE id<10 ORDER BY order;
  3.  

MySQL будет выдавать ошибку. В качестве имени поля использовано ключевое слово ORDER.
evgenijj Отправлено: 02 Октября, 2006 - 14:24:46 • Тема: передача переменной из формы • Форум: Программирование на PHP

Ответов: 24
Просмотров: 2403
Цитата:
Надеюсь меня поняли)))

http://forum[dot]sources[dot]ru/index.php?showtopic=2400

Страниц (81): В начало « ... 73 74 75 76 77 78 79 [80] 81 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB