表单数据未传递给PHP文件

时间:2013-03-21 19:10:03

标签: javascript mootools

我正在撰写的程序和我正在努力实现的功能

好。所以我现在正在写的是一个非常简单的论坛,在使用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的开发者工具来查看发生了什么,这就是我发现的:

screenshot of post data

现在对我而言,这意味着数据已成功加载到请求中,并且正在传递给PHP文件。显然我错了。我一直绞尽脑汁试图让这项工作成功。

我知道API工作正常,因为我班上的其他人都没有遇到任何问题,我使用的代码几乎是笔记中的代码,所以我大约90确定这是正确的。

需要注意的一点是onSuccess键中的代码运行,所以我知道它在AJAX方面不是问题。

另一件事是这个代码在那些计算机上在大学工作,而且因为我已经把它带回家,所以决定不工作。

堆栈追踪

  

致命错误:带有消息的未捕获异常'PDOException'   'SQLSTATE [HY000]:一般错误:1接近“)”:G:\ Ajax中的语法错误   Coursework \ guestbook \ php \ database.php:134Stack trace:#0 G:\ 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}   在第134行的G:\ Ajax Coursework \ guestbook \ php \ database.php中抛出

2 个答案:

答案 0 :(得分:0)

Object.toQueryString用于将对象转换为查询字符串。因此,如果服务器要求设置$ _POST ['name']和$ _POST ['comment'],则不会。

坦率地说,因为你发布它,我不认为$ _GET ['name']或$ _GET ['comment']也会设置。

Request.send需要一个对象。你发送一个字符串。所以它应该是 Request.send({prop:'value'}),而不是Request.send(value)。

帮自己一个忙,并使用以下PHP代码制作PHP,并查看它返回的内容。它可能会马上清除它。我感觉除了$ _GET ['action']

之外什么都没发送
<?php
echo '<pre>';
print_r($_GET);
print_r($_POST);
echo '</pre>';
?>

答案 1 :(得分: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方法来发布数据。