2017-06-02 123 views
1

我想使用选择下拉菜单和输入标记来筛选使用PHP的SQL查询的SELECT结果。用户可以选择<,=,>然后输入一个数字进行过滤。使用ajax筛选SQL选择查询

我得到这些警告和失败:
注意:试图让非对象的财产网址
致命错误:调用一个成员函数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; 
        } 

`

+0

您需要将HTML文档中逃脱''<' and '>文本字符。 –

+0

你为什么使用两个占位符。你的价值不只是一个价值吗? – Akintunde007

+0

在您的ajax调用中,将'dataType'替换为'data'。一般来说,在对这类问题进行故障排除时,请独立排除ajax调用和PHP脚本的故障。 –

回答

0

发现了一些更多的错误,所以这里的固定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()