2011-08-31 48 views
0

我正在为使用post方法将输入值传递给执行相关mysql查询的php文件的站点编写相当基本的评论函数。正在返回的奇怪POST数据垃圾

的$就部分如下:

// AJAX URL ENCODING 
$("#add").click(function() { 
     // POST COMMENT FORM VALUES 
     var ajaxOpts = { 
     type: "post", 
     url: "includes/addComment.php", 
     data: "&author=" + $("#author").find("input").val() + "&email=" + $("#email").find("input").val() + "&comment=" + $("#leaveComment").find("textarea").val() + "&parent=<?php echo $vid_id; ?>", 
     success: function(data) { 

      // IMMEDIATE DISPLAY 
      // Not relevant to this problem. 

      // CLEAR TEXTAREA FOR NEXT COMMENT 
      $("textarea").val(''); 
     } 


     }; 

    $.ajax(ajaxOpts); 
}); 

这是通过传递给addcomment.php:

require('connection.php');  

//get POST data 
$name = mysql_real_escape_string($_POST["author"]); 
$email = strtolower(md5(trim(mysql_real_escape_string($_POST["email"])))); 
$comment = mysql_real_escape_string($_POST["comment"]); 
$time = Date ('c'); 
$parent = trim(mysql_real_escape_string($_POST["parent"])); 


//add new comment to database 
mysql_query("INSERT INTO comments VALUES(' $name ',' $email ',' $comment ', ' $time ', ' $parent ')"); 

,一切工作正常,除了请求mysql_query并没有结束插入任何值到我的数据库。有点挖后,我发现这一点:

screen grab

所以我假设我的查询是不会提前,因为“:”(?)的垃圾位数据是扔东西展现出来?

我想弄清楚这个错误':'来自哪里,任何人有任何想法?对于这个问题的长度,我尽量缩小可能的罪魁祸首,我尽可能地缩小可能的罪魁祸首。

回答

2

如果从&作者的前面删除&,会发生什么情况?

通常是第一个数据字段不具有&

data: "&author=" 

也如其他人所说的,这将是一个值得欢迎的除了

or die (mysql_error()) 

其通常好的做法命名数据库列在插入 否则如果您更改表结构风险破坏插入语句

insert into (colname1, colname2) values ('value1', 'value2') 
+0

这解决了它!干杯,真的很有意义... – James

0

您可以通过print_r($ _ POST)查看冒号是否真的存在。 其次,在调试时它不会伤害你的查询的结尾抛出

or die (mysql_error()) 

。没有这两个,很难调试。

3

你不必自己做那个URI编码。阅读jQuery的文档,要发送的'数据'可以是地图/ json。

http://api.jquery.com/jQuery.post/

变化

data: "&author=" + $("#author").find("input").val() + "&email=" + $("#email").find("input").val() + "&comment=" + $("#leaveComment").find("textarea").val() + "&parent=<?php echo $vid_id; ?>" 

{ author: 'something',email:'test' } 

或更专业

$("#testform").serialize() //here #("#testform") stands for a '<form>' tag 

而且尽量不要把问题复杂化,明星用一些简单的函数,使用更多的echo()和alert()来调试。

+0

干杯!简化事情一百万倍! – James

0

两件事:

  • ajaxOpts变量超出范围,你将有一个错误(ajaxOpts没有定义)
  • 在你例如,你错过});最后,你应该检查你的JS验证之前检查你的PHP脚本正在工作。如果您有JS错误,则不会调用ajax调用。
+0

哎呀!只是注意到当我粘贴我的代码时我停止了。编辑。 – James