Ajax PHP Live Search - необходим второй шаг - PullRequest
0 голосов
/ 18 декабря 2011

У меня есть живой поиск Ajax PHP MySQL, который в основном извлекает продукты питания из базы данных MySQL и представляет их в раскрывающемся списке, когда пользователи вводят поисковый запрос, по одному элементу в строке, точно так же, как поиск в Google.

Мне нужен способ, позволяющий пользователям нажимать на конкретный элемент результата, и для его открытия, прямо под выбранным элементом, поле с несколькими переключателями, отображающими варианты с различным количеством этого конкретного элемента питания. , Затем пользователь сможет выбрать вариант суммы и нажать кнопку «Отправить», чтобы сохранить свой выбор.

Я достаточно хорошо знаю PHP, MySQL и HTML, но JS - это сложная задача, поэтому я был бы признателен, если бы вы подробно изложили свой ответ.

Ниже приведены некоторые фрагменты кода с тем, что у меня есть на данный момент:

  1. Форма поиска HTML:

    <input type="text" size="30" name="food_name" id="q" value="" onkeyup="sendRequest(this.value);" autocomplete="off"/>
    
  2. Код AJAX на той же странице с формой поиска:

      function createRequestObject() {
    
      var req;
    
     if(window.XMLHttpRequest){
      // Firefox, Safari, Opera...
      req = new XMLHttpRequest();
     } else if(window.ActiveXObject) {
      // Internet Explorer 5+
      req = new ActiveXObject("Microsoft.XMLHTTP");
     } else {
      alert('Problem creating the XMLHttpRequest object');
     }
    
     return req;
    
     }
    
    // Make the XMLHttpRequest object
    var http = createRequestObject();
    
    function sendRequest(q) {
    
     // Open PHP script for requests
      http.open('get', 'checkfoods.php?q='+q);
      http.onreadystatechange = handleResponse;
      http.send(null);
    
      }
    
      function handleResponse() {
    
      if(http.readyState == 4 && http.status == 200){
    
      // Text returned FROM the PHP script
      var response = http.responseText;
    
      if(response) {
         // UPDATE ajaxTest content
         document.getElementById("searchResults").innerHTML = response;
      }
    
      }
    
      }
    
  3. PHP-скрипт, который просматривает таблицу с именем FOOD_DES в MySQL и возвращает результаты, заполняя раскрывающийся список продуктов:

      include 'my-food-dtabase.php';
    
      $searchQry = isset($_GET['q']) ? mysql_real_escape_string($_GET['q']) : false;
    
      if ($searchQry) {
      $searchString = $_GET['q'];
    
      $sql = mysql_query("SELECT NDB_No, FdGrp_Cd, Long_Desc FROM FOOD_DES WHERE Long_Desc LIKE '%".$_GET['q']."%' ORDER BY Long_Desc ASC");
    
      if($searchString != NULL) {
    
      while($row = mysql_fetch_assoc($sql)) {
      echo "<span id=foodlist><a href=calorie-counter-serving.php?NDB_No=".$row['NDB_No'].">".$row['Long_Desc']."</a><br /></span>";
     }
     }
    
      if(mysql_num_rows($sql) == 0) {
      echo "<span class=medium_white>Food item not found. Try a different name or keyword.</span>";
      }
      }
    

Ответы [ 3 ]

3 голосов
/ 18 декабря 2011

Это не обязательно полный ответ, а указатель в правильном направлении.

Вы сэкономите массу времени и усилий, используя jQuery вместо чистого JavaScript. Это также сократит ваш шаг 2 до нескольких строк кода, поскольку он поставляется с собственным Ajax API . Вот учебник по системе Ajax - намного проще!

jQuery UI - отличное расширение jQuery, которое помогает вам создавать пользовательские интерфейсы, частью этого является диалоговый виджет. Я думаю, что пример диалогового окна «Модальная форма» очень похож на то, чего вы пытаетесь достичь, нажимая кнопку «создать нового пользователя». Нажмите «Просмотреть исходный код», чтобы увидеть, как они это сделали.

Также из того, что я вижу на шаге 3, вы не очищаете свой запрос, $ _GET ['q'] выбрасывается прямо в строку запроса. Вам следует заменить это на $ searchQry, который вы уже определили несколькими строками выше.

0 голосов
/ 18 января 2014

Вот что вы можете сделать с Ajax, PHP и JQuery. Надеюсь, это поможет или даст вам старт.

Смотрите живую демонстрацию и исходный код здесь.

http://purpledesign.in/blog/to-create-a-live-search-like-google/

