【问题标题】:Filter SQL select query using ajax使用 ajax 过滤 SQL 选择查询
【发布时间】:2017-11-04 04:02:40
【问题描述】:

我想使用一个选择下拉菜单和一个输入标签来过滤来自使用 PHP 的 SQL 查询的 SELECT 结果。用户可以选择 中的任何一个,然后输入一个数字进行过滤。

我收到以下警告和失败消息:
注意:试图在 url
中获取非对象的属性 致命错误:在 url

中的布尔值上调用成员函数 bind_param()

这是使用“WHERE c.level ? ?”的有效方法吗?

我也尝试在选项开始和结束标记之间使用 HTML 数字代码,而不是 ,但我得到了同样的错误。

这是我的表格:

<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 调用:

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

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

        });
    });

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;
                    }

`

【问题讨论】:

  • 您需要在 HTML 文档中转义 &lt;&gt; 文本字符。
  • 你为什么使用两个占位符。你的 where 值不只是一个值吗?
  • 在您的 ajax 调用中,将 dataType 替换为 data。一般来说,在排查此类问题时,请分别对 ajax 调用和 PHP 脚本进行排查。

标签: javascript php jquery sql ajax


【解决方案1】:

又发现了一些错误,所以这里是固定的 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
  });
});

您也可以使用data: $(this).serialize()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2023-03-14
    • 2015-11-14
    • 2018-08-14
    • 2015-08-19
    • 2017-06-18
    相关资源
    最近更新 更多