【问题标题】:Link to filter three list select Ajax Php链接过滤三个列表选择 Ajax Php
【发布时间】:2018-08-30 14:29:13
【问题描述】:

我正在尝试链接三个 html 选择来过滤我的数据库表: 这是表格:

**Product:  id | id_typed | product_name;
type: id | product_name;
msn: id | msn_name;
prod_msn : id_prod | id_msn**

每种类型都有很多产品,每个产品都是一个或多个 msn 的一部分 我想在选择类型时链接三个html选择来过滤产品,并在选择产品时过滤msn。

我的html:

<html>
<div id="typeDiv"><select id="type" name="type"></select></div>
    <div id="productDiv"><select id="prod" name="prod"></select></div>
    <div id="msnDiv"><select id="msn" name="msn"></select></div>

    <script>
        $(document).ready(function(){
            $('#type').change(function(){
                loadProduct($(this).find(':selected').val())
            })
            $('#product').change(function(){
                loadMSN($(this).find(':selected').val())
            })


        })

        function loadType(){
        $.ajax({
            type: "POST",
            url: "ajax/ajax.php",
            data: "get=type"
            }).done(function( result ) {
                $(result).each(function(){
                    $("#type").append($('<option>', {
                        value: this.id,
                        text: this.type_name,
                    }));
                })
            });
        }

        function loadProduct(typeID){
        $("#prod").children().remove()
        $.ajax({
            type: "POST",
            url: "ajax/ajax.php",  
            data: "get=productID&typeId=" + typeID
            }).done(function( result ) {
                $(result).each(function(){
                    $("#state").append($('<option>', {
                        value: this.id,
                        text: this.product_name,
                    }));
                })
            });
        }

        function loadMSN(productID){
        $("#msn").children().remove()
        $.ajax({
            type: "POST",
            url: "ajax/ajax.php",
            data: "get=MSN&product=" + productID
            }).done(function( result ) {
                $(result).each(function(){
                    $("#msn").append($('<option>', {
                        value: this.id,
                        text: this.name,
                    }));
                })
            });
        }

    loadType();
    </script>
</html>

对于文件 Ajax.php:

<?php 
$typeID = isset($_POST['typeID'])  ? $_POST['typeID'] : 0;
$productID = isset($_POST['productID'])  ? $_POST['productID'] : 0;
$command = isset($_POST['get'])  ? $_POST['get'] : "";

switch($command){
    case "type":
    $statement = "SELECT id, type_name FROM type";
    break;
    case "prod":
    $statement = "SELECT id, product_name FROM product WHERE id_type=".(int)typeID;
    break;
    case "msn":
    $statement = "select m.MSN_NAME
    from msn m, PROD_MSN pm
    where pm.id_msn = m.ID
    and pm.id_prod =".(int)productID;
    break;
    default:
    break;
    }

    $sth = $dbh->prepare($statement);
    $sth->execute();
    $result = $sth->fetchAll();

    echo json_encode($result);
    exit();

?>

我没有得到任何结果,我尝试了很多教程,我应用的代码取自 here:

如果您知道问题出在哪里,它将对我有所帮助。 谢谢。

【问题讨论】:

  • 错误信息?你看过 PHP 错误日志吗? Apache 错误日志?浏览器调试器?任何错误日志
  • @RiggsFolly $(document).ready(function(){ $ 未定义
  • 您的页面中没有包含 jQuery 库! @Devweb

标签: php jquery html ajax filter


【解决方案1】:

在你的 ajax 代码更改

data: "get=productID&typeId=" + typeID

data: "get=prod&typeId=" + typeID

然后改变

 data: "get=MSN&product=" + productID

 data: "get=msn&product=" + productID

在开关情况下,您使用的是msnprod,但在数据中您发送的是productIDMSN!!

在你的 PHP 代码中替换这个

case "type":
    $statement = "SELECT id, type_name FROM type";
    break;
    case "prod":
    $statement = "SELECT id, product_name FROM product WHERE id_type=".(int)typeID;
    break;
    case "msn":
    $statement = "select m.MSN_NAME
    from msn m, PROD_MSN pm
    where pm.id_msn = m.ID
    and pm.id_prod =".(int)productID;
    break;
    default:
    break;
    }

有了这个

case "type":
    $statement = "SELECT id, type_name FROM type";
    break;
    case "prod":
    $statement = "SELECT id, product_name FROM product WHERE id_type=".(int)$typeID;
    break;
    case "msn":
    $statement = "select m.MSN_NAME
    from msn m, PROD_MSN pm
    where pm.id_msn = m.ID
    and pm.id_prod =".(int)$productID;
    break;
    default:
    break;
    }

您在查询中忘记了 $。

【讨论】:

  • 还是什么都没有,我什至没有得到没有过滤器的列表(类型列表)
  • 在您的 php 代码中尝试打印结果。检查您是否从查询中获得结果? @Devweb
  • 是的,如果我这样使用,查询会返回结果:
  • 您的文件中没有包含 jQuery 库。 @Devweb
  • 我已经添加了,但仍然有内部服务器错误 500
猜你喜欢
  • 2012-12-26
  • 1970-01-01
  • 2015-08-26
  • 2011-09-12
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
相关资源
最近更新 更多