将POST数据从Javascript(jquery)传递给php问题?

时间:2010-11-16 07:18:07

标签: php jquery ajax post-parameter

我一直试图传递这个值:

// Content to submit to php
Others string here. And this link:
http://www.youtube.com/watch?v=CUUgKj2i1Xc&feature=rec-LGOUT-exp_fresh+div-1r-2-HM

到php页面,并将其插入数据库。这是我目前的代码:

... // javascript

var content = $("#mcontent").val();
$.ajax({
    url : '<?php echo PATH; ?>functions/save.php',
    type: 'POST',
    data: 'id=<?php echo $_GET['id']; ?>&content=' + content + '&action=save&val=<?php echo md5("secr3t" . $_SESSION['userid_id']); ?>',
    dataType: 'json',

    success: function(response) {
        if (response.status == 'success') {
            alert(response.message);
        } else {
            alert(response.message);
        }
    }
});

实际上没有错误,但在数据库中,它保存的是:

Others string here. And this link:
http://www.youtube.com/watch?v=CUUgKj2i1Xc

我想我知道问题是什么,问题是:

http://www.youtube.com/watch?v=CUUgKj2i1Xc&安培;特征 = REC-LGOUT-exp_fresh + DIV-1R-2-HM

我认为它将“&amp; feature =”作为另一个POST数据。我尝试过:

但两者都不起作用。你有其他方式吗?

编辑:

您是否预见到可能发生的任何其他问题?内容由用户输入/写入。意思是,用户可以键入/写入任何内容。反手,我做了其他检查,包括“mysql_real_escape_string”

2 个答案:

答案 0 :(得分:1)

学习逃避。你很容易受到XSS的攻击。在这种情况下,您的数据是网址的一部分,因此您必须urlencode()

var content = $("#mcontent").val();
$.ajax({
    url : '<?php echo PATH; ?>functions/save.php',
    type: 'POST',
    data: 'id=<?php echo urlencode($_GET['id']); ?>&content=' + urlencode(content) + '&action=save&val=<?php echo md5("secr3t" . $_SESSION['userid_id']); ?>',
    dataType: 'json',

    success: function(response) {
        if (response.status == 'success') {
            alert(response.message);
        } else {
            alert(response.message);
        }
    }
});

注意:我假设PATH不包含'\等特殊字符。由于$_SESSION['user_id']是md5-ed,因此它不需要转义,因为它是安全的(md5返回一个固定长度为32的字符串,仅包含0-9和a-f。

答案 1 :(得分:1)

关于jQuery的一个好处是data参数可以采用JS对象,因此您不需要尝试手动构建查询字符串。

<?php

    $data = array("id" => $_GET['id'], 
                  "action" => "save", 
                  "val" => md5("secr3t",$_SESSION['userid_id'])
                 );
    $json_data = encode_json($data);
    $json_data = str_ireplace($json_data, '</script>', '<\/script>');
    echo "var data = $json_data;";
?>
data.content = content;
$.ajax({
            url : '<?php echo PATH; ?>functions/save.php',
            type: 'POST',
            data: data,
            dataType: 'json',