无法在C:wampwwwzrcorefunctionsusers.php中重新分配自动全局变量_


Cannot re-assign auto-global variable _POST in C:wampwwwzrcorefunctionsusers.php

我使用的是PHP和MySQL。我正在尝试使用PHP函数将表单数据从网页插入MySQL数据库。

这是用户表单页面的代码:

<?php 
include 'core/int.php';
include 'includes/overall/header.php';

if(!empty($_POST)){
$add_status = $insert->add_status($user_data['user_id'], $_POST);
}
?>

  <form action = "" method = "POST">
        <ul>
            <li>
                <input name = "question_time" type = "hidden" value = "<?php echo time()?>" />
            </li>
            <li>
                <h2>Post your Question <?php echo $user_data['username'];?></h2>
                <textarea name = "question"></textarea>
            </li>
            <li>
                <p><input type = "submit" value = "submit"></p>
            </li>
        </ul>
  </form>

这就是我在另一页上定义的函数add_status。。

function add_status($user_id, $_POST){
mysqli_query("INSERT into `post` (user_id, status_time, status_content) VALUES($user_id, '$_POST[question_time]', '$_POST[question]')");
}

当它在本地主机上运行时,会抛出一个错误:

无法在第97行的C:''wamp''www''zr''core''functions''users.php中重新分配自动全局变量_POST

我看到97行是函数add_status()

这个错误意味着什么?我该如何修复它?

您的问题是这个

function add_status($user_id, $_POST){

您正在将$_POST声明为局部参数变量。根据定义,$_POST是一个超全局(可用于所有作用域)。因此,要么需要删除参数并让它正常传播,要么需要将其更改为像$post这样的局部变量并使用它。

function add_status($user_id, $post){

我推荐后者。

其他一些注意事项:mysql_query和相关联的参数已弃用,将被删除。请考虑mysqli

您正在将$_POST直接传递到SQL中。这让您对SQL注入持开放态度。你需要解决这个问题。

不能将$_POST用作另一个局部变量,因为它在php中被定义为具有只读属性的全局变量。要解决这个问题,只需在函数定义add_status中使用另一个变量名,而不是$_POST。例如:

function add_status($user,$postVar){
    ...
}

$_POST是一个全局变量,正如它在错误中所说,您无法重新分配它。您可以通过更改您的功能声明

function add_status($user_id, $values){
  mysql_query("INSERT into `post` (user_id, status_time, status_content) VALUES($user_id, '$values[question_time]', '$values[question]')");
}

@詹斯说:

不要使用不复杂的myslq_*API。在准备好的语句中使用mysqli_*或pdo–Jens

您应该将其替换为

使用以下代码

function add_status($user_id){
$qt = $_POST[question_time];
$q=$_POST[question];
mysqli_query("INSERT into `post` (user_id, status_time, status_content) VALUES($user_id, '$qt', '$q')");
}

它应该对你有用。