使用 PHP、Jquery、AJAX 表单机制和数据库中的数据过滤数据

Posted

技术标签:

【中文标题】使用 PHP、Jquery、AJAX 表单机制和数据库中的数据过滤数据【英文标题】:Filtering data with a PHP, Jquery, AJAX form mechanism and data from Database 【发布时间】:2012-02-01 06:37:07 【问题描述】:

我正在尝试创建一个利用 php 和 Jquery AJAX 表单提交机制的表单,该机制“过滤”来自 mysql 数据库的数据。

表单中有三个带有“提交”按钮的下拉栏,它将“过滤”数据库中的数据。但是,用户不需要从下拉列表中的所有选项中进行过滤 - 'cuisine'、'pricing'、'location'。我需要创建某种查询,如果未使用下拉列表,则不会在过滤器中使用它。

下面是我开始的内容。我目前只使“美食”过滤器起作用。

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>

P.S 用户也可以同时使用两个或多个“过滤器”。

【问题讨论】:

【参考方案1】:

您正在发送一个 POST 请求,因此您应该使用 $_POST 而不是 $_GET。此外,发送时美食名称的值是 s 而不是 cuisine 所以它应该是:

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 子句。

【讨论】:

嗯.. 如果其中有多个在场,这将如何运作。例如,如果用户想按美食和价格过滤它们?还是位置和价格?等等……【参考方案2】:

试试:

//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";

【讨论】:

我不太明白这个是怎么回事。请您再解释一下好吗?

以上是关于使用 PHP、Jquery、AJAX 表单机制和数据库中的数据过滤数据的主要内容,如果未能解决你的问题,请参考以下文章

将 AJAX/jQuery 添加到简单的 PHP 表单

使用 JQuery、Ajax、PHP、Json 进行表单验证

使用 AJAX PHP JQuery 提交表单将我带到操作页面

如何使用 PHP、jQuery 和 AJAX 上传多个文件

PHP + jQuery + Ajax 表单提交 - 同一页面返回结果

使用 mail() PHP 脚本的 jQuery AJAX 表单发送电子邮件,但来自 HTML 表单的 POST 数据未定义