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]   

> Без описания
Tiger
Отправлено: 30 Июля, 2011 - 00:22:59
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2011  


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




Проблема такова я не знаю как лучше сделать чтобы шел поиск по индексу через case или по названию улицы, я частично решил задачу но пока что у меня идет поиск только по индексу, не знаю как грамотно сделать, либо по индексу, либо по улицу.
PHP:
скопировать код в буфер обмена
  1. <form method='POST' action='<?=$_SERVER['PHP_SELF']?>'>
  2. Введите улицу или индекс:
  3. <input type='text' name='field'>
  4. <input type='submit' name='button' value='OK'>
  5. </form>
  6.  
  7. <?PHP
  8. $field=trim(htmlspecialchars(substr($_POST['field'],0,49)));
  9.  
  10.  
  11.  
  12.  
  13. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  14. if (!empty($_POST)) {
  15.  
  16.  
  17. if (!empty($field))
  18. {
  19.  
  20.  
  21.  
  22.  
  23. if (preg_match("/^[0-9]{6}$/",$field))
  24.  {
  25.         $flag=0;
  26.  }
  27.  else
  28.  {
  29.         if (preg_match("/^[0-9а-яА-Я-\)\(\s]{3}/",$field))
  30.         {
  31.                 $flag=1;
  32.         }
  33.         else
  34.         {
  35.                 if (strlen($field)<3)
  36.                 {
  37.                         $flag=2;
  38.                 }
  39.                 else
  40.                 {
  41.                         $flag=3;
  42.                 }
  43.         }
  44. }
  45.  
  46. }
  47. else
  48. {
  49.         $flag=4;
  50. }
  51. }
  52. }
  53. switch ($flag) {
  54. case 0:
  55.     echo("поиск по индексу");
  56.     break;
  57. case 1:
  58.     echo("поиск по названию");
  59.     break;
  60. case 2:
  61.     echo "Введите минимум 3 символа";
  62.     break;
  63. case 3:
  64.     echo "Введите корректные данные";
  65.     break;
  66. case 4:
  67.     echo "Введите данные";
  68.     break;
  69. }
  70.  
  71. include( "dbopen.php" );
  72.         function ShowTree($ParentID, $lvl) {
  73.         global $link;
  74.         global $lvl;
  75.        
  76.         $lvl++;        
  77.         $sSQL = "SELECT id, title, zip, pid FROM mail_index WHERE pid = " . $ParentID . " AND zip = " . $_POST['field'] . " ORDER BY title";
  78.         $result = mysql_query($sSQL, $link);
  79.        
  80.         if (mysql_num_rows($result) > 0) {
  81.                 echo("<UL>\n");
  82.         while ( $row = mysql_fetch_array($result) ) {
  83.                 $ID1 = $row["id"];
  84.                 echo("<LI>\n");
  85.                 echo("<A HREF=\"" . "?ID=" . $ID1 . "\">" . $row["title"] . "</A>" . "&nbsp;&nbsp;\n");
  86.                 if ($row["zip"]!="0"){
  87.                         echo($row["zip"]);
  88.                 }
  89.                 ShowTree($ID1, $lvl);
  90.                 $lvl--;
  91.         }
  92.                 echo("</UL>\n");
  93.         }
  94.        
  95.         }
  96. ShowTree(0, 0);
  97.  
  98. mysql_close($link);
  99.  
  100. ?>
 
 Top
LIME
Отправлено: 30 Июля, 2011 - 00:31:51
Post Id


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


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


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




поместите в case и формирование строки запроса для каждого варианта
(Добавление)
и передавайте ее в ф-цию
 
 Top
OrmaJever Модератор
Отправлено: 30 Июля, 2011 - 00:40:55
Post Id



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


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


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




а зачем здесь switch ? Всё можно описать в условиях


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Tiger
Отправлено: 30 Июля, 2011 - 09:42:07
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2011  


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




Уважаемые люди, я пока слаб в этом кое-как этот код набрал, пожалуйста в примерах показывайте, я так не пойму...
 
 Top
OrmaJever Модератор
Отправлено: 30 Июля, 2011 - 10:10:35
Post Id



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


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


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




