Фильтрация данных с помощью механизма форм PHP, Jquery, AJAX и данных из базы данных - PullRequest
1 голос
/ 03 января 2012

Я пытаюсь создать форму, использующую механизм отправки форм PHP и Jquery AJAX, который «фильтрует» данные из базы данных mySQL.

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

Ниже приведено то, с чего я начал.На данный момент я только сделал функциональный фильтр «кухня».

if (isset($_GET['cuisine']) && isset($_GET['pricing'])) {
    $cuisine = $_GET['cuisine'];
    $pricing = $_GET['pricing'];
    $location = $_GET['location'];

        if ($cuisine != 'Cuisine') { 
            $cuisineUse = true; 
        } else { $cusineUse = false; }

        if ($pricing != 'Price Range') { 
            $pricingUse = true; 
        } else { $pricingUse = false; } 

        if ($location != 'Location') { 
            $locationUse = true; 
        } else { $locationUse = false; }


// Get all the data from the "example" table
$result = mysql_query("SELECT * FROM restaurants 
WHERE Cuisine='$cuisine'
ORDER BY restaurantID
") 
or die(mysql_error()); 

И Jquery:

<script>
  /* attach a submit handler to the form */
  $("#searchForm").submit(function(event) {

    /* stop form from submitting normally */
    event.preventDefault(); 

    /* get some values from elements on the page: */
    var $form = $( this ),
        term = $form.find( 'input[name="cuisine"]' ).val(),
        url = $form.attr( 'action' );

    /* Send the data using post and put the results in a div */
    $.post( url, { s: term },
      function( data ) {
          var content = $( data ).find( '#content' );
          $( "#jsDiv" ).empty().append( content );
      }
    );
  });
</script>

PS Пользователь также может использовать два или более «фильтров» одновременно.

Ответы [ 2 ]

3 голосов
/ 03 января 2012

Вы отправляете запрос POST, поэтому вы должны использовать $ _POST вместо $ _GET. Также значение названия кухни при отправке составляет с , а не кухня , поэтому оно должно быть:

if($_POST['s'] != '') {
   ...
   $result = mysql_query("SELECT * FROM restaurants WHERE Cuisine='$cuisine' ORDER BY restaurantID");
} else {
   $result = mysql_query("SELECT * FROM restaurants ORDER BY restaurantID");
}

Вам просто нужно удалить пункт where, если кухня не установлена.

1 голос
/ 03 января 2012

Попробуйте:


//USE mysql_real_escape_string for your variables
//is it POST or GET
        $qry = "SELECT * FROM restaurants WHERE cuisine = '".$cuisine."'";
        $qry .= empty($_POST['pricing']) ? " " : " AND pricing = '".$_POST['pricing']."'";
        $qry .= empty($_POST['location']) ? " " : " AND location = '".$_POST['location']."'";
        $qry .=" ORDER BY restaurantID";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...