简体   繁体   English

使用ajax过滤SQL select查询

[英]Filter SQL select query using ajax

I want to use a select drop down menu and an input tag to filter SELECT results from an SQL query using PHP. 我想使用选择下拉菜单和输入标记来使用PHP过滤SQL查询的SELECT结果。 The user can select either <, =, > and then enter a number to filter. 用户可以选择<,=,>然后输入要过滤的数字。

I'm getting these warnings and failures: 我收到这些警告和失败:
Notice: Trying to get property of non-object in url 注意:尝试在url中获取非对象的属性
Fatal error: Call to a member function bind_param() on boolean in url 致命错误:在url中调用boolean上的成员函数bind_param()

Is this a valid approach to use "WHERE c.level ? ?" 这是使用“WHERE c.level?”的有效方法吗?

I have also tried using the HTML number codes between the option opening and closing tags instead of <, =, or > but I get the same errors. 我也尝试在选项开始和结束标记之间使用HTML数字代码而不是<,=或>但我得到相同的错误。

Here is my form: 这是我的表格:

<form method="post" action="filterChar.php" id="char_filter">
    <fieldset>
        Level is 
            <select name="expression">
                <option value="<"> < </option>
                <option value="="> = </option>
                <option value=">"> > </option>
            </select>
            <input type="number" name="limit">

            <input type="submit" name="char_filter">
    </fieldset>
</form>

jQuery ajax call: jQuery ajax调用:

$('#char_filter').submit(function() {

        $.ajax({
        url: 'filterChar.php',
        type: "POST",
        dataType: { expression: $(this).expression.value,
                    limit: $(this).limit.value}

        });
    });

PHP handler: PHP处理程序:

if(!($stmt = $mysqli->prepare("SELECT c.id, c.name, r.name, cl.name, c.level FROM dnd_character c INNER JOIN dnd_race r ON c.race = r.id INNER JOIN dnd_class cl ON c.class = cl.id WHERE c.level ? ?"))) {
                            echo "Prepare failed: " . $stmt->errno . " " . $stmt->error;
                    }

                    if(!($stmt->bind_param('si',$_POST['expression'],$_POST['limit']))) {
                            echo "bind_param failed: " . $stmt->errno . " " . $stmt->error;
                    }

                    if(!($stmt->execute())) {
                        echo "Execute failed: " . $stmt->errno . " " . $stmt->error;
                    }

` `

Found some more errors, so here's the fixed JS part: 发现了一些错误,所以这里是固定的JS部分:

$('#char_filter').submit(function() {
  var form = $(this).get()[0];
  var data = {
    expression: form.expression.value,
    limit: form.limit.value
  };
  $.ajax({
    url: 'filterChar.php',
    type: "POST",
    data: data
  });
});

Alternatively you can use data: $(this).serialize() 或者你可以使用data: $(this).serialize()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM