За последние 24 часа нас посетил 21651 программист и 1018 роботов. Сейчас ищут 758 программистов ...

Объединение PHP запроса и скрипта autocomplete в одном файле

Тема в разделе "JavaScript и AJAX", создана пользователем Pumbaa, 25 янв 2018.

Метки:
  1. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    Подскажите пожалуйста как изменить название источника source: при объединении в одном файле pg_query с получением и реформированием массива и скрипта autocomplete, которые сегодня работают в двух файлах:
    street.php:
    PHP:
    1. <?php
    2. require_once ("pg_conn.php");
    3.  
    4. $qstreet = "SELECT
    5.            cmac.street.id,  
    6.            cmac.street.street,
    7.            cmac.street.postcode,
    8.            cmac.street.id_dimos,
    9.            cmac.street.id_street
    10.            FROM
    11.            cmac.street";      
    12.  
    13. $ress = pg_query ($qstreet);
    14.         while ( $row = pg_fetch_array ( $ress ) ) {
    15.         $array[]=$row[1];            
    16.         }
    17.    
    18.    if (!empty($_GET['term']))      
    19.     {
    20.         $term = $_GET['term'];
    21.         $pattern = '/^'.preg_quote($term).'/iu';
    22.         echo json_encode(preg_grep($pattern, $array));
    23.     }
    24. ?>
    area.html:
    HTML:
    1.  
    2.   <meta charset="utf-8">
    3.   <link rel="stylesheet" type="text/css" href="../../css/style.css" />
    4.   <title></title>
    5.   <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    6.   <script src="//ajax.aspnetcdn.com/ajax/jquery.ui/1.10.3/jquery-ui.min.js"></script>
    7.   <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/jquery.ui/1.10.3/themes/sunny/jquery-ui.css">
    8.  
    9.   <script>
    10.     $(function() {
    11.       $('#street').autocomplete({
    12.         source: 'street.php'
    13.       });
    14.     });
    15.   </script>
    16. </head>
    17.  
    18.   <table>
    19.     <tbody>
    20.       <form method="post">
    21.  
    22.         <tr>
    23.           <td><label for="street">Street:</label></td>
    24.           <td><input type="text" placeholder="Street name" required="required" id="street" name="street" onchange="sendForm(this.form)"></td>
    25.         </tr>
    26.         -----------------------
    27.       </form>
    28.     </tbody>
    29.   </table>
    30. </body>
    31.  
    32. </html>
    чтобы в новом, объединённом файле area.php, в РНР части проходила выборка и создание массива, а скрипт вставлял его в выпадающий список, как-то типа этого, вместо ссылки на внешний файл:
    Код (Javascript):
    1. $(function() {
    2.   $('#street').autocomplete({
    3.     source: ($pattern, $array)
    4.   });
    5. });
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    в чём конкретно затруднение? как отличить get-запрос на вывод страницы от get-запроса про список значений?

    https://www.google.ru/search?q=php+how+detect+ajax+query
    --- Добавлено ---
    или твоя цель в принципе не делать ajax запросы?

    тогда копай описание функции autocomplete. возможно есть нужные параметры.
     
  3. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    вопрос в том, как передать полученный массив в source: ??? внутри файла, чтобы autocomplete его обработал
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    через echo
     
  5. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    пробовал, но может криво, так что без результата
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    только я не уверен, что есть какой-то "массив source". строка c URL и массив значений это блин разные вещи.
    --- Добавлено ---
    начни с документации по этой функции. воможно есть ДРУГИЕ параметры для массива
    --- Добавлено ---
    хотя нет, она и массив скушает, судя по докам: http://api.jqueryui.com/autocomplete/
    ну, ёмана, делай echo со значениями массива, чо как маленький!
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    ))) может ты в тело страницы заглянешь, в конце концов, и увидишь, что ТАК echo не работает
    --- Добавлено ---
    <?php echo чтоугодно ?>

    или

    <?= чтоугодно ?>
     
  8. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    говорю же, пробовал загнать эхо, подскажи как правильно...
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
  10. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    текст не мой, работал до этого нормально, сейчас надо просто загнать всё в кучу, поэтому сильно не вникаю, потому что это попутная задача, потому что джумла не хочет видеть сторонний рнр из скрипта внутри Custom HTML модуля, поэтому и уродуюсь срастить коня и трепетную лань )))
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    это и так очевидно, что не твой ))) хочешь добавить в него ещё немного не твоего.

    ты либо как программист будешь двигаться, либо как работодатель программиста. выбирай сам. я тебе показал ЧТО нужно сделать чтобы echo работало и КАК проверить результат. не хочешь думать — плати. у нас есть разделы "фриланс" и "работа".
     
  12. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    так программисты же и писали этот кривой код ))) ... называться программистом и быть им, две большие разницы ))))... за всю жизнь видел человека три, которые реально понимают что делают, все остальные, копипастеры, типа меня... так я за бесплатно копипастю, а они за это же бабки хотят ))) ...
    --- Добавлено ---
    собственно, задача факультативная, всё и так работает нормально, просто захотелось повыёживаться
    --- Добавлено ---
    P.S. я еще после программистов неделю причёсывал код, приводя его из просто рабочего, в прилично выглядящий )))
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    последняя попытка:

    специальные служебные слова <?php и ?> начинают и заканчивают код на PHP в исходном файле. то, что не является кодом PHP, просто выводится на страницу "как есть". в нём команды PHP не выполняются! следи за тем, где у тебя php и где не-php. смотри что фактически вывелось на страницу — не то что отрендерилось браузером, а что у него внутри — по Ctrl+U

    у тебя всё что нужно уже есть. только не косячь! вот и всё!
    --- Добавлено ---
    ты удалил камент, но я это по прежнему вижу:
    Код (Javascript):
    1. $(function() {      
    2.     $('#street').autocomplete({
    3.               source: echo json_encode(preg_grep($pattern, $array))
    4.         });
    5.     }
    6. );
    здесь нет оператора php echo. здесь есть текст, который попадает на страницу буквально как есть: "source: echo json_…"

    ты понял или нет? :D используй <?php и ?>
     

    Вложения:

    • comment.png
      comment.png
      Размер файла:
      79,9 КБ
      Просмотров:
      4
  14. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    я не специально удалил, хотел убрать дубляж текста, а удалился и код, а потом, судя по ответу, понял, что ты его уже видел и было влом снова вставлять
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Прекраcно. Надеюсь ты уже сумел вывести массив JSON или увидеть ошибку. Мне уже поднадоело ;)
     
  16. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    тоже не работает
    Код (Text):
    1.  
    2. $(function() {          
    3.     $('#street').autocomplete({            
    4.     source: <?php echo $pattern, $array; ?>
    5. //    source: '<?php echo $pattern, $array; ?>'
    6.         });
    7.     }  
    8. );
    9.  
    10. результат из консоли
    11. -----------------
    12. [code=JavaScript]$(function() {          
    13.     $('#street').autocomplete({
    14.              
    15.         source: <br />
    16. <b>Notice</b>:  Undefined variable: pattern in <b>/var/www/html/forms/pc/54646/n54647_2.php</b> on line <b>81</b><br />
    17. <br />
    18. <b>Notice</b>:  Array to string conversion in <b>/var/www/html/forms/pc/54646/n54647_2.php</b> on line <b>81</b><br />
    19. Array  
    20.         });
    21.     }  
    22. );
    похоже что переменные из рнр не передаются в скрипт, ладно, фиг с ним, пускай работает как есть, и так убил кучу времени на эту примочку... а основная работа стоит
     
  17. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    они точно никуда не передаются, т.к. код php выполняется на сервере. javascript выполняется в браузере.
    нет блин никакой передачи из пхп в жс в принципе! есть только вывод текста, который потом будет интерпретироваться так или иначе, в зависимости от места использования. сам пхп понятия не имеет ни про html, ни про js.

    Notice говорит о том, что этих переменных у тебя тупо нет в php, ты их не задал. значит нечего выводить в echo.
    --- Добавлено ---
    Посмотри: в том, исходном файле есть $pattern=… и $array=… а у тебя в "объединённом варианте" похоже этого нет.
    Вот откуда оно само возьмётся, ёманарот! Похоже программисты не зря деньги получают. Им думать приходится.
     
  18. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    я конечно тупой, но не настолько ))))
    все переменные объявлены в РНР части кода, только мне непонятно, почему массив выводится только
    Код (Text):
    1.   echo '<p> id: ' . $row [0] . ' street ' . $row [1] . ' postcobe ' . $row [2] . ' id_dimos ' . $row [3] .' id_street ' . $row [4] . '</p>';
    а
    Код (Text):
    1. echo $array[];
    ничего не выводит
    также как и
    Код (Text):
    1. echo $pattern;
    2. echo $array;
    да и
    Код (Text):
    1. echo json_encode(preg_grep($pattern, $array));
    2. тоже ничего не показывает.
    3. а если они ничего не показывают в РНР части, то естественно ничего не будут показывать и в скрипте.
    4. Хотя в оригинальном варианте, всё работает как часы
    Код (Text):
    1. <?php
    2. require_once ("pg_conn.php");
    3. $array[]="";
    4.  
    5. $qstreet = "SELECT
    6.             cmac.street.id,
    7.             cmac.street.street,
    8.             cmac.street.postcode,
    9.             cmac.street.id_dimos,
    10.             cmac.street.id_street
    11.             FROM
    12.             cmac.street";
    13.  
    14.     $ress = pg_query ($qstreet);
    15.     while ( $row = pg_fetch_array ( $ress ) ) {
    16.     echo '<p> id: ' . $row [0] . ' street ' . $row [1] . ' postcobe ' . $row [2] . ' id_dimos ' . $row [3] .' id_street ' . $row [4] . '</p>';
    17.     $array[]=$row[1];
    18. }
    19. if (!empty($_GET['term']))
    20. {
    21.     $term = $_GET['term'];
    22.     $pattern = '/^'.preg_quote($term).'/iu';
    23.     echo json_encode(preg_grep($pattern, $array));
    24. }
    25. ?>
    26.  
    27. <!DOCTYPE html>
    28. <html>
    29. <head>
    30. <meta charset="utf-8">
    31. <link rel="stylesheet" type="text/css" href="../../css/style.css" />
    32. <title></title>
    33. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    34. <script src="//ajax.aspnetcdn.com/ajax/jquery.ui/1.10.3/jquery-ui.min.js"></script>
    35. <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/jquery.ui/1.10.3/themes/sunny/jquery-ui.css">
    36.  
    37. <script>
    38. $(function() {          
    39.     $('#street').autocomplete({        
    40.         source: '<?php echo $pattern, $array; ?>'
    41.         });
    42.     }  
    43. );
    44. </script>
    45.  
    46. </head>
    47.     <body>
    48.       <table>
    49.         <tbody>
    50.             <form method="post">      
    51.  
    52.             <tr>
    53.             <td><label for="street">Street:</label></td>
    54.             <td><input type="text" placeholder="Street name" required="required" id="street" name="street" onchange="sendForm(this.form)"></td>
    55.             </tr>                  
    56.         </form>
    57.     </tbody>
    58. </table>
    59. </body>
    60. </html>
    --- Добавлено ---
    наверное надо писать функцию, которая будет собирать всё до кучи и создавать отдельную переменную в скрипте, которая и будет выводить результат, но это уже буду разбираться, когда будет свободное время... думал что побыренькому сращу и запихну в джумлу, только из-за контроля доступа к формам, чтобы кто попадя там ничего не правил )))
    --- Добавлено ---
    удали сам дубликат кода, а то я опять убью весь коммент )))
     
  19. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Отчитывал @romach за обращение на ты, а сам такое свинство позволяешь :)
     
  20. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    просто я быстро учусь ))) ... и в этом случае у @artoodetoo нет хамского менторского тона как у @romach, так что я просто принял правила игры, легкого дружеского трёпа... почувствуйте разницу
     
  21. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    может быть дело в круге общения? :)
     
  22. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    наверное да, мы же говорим о присутствующих на форумах, а не о тех, кто работает на IT компании и не заходят на форумы.
    Я профессионал совсем в другой сфере, в программировании я любитель, мне просто нравится воплощать свои задумки в веб решениях с базой данных, но если меня спрашивают конкретный совет по конкретному вопросу в моей профессиональной области, я не начинаю учить человека жизни, а просто отвечаю максимально конкретно, чтобы не тратить его и своё время понапрасну... всё знать невозможно, да и не нужно, некоторые вещи достаточно понять на одном своём примере, а не лопатить гугл тоннами, чтобы найти пару строчек кода, как правило, большинство решений и находятся в этих паре строчек.
    А тут я получаю только абстрактные советы, да, это направляет мысль... это как вы пришли к доктору, а он Вам начал рассказывать о мировых тенденциях в медицине и общей практике лечения заболеваний с похожими симптомами :)... хотя доктора нынче тоже такие :):):):):)
     
  23. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    не замечал хамства за Ромачем.
    Он всегда высказывается очень конструктивно.
    тут так не получится. тут тянешь за ниточку и вываливается целый клубок, который лень распутывать)
    не нужно быть плотником, чтобы понимать как устроен деревянный стул.
    но в IT внешний вид вещей и их устройство отличаются кардинально)
     
    romach нравится это.
  24. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    Всё верно, это подход о котором я и сказал... теоретические рассуждения, это для института, а форум, для практических советов.
    У меня не стоит задача стать специалистом по JSON и JavaScript, мне надо решить маленькую конкретных задачу, чтобы паровоз поехал дальше и больше в жизни я, наверное, не столкнусь с ними именно в этом ракурсе, а если и столкнусь, то всегда смогу обратиться к архиву и посмотреть на решение... как впрочем и еще пару сотен человек, смогут увидеть это решение на этом форуме. Такого вопроса нет в поиске, поэтому я и обратился за советом к профессионалам... а тут начались лекции :):):) ... но, не работает тот способ через <?php echo ... ?>
    Не видит скрипт переменной из РНР, тупо пишет
    Код (Text):
    1. Undefined variable:
    Даже через создание отдельной переменной
    Код (Text):
    1.  $ac = preg_grep($pattern, $array);
    2. //    $ac = echo json_encode(preg_grep($pattern, $array));
    3.         echo json_encode ($ac);
    4. --------------
    5. <script>
    6.        var st = <?php echo json_encode ($ac); ?>;
    7. --------------
    8. <script>
    9.        var st = <br />
    10. <b>Notice</b>:  Undefined variable: ac in <b>/var/www/html/forms/pc/54646/n54647_2.php</b> on line <b>79</b><br />
    11. null;
    12. -------------
    13. <script>
    14.        var st = '<?php echo json_encode ($ac); ?>';
    15. -------------
    16. <script>
    17.        var st = '<br />
    18. <b>Notice</b>:  Undefined variable: ac in <b>/var/www/html/forms/pc/54646/n54647_2.php</b> on line <b>79</b><br />
    19. null';
    и еще 1001 вариант комбинаций не работают
    Это как ты стоишь перед витриной в магазине, видишь бутылку виски, но прямо с витрины взять не можешь :):):) ... только с заднего двора :):):)
    Если можете предложить другое решение, буду признателен ;)
     
  25. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Я бы кинул ссылку на раздел документации по области видимости переменных, но нынче это считается хамством, эх ))
     
    denis01 и TeslaFeo нравится это.