Tiger я не очень понял в чёи же проблема, вот немного оптимизировал ваш код, что же тут не так?
PHP:
скопировать код в буфер обмена
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST && !empty($field))
  2. {
  3.  
  4.         if (is_numeric($field) && strlen($field) == 6)
  5.         {
  6.                 echo("поиск по индексу");
  7.         }
  8.         elseif (preg_match("/^[0-9а-яА-Я-\)\(\s]{3}/",$field))
  9.         {
  10.                 echo("поиск по названию");
  11.         }
  12.         elseif (strlen($field)<3)
  13.         {
  14.                 echo "Введите минимум 3 символа";
  15.         }
  16.         else
  17.         {
  18.                 echo "Введите корректные данные";
  19.         }
  20. }
  21. else
  22. {
  23.         echo "Введите данные";
  24. }
  25.  
  26.  
  27. include( "dbopen.php" );
  28. function ShowTree($ParentID, $lvl) {
  29.         global $link;
  30.  
  31.         $sSQL = "SELECT id, title, zip, pid FROM mail_index WHERE pid = " . $ParentID . " AND zip = " . $_POST['field'] . " ORDER BY title";
  32.         $result = mysql_query($sSQL, $link);
  33.  
  34.         if (mysql_num_rows($result) > 0) {
  35.                 echo "<UL>\n";
  36.                 while ($row = mysql_fetch_array($result)) {
  37.                         echo "<LI>\n" ;
  38.                         echo "<A HREF=\"?ID=" . $row["id"] . "\">" . $row["title"] . "</A>&nbsp;&nbsp;\n" ;
  39.                         if ($row["zip"] != "0"){
  40.                                 echo $row["zip"];
  41.                         }
  42.                         ShowTree($ID1);
  43.                 }
  44.                 echo "</UL>\n";
  45.         }
  46.  
  47. }
  48. ShowTree(0, 0);
  49.  
  50. mysql_close($link);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Tiger
Отправлено: 30 Июля, 2011 - 10:21:03
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2011  


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




в случае когда надо ввести поиск по индексу должно быть так
PHP:
скопировать код в буфер обмена
  1. $sSQL = "SELECT id, title, zip, pid FROM mail_index WHERE pid = " . $ParentID . " AND zip = " . $_POST['field'] . " ORDER BY title";

а когда по улице
PHP:
скопировать код в буфер обмена
  1. $sSQL = "SELECT id, title, zip, pid FROM mail_index WHERE pid = " . $ParentID . " AND title = " . $_POST['field'] . " ORDER BY title";


вот ума не хватает это реализовать грамотно
 
 Top
OrmaJever Модератор
Отправлено: 30 Июля, 2011 - 11:01:36
Post Id



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


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


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




2 параметром в функцию передаём строку либо zip либо title
PHP:
скопировать код в буфер обмена
  1. function ShowTree($ParentID, &$param) {
  2.         global $link;
  3.  
  4.         $sSQL = "SELECT id, title, zip, pid FROM mail_index WHERE pid = " . $ParentID . " AND `".$param."` = " . $_POST['field'] . " ORDER BY title";
  5.         $result = mysql_query($sSQL, $link);
  6.  
  7.         if (mysql_num_rows($result) > 0) {
  8.                 echo "<UL>\n";
  9.                 while ($row = mysql_fetch_array($result)) {
  10.                         echo "<LI>\n" ;
  11.                         echo "<A HREF=\"?ID=" . $row["id"] . "\">" . $row["title"] . "</A>&nbsp;&nbsp;\n" ;
  12.                         if ($row["zip"] != "0"){
  13.                                 echo $row["zip"];
  14.                         }
  15.                         ShowTree($ID1, $param);
  16.                 }
  17.                 echo "</UL>\n";
  18.         }
  19.  
  20. }
  21. $p = 'zip'; // эту переменую можно создавать в условии с разными значениями
  22. ShowTree(0, $p);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Tiger
Отправлено: 31 Июля, 2011 - 10:21:39
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2011  


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




OrmaJever огромное спасибо
Извините забыл 1 момент: title надо $_POST['field'] что то типо $_POST['field']% для удобного поиска по названию улицы потомучто целиком улицу не стоит писать вероятность ошибиться большая.

Кстати хочу спросить ещё - как лучше производить поиск по ключевому слову, в данном случае это название улицы?

