致命错误:在字符串上调用成员函数 Createuser


Fatal error: Call a member function Createuser on string

每当我尝试调用函数 Createuser() 时,它都会给我这个错误

致命错误:在字符串上调用成员函数 Createuser()

我真的不知道为什么,因为我的其他功能都可以工作。

我调用函数的代码:

 $u = $_POST['username'];
  $p = $_POST['password'];
  $e = $_POST['email'];
  // attempt to create user
  $reg = $u->Createuser($u, $p, $e);
  // if an error code is sent back, it will put it in a session.
  switch ($reg) 
  {
    case 2:
      $_SESSION['err'] = 2;
      break;
    case 3:
      $_SESSION['err'] = 3;
      break;
    case 10:
      $_SESSION['err'] = 10;
      break;

以及函数本身:

function Createuser($username, $password, $email)
    {
        include("connection.php");
        $info = mysqli_query($db2, "SELECT * FROM users WHERE username = '$username' AND password = '$password'");
        // If any field is not empty 
        if(($username != NULL) && ($password != NULL) && ($email != NULL))
        {
            // If the result matches break the process
            if(mysqli_num_rows($info) == 0)
            {
                // If rank is defined make it rank 0 else rank equels rank
                if($rank == NULL)
                {
                    $rank = 0;
                }
                else
                {
                    $rank = $rank;
                }
                // Insert into $table
                if(mysqli_query($db2, "INSERT INTO users VALUES(NULL, '$username', '$password', '$email', 0)"))
                {
                    return 10;
                }
            }
            else
            {
                // Return error code 3
                return 3;
            }
        }
        else
        {   
            // Return error code 2
            return 2;
        }
    }

真的希望有人能帮助我解决这个问题。

您遇到的问题来自以下代码部分:

$u = $_POST['username'];
$p = $_POST['password'];
$e = $_POST['email'];
// attempt to create user
$reg = $u->Createuser($u, $p, $e);

您必须通过$_POST['username']$u设置为字符串,然后尝试在该字符串上调用函数。

如果您之前创建了一个变量$u该变量是类 User(如注释中所述),则通过执行$u = $_POST['username'];,您已经销毁了该对象并将其设置为字符串。

您需要执行以下操作:

$user = new User(); // or however the user object is created
$u = $_POST['username'];
$p = $_POST['password'];
$e = $_POST['email'];
// attempt to create user
$reg = $user->Createuser($u, $p, $e);
$reg = $u->Createuser($u, $p, $e);

将其替换为 $reg=$user->Createuser($u, $p, $e); 更改对象的名称。

$u可

验证在此代码中是冲突的。请再拿一个可验证的:

替换此:

$u = $_POST['username'];

$username = $_POST['username'];