致命错误:无法在第47行的代码中重新分配自动全局变量_POST

时间:2016-09-10 02:51:30

标签: php post global-variables

以下是代码:

  

致命错误:无法在第47行的代码中重新分配自动全局变量_POST。

第47行是:

public function add_status($user_id, $_POST)

PHP:

<?php
require_once('class-db.php');
if ( !class_exists('INSERT') ) {
    class INSERT
        {
            public function update_user($user_id, $postdata)
                {
                    global $db;
                    $table = 's_users';

                    $query = "
                            UPDATE $table
                            SET user_email='$postdata[user_email]', user_pass='$postdata[user_pass]', user_nicename='$postdata[user_nicename]'
                            WHERE ID=$user_id
                        ";
                    return $db->update($query);
                }

            public function add_friend($user_id, $friend_id)
                {
                    global $db;
                    $table = 's_friends';
                    $query = "
                            INSERT INTO $table (user_id, friend_id)
                            VALUES ('$user_id', '$friend_id')
                        ";

                    return $db->insert($query);
                }

$insert = new INSERT;
?>

任何见解?谢谢:))

1 个答案:

答案 0 :(得分:1)

为了澄清@Nasir所说的内容,$_POST是一个超级全局,所以你不能这样宣告它。您只需声明一个常规变量并传递$_POST

public function add_status($user_id, $array)
    {
        // This will print whatever array you pass
        print_r($array);
    }

所以要使用:

$insert = new INSERT();
$insert->add_status(123, $_POST);

几条旁注:

  

您可以帮助自己注入数据库,而不是使用global $db;

class Insert
    {
        private $db;
        public function __construct($db)
            {
                $this->db = $db;
            }

        public function update_user($user_id, $postdata)
            {
                $table = 's_users';

                $query = "
                        UPDATE $table
                        SET user_email='$postdata[user_email]', user_pass='$postdata[user_pass]', user_nicename='$postdata[user_nicename]'
                        WHERE ID=$user_id
                    ";
                return $this->db->query($query);
            }

    }
// Insert the $db into the class
$insert = new Insert($db);
  

不要在sql中做变量。使用绑定参数:

// Use ? here
$sql =   "UPDATE `s_friends`
          SET `user_email` = ?, `user_pass` = ?, `user_nicename` = ?
          WHERE `ID` = ?";
// I am using PDO (if you use mysqli, look at bind param for that interface)
$query = $this->db->prepare($sql);
$query->execute(array($postdata['user_email'],$postdata['user_pass'],$postdata['user_nicename'],$user_id));
  

不要使用明文密码。您应该使用哈希:

// Hash the password, then store that instead
$password = password_hash($postdata['user_pass'], PASSWORD_DEFAULT);
// Use password_verify() to match the password
  

使用班级自动加载

不要使用if ( !class_exists('INSERT') ) {,而是使用spl_autoload_register()

的类自动加载