簡體   English   中英

如何使用jQuery POST將變量從JavaScript傳遞到PHP

[英]How to pass variable from JavaScript to PHP using jQuery POST

我正在通過sessionnum頁面中的以下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 <= ".
                (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);

僅當我在backend.php中對諸如$tablename1 = 100類的賦值進行硬編碼時,即使變量及其值都是整數且具有相同的值,它也才有效。 這種修改是不可接受的,因為我實際上必須傳遞變量。 我的代碼中有錯誤嗎?

該代碼改編自http://articles.sitepoint.com/article/ajax-jquery/3

感謝您的幫助,使用jQuery正確發布變量。

嘗試將POST變量更改為$_POST['variable_name'] 您使用的語法依賴於全局變量被注冊為變量。 此功能是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注入,已使用mysql_real_escape_string對您在SQL查詢中使用的變量(用戶可能更改的變量)進行了轉義。

看起來好像您是在依靠register_globals ,並引用PHP中的POST變量,而不是引用$ _POST超全局索引,例如

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

順便說一句,您應該重新考慮允許在客戶端代碼中使用表名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM