0

現在、MySql データベースに接続する PHP ファイルに対して行っている ajax 呼び出しから複数の行を取得しようとしています。

私のコードは次のようになります。

JQuery/HTML

<script>
$(document).ready(function(){

function getComments(){
var boxid = document.location.hash.substring(1); // remove #    
    $.ajax({ //Make the Ajax Request
             type: "POST",
             url: "getComments.php", //file name
             data: {boxid: boxid},
             success: function(server_response){        
                var data = $.parseJSON(server_response);
                var html = '', comment;
                for(var i = 0; i < data.length; i++){
                    comment = data[i];
                    html += '<div id="' + comment.user_id + '"><span>' + comment.username + '</span><span>' + comment.comment + '</span></div>';
                }
                $('#ajax_comment').html(html);

             }
         });
}

});
</script>
<span name="ajax_comment" id="ajax_comment"></span>

PHP (getComments.php)

session_start();
include('config.php');
if (isset($_SESSION['userid']))
$userid = $_SESSION['userid'];
else
$userid = 0;

if (isset($_POST['boxid']))
{
$knownid = $_POST['boxid'];
$query = mysql_query("SELECT u.id, u.USERNAME, c.COMMENT, c.DATE_ADDED, c.ACTIVE, c.id FROM ratemybox.USERS u, ratemybox.COMMENTS c WHERE u.id = c.user_id and c.box_id = $knownid ORDER BY c.DATE_ADDED DESC");

$result = mysql_fetch_array($query);
$results = array();
foreach($result as $row)
{
    $user_id = $row['id'];
    $username = $row['username'];
    $comment = $row['comment'];
    $dateAdded = $row['date_added'];

    $results[] = array("user_id" => $user_id, "username" => $username, "comment" => $comment, "date_added" => $dateAdded);
}

echo json_encode($results);
}

これは私が期待する結果を生み出していません。どんなアドバイスも素晴らしいでしょう。

編集

Firebug を使用すると、次のエラーが発生します。

Illegal string offset 'id' in 
Illegal string offset 'username'
Illegal string offset 'comment'
Illegal string offset 'date_added'

これがまったく役立つかどうかわかりませんか?

4

2 に答える 2

1

選択クエリでは、$knownid でフィルタリングしようとしていますが、変数を引用符で囲みました。次のように変更してみてください:

   $query = mysql_query("SELECT u.id, u.USERNAME, c.COMMENT, c.DATE_ADDED, c.ACTIVE, c.id FROM ratemybox.USERS u, ratemybox.COMMENTS c WHERE u.id = c.user_id and c.box_id = " . $knownid . " ORDER BY c.DATE_ADDED DESC");
于 2013-02-18T16:25:08.523 に答える
0

すでに与えられた多くの提案 (クエリに追加する前に $_POST["boxid"] をエスケープする必要があります) とは別に、エラーなしでコードの問題を見つけるのは困難です。

foreach の前に var_dump($result) を追加して、クエリが何かを返していることを確認するか、ブラウザーのコンソールをチェックして、サーバーから実際に何が返されているかを確認してください。

于 2013-02-18T16:37:29.447 に答える