如何使用jQuery POST将变量从JavaScript传递给PHP

我从页面chat.php中的以下Javascript函数传递变量sessionnum:

 $(document).ready(function(){ timestamp = 0; updateMsg(); $("form#chatform").submit(function(){ $.post("backend.php",{ message: $("#msg").val(), name: author, action: "postmsg", time: timestamp, tablename1: sessionnum }, function(xml) { $("#msg").empty(); addMessages(xml); document.forms['chatform'].reset() fixScroll(); }); return false; }); }); 

到backend.php中的以下PHP函数:

 if(@$action == "postmsg") { mysql_query("INSERT INTO `$tablename1` (`user`,`msg`,`time`) VALUES ('$name','$message',".time().")",$dbconn); mysql_query("DELETE FROM `$tablename1` WHERE id $time ORDER BY id ASC LIMIT $display_num",$dbconn); 

它只适用于我在backend.php中对诸如$tablename1 = 100的赋值进行硬编码,即使变量及其值都是整数和相同的值。 这个hack是不可接受的,因为我实际上必须传递变量。 我的代码中有错误吗?

此代码改编自http://articles.sitepoint.com/article/ajax-jquery/3

感谢任何使用jQuery正确地发布变量的帮助。

尝试将POST变量更改为$_POST['variable_name'] 。 您正在使用依赖于全局变量注册的语法。 这是一项function,a)默认情况下未启用,b)启用时会产生重大安全风险。 因此,尝试将服务器端代码更改为:

 $action = $_POST['action']; $tablename1 = mysql_real_escape_string($_POST['tablename1']); $name = mysql_real_escape_string($_POST['name']); $message = mysql_real_escape_string($_POST['message']); if(@$action == "postmsg") { mysql_query("INSERT INTO `$tablename1` (`user`,`msg`,`time`) VALUES ('$name','$message',".time().")",$dbconn); mysql_query("DELETE FROM `$tablename1` WHERE id <= ". (mysql_insert_id($dbconn)-$store_num),$dbconn); } $messages = mysql_query("SELECT user,msg FROM `$tablename1` WHERE time>$time ORDER BY id ASC LIMIT $display_num",$dbconn); 

请注意,为了防止某些SQL注入,您在SQL查询中使用的变量(用户可能会更改)已使用mysql_real_escape_string进行转义。

看起来好像你依赖于register_globals ,并引用PHP中的POST变量,而不是引用$ _POST超全局索引,例如

 if ( $_POST['action'] == 'postmsg' ) { $name= mysql_real_escape_string( trim( $_POST['name'] ) ); // query using $name reference } 

另外,您应该重新考虑允许在客户端代码中使用tablename。