【问题标题】:Can't access php $_POST value无法访问 php $_POST 值
【发布时间】:2015-09-16 20:41:23
【问题描述】:

我有这个 jquery 函数,它将 div 的 id 发送到 php 文件,然后发送到 mysql 表。这很好用,但是我无法访问 php 文件中 $_POST 变量的值。我试图用 print_r($favid)、var_dump($favid) 等来揭示它,但它们都返回类似 'array ()' 或 'NULL' 之类的东西。它正在工作,因为它在 mysql 表中更新得很好。

所以我的问题是,为什么 mysql 表正在接收值,但在 php 文件中尝试访问它时它是空的?

我对此很陌生,任何帮助将不胜感激。 谢谢。

jquery:

$("#button").click(function() {

    postid = $(this).parents('.row').attr('id');

    $.ajax({
        url: "favourites.php",
        method: "POST",
        data: {
            favourite: postid
        },
        success: function(result) {
            alert('success');
        }

    });

});

php:

session_start();

if(isset($_SESSION['id']) AND isset($_POST['favourite'])){

$user = mysql_real_escape_string($_SESSION['id']); 
$favid = mysql_real_escape_string($_POST['favourite']);


$query = mysql_query("SELECT * FROM ajaxfavourites WHERE user=$user AND favid=$favid");
$matches = mysql_num_rows($query);

// If it is not favourited, add as favourite

if($matches == '0'){
mysql_query("INSERT INTO ajaxfavourites (user, favid) VALUES ('$user', '$favid')");
}

// Instead, if it is favourited, then remove from favourites

if($matches != '0'){
mysql_query("DELETE FROM ajaxfavourites WHERE user=$user AND favid=$favid");

}

}

上述两项工作,但我无法像下面这样获得 $favid 的价值......

php:

echo $favid;  // shows nothing    

echo var_dump($favid);  // shows 'NULL'

echo print_r($favid);  // shows '1' it should be '3'

【问题讨论】:

    标签: php jquery mysql post echo


    【解决方案1】:

    您不应使用parents() 来获取postidparents() 会给你所有匹配的祖先array。这就是您在服务器端收到 Array() 的原因。

    使用closest() 而不是parents()closest() 会给你第一个匹配的祖先。

    postid = $(this).closest('.row').attr('id');
    

    【讨论】:

    • @jm1175 尝试调试var_dump($_POST)
    【解决方案2】:

    您能否通过 alert 或 console.log 检查在 jQuery 代码中您是否获得了正确的 postid 值

    在php代码中你能不能把这行放在if语句之前,然后检查一次。

    $favid = mysql_real_escape_string($_POST['favourite']);
    

    【讨论】:

    • 如果favouriteid,我认为不需要这个,它将是数字
    • 我检查了一下,它正在警告正确的值,就好像它通过 php 隐藏但随后在 mysql 表中显示出来。我尝试将“$favid = mysql_real_escape_string($_POST['favourite']);”放在 if 语句之外,现在“var_dump($favid)”显示:string(0)“”?
    【解决方案3】:

    直接父级 .parent('.row');见例子https://api.jquery.com/parent/

    如果是parent的parent,则为parents('unique_class_or_id');见例子https://api.jquery.com/parents/

    最近的 id 或类使用最接近()函数。见例子https://api.jquery.com/closest/

    var postid = $(this).parent('.row').attr('id');
    

    var postid = $(this).closest('.row').attr('id');
    

    【讨论】:

    • 你能补充一些解释吗,为什么要使用这个代码?
    • 使用 parent() 函数直接获取父级。如果在这种情况下它在父母之前,父母('unique_class_or_id')。如果获取最近的获取最近的()函数。
    • 用之前的评论更新你的答案。你的答案转到low quality post,人们可以投票删除你的答案,因为你只提供了代码没有解释。你应该在回答时加入一些解释。
    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2015-09-25
    • 2014-07-19
    • 2019-08-28
    • 2013-12-15
    相关资源
    最近更新 更多