【发布时间】:2017-11-04 04:02:40
【问题描述】:
我想使用一个选择下拉菜单和一个输入标签来过滤来自使用 PHP 的 SQL 查询的 SELECT 结果。用户可以选择 中的任何一个,然后输入一个数字进行过滤。
我收到以下警告和失败消息:
注意:试图在 url
中获取非对象的属性
致命错误:在 url
这是使用“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 文档中转义
<和>文本字符。 -
你为什么使用两个占位符。你的 where 值不只是一个值吗?
-
在您的 ajax 调用中,将
dataType替换为data。一般来说,在排查此类问题时,请分别对 ajax 调用和 PHP 脚本进行排查。
标签: javascript php jquery sql ajax