Ajax:500内部服务器错误

时间:2014-05-17 09:42:13

标签: javascript php jquery ajax

我正在使用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行

5 个答案:

答案 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中修复查询