0

私が書いているプログラムと達成しようとしている機能

わかった。私が今書いているのは、AJAX を使った Javascript の非常に単純なフォーラムです。私のタスクの一部は、私の講師が PHP で私たちのために書いた API を使用して、新しい投稿を追加することです。API と SQL データベースは完全にローカルであることに注意してください。

この投稿を追加するために使用している関数は次のとおりです。

function addPosts()
{
// Add the new thread to the SQLlite database.
var treq = new Request({
    url:'guestbook/control.php?action=insertPost',
    'method':'post',
    onSuccess: function() {
        alert('win');
    },
    onFailure: function() {
        alert('fail');
    }
}).send(Object.toQueryString({
    // Had to convert it to a query string because it wouldn't work as a normal object.

    // These are the required values to send, to store a "post" in the database.
    'name':'This is a name',
    'comment':'This is a comment!'
}));
}

これにより、毎回同じデータが追加されることは承知しています。私はいまいましいことを機能させようとしているだけです!

問題

この関数が呼び出されると、SQL 構文エラーが発生します。それは私の講師のコードが間違っていることを意味するので、私は混乱しました。私の講師と話した後、彼は、投稿データが PHP コードに正しく送信されない場合に発生すると説明しました。そこで、Google Chrome の開発者ツールを使って何が起こっているのかを調べてみたところ、次のことがわかりました。

投稿データのスクリーンショット

これは、データがリクエストに正常にロードされ、PHP ファイルに正常に渡されていることを意味します。明らかに私は間違っています。私はこれを機能させるために頭を悩ませてきました。

私のクラスの他の全員が問題を抱えていないため、API が正常に動作することを知っています。また、私が使用しているコードは、メモのコードから実際にはぼったくりなので、約 90% 確実ですに正しい。

注意すべきことの 1 つは、キーのコードがonSuccess実行されることです。そのため、AJAX 側の問題ではないことがわかっています。

もう 1 つのことは、このコードが大学のコンピュータで機能していたことです。

スタックトレース

致命的なエラー: G:\Ajax Coursework\guestbook\php\database.php:134Stack trace:#0 G: でメッセージ「SQLSTATE[HY000]: General error: 1 near ")": syntax error」を含むキャッチされない例外 'PDOException': \Ajax Coursework\guestbook\php\database.php(134): PDO->prepare('INSERT INTO pos...')#1 G:\Ajax Coursework\guestbook\php\class.GuestBook.php(44): DatabaseHandler->insert(Array)#2 G:\Ajax Coursework\guestbook\control.php(8): GuestBook->insert(Array)#3 G:\Ajax Coursework\guestbook\control.php(56): insertPost( )#4 {main} が G:\Ajax Coursework\guestbook\php\database.php の 134 行目にスローされる

4

2 に答える 2

0

誰かが答えを探してこのスレッドに出くわした場合に備えて:

function addPosts()
{
// Add the new thread to the SQLlite database.
var treq = new Request({
    url:'guestbook/control.php?action=insertPost',
    onSuccess: function() {
        alert('win');
    },
    onFailure: function() {
        alert('fail');
    }
}).post('name=This is a name&comment=This is a comment!');
}

ここでは、.post メソッドを使用してデータを POST しています。

于 2013-05-05T05:14:25.163 に答える
0

Object.toQueryString は、オブジェクトをクエリ文字列に変換するために使用されます。したがって、サーバーが $_POST['name'] と $_POST['comment'] の両方を設定する必要がある場合は、そうはなりません。

率直に言って、投稿しているので、 $_GET['name'] または $_GET['comment'] も設定されるとは思いません。

Request.send は opject を期待しています。文字列を送信しています。したがって、Request.send(value) ではなく、Request.send({prop: 'value'}) である必要があります。

次の php コードを使用して PHP を作成し、何が返されるかを確認してください。これですぐに解決するかもしれません。$_GET['action'] 以外は何も送信されていないように感じます

<?php
echo '<pre>';
print_r($_GET);
print_r($_POST);
echo '</pre>';
?>
于 2013-03-22T02:08:28.367 に答える