(Отредактировано автором: 31 Июля, 2011 - 10:43:53)

 
 Top
OrmaJever Модератор
Отправлено: 31 Июля, 2011 - 11:12:55
Post Id



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


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


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




ну тогда запрос должен быть примерно таким
PHP:
скопировать код в буфер обмена
  1.         $sSQL = "SELECT id, title, zip, pid FROM mail_index WHERE pid = {$ParentID} AND `{$param}` LIKE '%{$_POST['field']}%' ORDER BY title";

(Добавление)
и кстате фильтруйте переменые пришедшие от клиента

перед запросом


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Tiger
Отправлено: 31 Июля, 2011 - 12:21:41
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2011  


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




Спасибо сделал.
PHP:
скопировать код в буфер обмена
  1. <form method='POST' action='<?=$_SERVER['PHP_SELF']?>'>
  2. Введите улицу или индекс:
  3. <input type='text' name='field'>
  4. <input type='submit' name='button' value='OK'>
  5. </form>
  6.  
  7. <?PHP
  8. $field=trim(mysql_escape_string(substr($_POST['field'],0,49)));
  9.  
  10. if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST && !empty($field))
  11. {
  12.  
  13.         if (is_numeric($field) && strlen($field) == 6)
  14.         {
  15.                 echo("поиск по индексу");
  16.                 include( "dbopen.php" );
  17.                 $p = "zip = '".$field."'";
  18.                 ShowTree(0, $p);
  19.                 mysql_close($link);
  20.         }
  21.         elseif (preg_match("/^[0-9а-яА-Я-\)\(\s]{3}/",$field))
  22.         {
  23.                 echo("поиск по названию");
  24.                 include( "dbopen.php" );
  25.                 $p = "title LIKE '".$field."%'";
  26.                 ShowTree(0, $p);
  27.                 mysql_close($link);
  28.         }
  29.         elseif (strlen($field)<3)
  30.         {
  31.                 echo "Введите минимум 3 символа";
  32.         }
  33.         else
  34.         {
  35.                 echo "Введите корректные данные";
  36.         }
  37. }
  38. else
  39. {
  40.         echo "Введите данные";
  41. }
  42. function ShowTree($ParentID, &$param) {
  43.         global $link;
  44.  
  45.                 $sSQL = "SELECT id, title, zip, pid FROM mail_index WHERE pid = ".$ParentID." AND ".$param." ORDER BY title";
  46.         $result = mysql_query($sSQL, $link);
  47.  
  48.         if (mysql_num_rows($result) > 0) {
  49.                 echo "<UL>\n";
  50.                 while ($row = mysql_fetch_array($result)) {
  51.                         echo "<LI>\n" ;
  52.                         echo $row["title"];
  53.                         echo "\n";
  54.                         if ($row["zip"] != "0"){
  55.                                 echo $row["zip"];
  56.                         }
  57.                         ShowTree($row["id"], $param);
  58.                 }
  59.                 echo "</UL>\n";
  60.         }
  61.  
  62. }
  63. ?>

Я уверен, что этот код я набрал не грамотно, поэтому кто моежт пусть внесет поправки, и оптимизирует код. Заранее спасибо.
 
 Top
Tiger
Отправлено: 31 Июля, 2011 - 13:07:47
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2011  


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




Спасибо уже разобрался
PHP:
скопировать код в буфер обмена
  1. switch ($x){
  2. case 0:
  3.         include( "dbopen.php" );
  4.     ShowTree(0, "AND zip = '".$field."'");
  5.     mysql_close($link);
  6.     break;
  7. case 1:
  8.         include( "dbopen.php" );
  9.     ShowTree(0, "AND title LIKE '".$field."%'");
  10.     mysql_close($link);
  11.     break;
  12. case 2:
  13.         include( "dbopen.php" );
  14.     ShowTree($_GET['id'], NULL);
  15.     mysql_close($link);
  16.     break;
  17. case 3:
  18.         include( "dbopen.php" );
  19.     ShowTree(0, NULL);
  20.     mysql_close($link);
  21.     break;
  22. }


как сократить такую конструкцию?

(Отредактировано автором: 31 Июля, 2011 - 23:21:19)

 
 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