我正在使用ajax从我的数据库中获取事件。检索结果不起作用,不显示任何内容,并在控制台中收到以下错误消息:
POST http://www.example.com/system/live_filter.php 500(内部服务器错误)jquery.min.js:4
这是我的 HTML / JS :
<div id="results">
<script type="text/javascript">
// 1. When user comes on page from homepage, results will be fetched with ajax
function updateResults() {
// 2. Create array with values of all filter fields
var value_town_id = $('#town_id').val();
var value_type = $('#filter_type').val();
var value_date = $('#filter_date').val();
var array_filter_values = new Array(value_town_id, value_type, value_date);
array_filter_values.join(', ');
query_value = array_filter_values;
// 3. Start ajax
$.ajax({
type: "POST",
url: "system/live_filter.php",
data: { query: query_value },
cache: false,
success: function(html){
$("#results").html(html);
}
});
};
// 4. FIRE FUNCTION!
updateResults();
</script>
</div>
以下是通过Ajax向其发送值的 live_filter.php :
require_once 'db.php';
// Define Output HTML Formating
$html = '';
$html .= '<div class="event">';
$html .= '<h3>titleString</h3>';
$html .= '<p>typeString</p>';
$html .= '<p>dateString</p>';
$html .= '</div>';
// Get values
$values_string = $_POST['query'];
// Explode to array
$values_array = explode(',', $values_string);
$town_id = $values_array[0];
$type = $values_array[1];
$date = $values_array[2];
// Prepare values for database results query
$town_id = $db->real_escape_string($town_id);
$type = $db->real_escape_string($type);
$date = $db->real_escape_string($date);
// Build Query
$query = "SELECT * FROM events WHERE towns_id=$town_id AND type='$type' AND date>=$date";
// Do Search
$results = $db->query($query);
while($result = $results->fetch_assoc()) {
// Format Output Strings And Hightlight Matches
$display_title = $result['title'];
$display_type = $result['type'];
$display_date = $result['date'];
// Insert title
$output = str_replace('titleString', $display_title, $html);
// Insert type
$output = str_replace('typeString', $display_type, $output);
// Insert date
$output = str_replace('dateString', $display_date, $output);
// Output
echo($output);
}
任何人都知道问题出在哪里?
我收到以下错误消息:您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在&#39; AND type =&#39;&#39;&#39;&#39;&和日期&gt; =&#39;&#39;&#39;在第1行
答案 0 :(得分:2)
如果变量 $ town_id为空,那么你可以打印Post值吗?那么只有sql生成错误
SELECT * FROM events WHERE towns_id = AND type='$type' AND date>='$date'
如果你想用towns_id执行查询是空的。附加所有变量的单一
SELECT * FROM events WHERE towns_id = '$town_id' AND type='$type' AND date>='$date'
答案 1 :(得分:1)
您需要在查询中将日期放在引号中:
$query = "SELECT *
FROM events
WHERE towns_id=$town_id AND type='$type' AND date>='$date'";
您还应该在代码中添加错误检查:
$results = $db->query($query) or die($db->error);
另一个问题:在您的Javascript中,您使用', '
(逗号后面有空格)加入查询值,但在PHP中,您只需使用','
进行爆炸(没有空间)。你应该保持一致。更好的方法是将所有查询值作为单独的参数发送:
data: { id: value_town_id, type: value_type, date: value_date }
然后,您可以使用$_POST['id']
,$_POST['type']
和$_POST['date']
在PHP中访问它们。
答案 2 :(得分:1)
没有什么可以跳到我身上,因为PHP的语法错误。问题可能在于您的MySQL,包含或其他任何问题。检查PHP错误日志以查找位置。如果找不到错误日志,请尝试
php -l file.php
在第一个实例中对所有包含文件本身运行lint检查。然后按照上面的建议关于在浏览器中调用它并查看任何错误。
答案 3 :(得分:1)
问题在于你的javascript。
array_filter_values.join(', ');
query_value = array_filter_values;
这是错的,试试这个:
query_value =array_filter_values.join(', ');
array_filter_values.join(&#39;,&#39;)返回连接到字符串的数组,它不会将数组修改为连接的字符串。
答案 4 :(得分:1)
让我们整理一下并简化一下......
function updateResults() {
query = {"town_id": $('#town_id').val(),
"value_type": $('#filter_type').val(),
"value_date": $('#filter_date').val()
}
$.ajax({
type: "POST",
url: "system/live_filter.php",
data: query,
cache: false,
success: function(html){
$("#results").html(html);
}
});
};
然后在PHP中:
require_once 'db.php';
// Define Output HTML Formating
$html = '';
$html .= '<div class="event">';
$html .= '<h3>titleString</h3>';
$html .= '<p>typeString</p>';
$html .= '<p>dateString</p>';
$html .= '</div>';
$town_id = $_REQUEST['town_id'];
$type = $_REQUEST['value_type'];
$date = $_REQUEST['value_date'];
// Prepare values for database results query
$town_id = $db->real_escape_string($town_id);
$type = $db->real_escape_string($type);
$date = $db->real_escape_string($date);
// Build Query
$query = "SELECT * FROM events WHERE towns_id='$town_id' AND type='$type' AND date>='$date'";
/*Should it definitely be towns_id and not town_id?*/
// Do Search
$results = $db->query($query);
while($result = $results->fetch_assoc()) {
// Insert title
$output = str_replace('titleString', $result['title'], $html);
// Insert type
$output = str_replace('typeString', $result['type'], $output);
// Insert date
$output = str_replace('dateString', $result['date'], $output);
// Output
echo($output);
}
当然,如果您愿意移动模板,它会更简单......
require_once 'db.php';
$town_id = $db->real_escape_string($_REQUEST['town_id']);
$type = $db->real_escape_string($_REQUEST['value_type']);
$date = $db->real_escape_string($_REQUEST['value_date']);
$query = "SELECT * FROM events WHERE towns_id='$town_id' AND type='$type' AND date>='$date'";
$results = $db->query($query);
while($result = $results->fetch_assoc()) {
$html = '<div class="event">';
$html .= '<h3>{$result['title']}</h3>';
$html .= '<p>{$result['type']}</p>';
$html .= '<p>{$result['date']}</p>';
$html .= '</div>';
echo $html;
}
至于它为什么会出错...
首先,您确定正在填充变量吗?如果缺少town_id
,则会在评论中发出错误。由于您没有引用该字段,因此会导致SQL损坏。它还使得转义毫无意义,因为输出预期在引号中。
我还要检查您的表单中的日期格式是否是您的数据库理解的格式...
尝试将PHP更改为:
require_once 'db.php';
$town_id = $db->real_escape_string($_REQUEST['town_id']);
$type = $db->real_escape_string($_REQUEST['value_type']);
$date = $db->real_escape_string($_REQUEST['value_date']);
$query = "SELECT * FROM events WHERE towns_id=$town_id AND type='$type' AND date>=$date";
echo $query;
然后使用它为您提供的SQL并将其复制/粘贴到您的数据库管理工具中,看看会发生什么。一旦您修复了语法错误,您就会知道如何在PHP中修复查询