Создайте поле поиска, может быть поле ввода, подобное этому.

<input type="text" id="search" autocomplete="off">

Теперь нам нужно прослушать все, что пользователь вводит в текстовую область. Для этого мы будем использовать jquery live () и событие keyup. В каждом ключе у нас есть функция jquery «поиск», которая запускает скрипт php.

Предположим, у нас есть HTML, как это. У нас есть поле ввода и список для отображения результатов.

 <div class="icon"></div>
 <input type="text" id="search" autocomplete="off">
 <ul id="results"></ul>

У нас есть скрипт Jquery, который будет прослушивать событие keyup в поле ввода, и если оно не пустое, он вызовет функцию search (). Функция search () запустит скрипт php и отобразит результат на той же странице, используя AJAX.

Вот JQuery.

$(document).ready(function() {  

    // Icon Click Focus
    $('div.icon').click(function(){
        $('input#search').focus();
    });

    //Listen for the event
        $("input#search").live("keyup", function(e) {
        // Set Timeout
        clearTimeout($.data(this, 'timer'));

        // Set Search String
        var search_string = $(this).val();

        // Do Search
        if (search_string == '') {
            $("ul#results").fadeOut();
            $('h4#results-text').fadeOut();
        }else{
            $("ul#results").fadeIn();
            $('h4#results-text').fadeIn();
            $(this).data('timer', setTimeout(search, 100));
        };
    });


    // Live Search
    // On Search Submit and Get Results
    function search() {
        var query_value = $('input#search').val();
        $('b#search-string').html(query_value);
        if(query_value !== ''){
            $.ajax({
                type: "POST",
                url: "search_st.php",
                data: { query: query_value },
                cache: false,
                success: function(html){
                    $("ul#results").html(html);

                }
            });
        }return false;    
    }



});

В php стреляйте в запрос к базе данных mysql. PHP вернет результаты, которые будут помещены в HTML с помощью AJAX. Здесь результат помещается в список HTML.

Предположим, что существует фиктивная база данных, содержащая две таблицы животных и птиц с двумя похожими названиями столбцов "type" и "desc".

  //search.php
    // Credentials
    $dbhost = "localhost";
    $dbname = "live";
    $dbuser = "root";
    $dbpass = "";

    //  Connection
    global $tutorial_db;

    $tutorial_db = new mysqli();
    $tutorial_db->connect($dbhost, $dbuser, $dbpass, $dbname);
    $tutorial_db->set_charset("utf8");

    //  Check Connection
    if ($tutorial_db->connect_errno) {
        printf("Connect failed: %s\n", $tutorial_db->connect_error);
        exit();

    $html = '';
    $html .= '<li class="result">';
    $html .= '<a target="_blank" href="urlString">';
    $html .= '<h3>nameString</h3>';
    $html .= '<h4>functionString</h4>';
    $html .= '</a>';
    $html .= '</li>';

     $search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']);
$search_string = $tutorial_db->real_escape_string($search_string);

// Check Length More Than One Character
if (strlen($search_string) >= 1 && $search_string !== ' ') {
    // Build Query
    $query = "SELECT *
     FROM animals
     WHERE type LIKE '%".$search_string."%'
     UNION ALL SELECT *
     FROM birf
     WHERE type LIKE '%".$search_string."%'"
     ;

    $result = $tutorial_db->query($query);
        while($results = $result->fetch_array()) {
            $result_array[] = $results;
        }

        // Check If We Have Results
        if (isset($result_array)) {
            foreach ($result_array as $result) {

                // Format Output Strings And Hightlight Matches
                $display_function = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['desc']);
                $display_name = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['type']);
            $display_url = 'https://www.google.com/search?q='.urlencode($result['type']).'&ie=utf-8&oe=utf-8';

                // Insert Name
                $output = str_replace('nameString', $display_name, $html);

                // Insert Description
                $output = str_replace('functionString', $display_function, $output);

                // Insert URL
                $output = str_replace('urlString', $display_url, $output);



                // Output
                echo($output);
            }
        }else{

            // Format No Results Output
            $output = str_replace('urlString', 'javascript:void(0);', $html);
            $output = str_replace('nameString', '<b>No Results Found.</b>', $output);
            $output = str_replace('functionString', 'Sorry :(', $output);

            // Output
            echo($output);
        }
    }
0 голосов
/ 10 сентября 2013

http://koding.info/2013/07/ajax-search-box-php-mysql-jquery/ Я внедрил демонстрационное приложение Live search, которое использует базу данных Wordpress.Взглянуть.это может вам помочь.

...