调用 PHP 中未定义的函数和数组键,即使它已明确定义?

Posted

技术标签:

【中文标题】调用 PHP 中未定义的函数和数组键,即使它已明确定义?【英文标题】:Call to undefined Function and array keys in PHP even though it has been clearly been defined? 【发布时间】:2021-04-07 21:42:13 【问题描述】:

大家好,目前我正在自学 php,但遇到了一个非常令人困惑的问题。运行在单独文件中包含此代码的另一个文件时出现以下错误。

警告:第 26 行 C:\xampp\htdocs\MirrorTrade\classes\signup.php 中未定义的数组键“first_name” 警告:第 27 行 C:\xampp\htdocs\MirrorTrade\classes\signup.php 中未定义的数组键“last_name” 警告:第 28 行 C:\xampp\htdocs\MirrorTrade\classes\signup.php 中未定义的数组键“email” 警告:第 29 行 C:\xampp\htdocs\MirrorTrade\classes\signup.php 中未定义的数组键“密码” 致命错误:未捕获的错误:调用 C:\xampp\htdocs\MirrorTrade\classes\signup.php:32 中未定义的函数 create_userid() 堆栈跟踪:#0 C:\xampp\htdocs\MirrorTrade\classes\signup.php( 17): Signup->create_user(Array) #1 C:\xampp\htdocs\MirrorTrade\signup.php(7): Signup->evaluate(Array) #2 main 在 C:\xampp\htdocs\MirrorTrade 中抛出\classes\signup.php 在第 32 行

这是我的代码有问题

<?php

class Signup

private $error = "";
public function evaluate($data)
    
        foreach ($data as $key => $value) 
            
            if(empty($value))
            
                $this->error = $this->error . $key . " is empty!<br>";
            
        
        if($this->error == "")
        
            $this->create_user($data);
        
        else
        
            return $this->error;
        
    
public function create_user($data)
    
        $firstname = $data['first_name'];
        $lastname = $data['last_name'];
        $email = $data['email'];
        $password = $data['password'];

        $url_address = strtolower($firstname) . "." . strtolower($lastname);
        $userid = create_userid();

        $query = "insert into 
        users
        (userid,first_name,last_name,email,password,url_address)
        values
        ('$userid','$first_name','$last_name','$email','$password','$url_address')";
        return $query;
    
    
private function create_userid()
    
        $length = rand(4,19);
        $number = "";
        for ($i=0; $i < $length; $i++) 
         
            $new_rand = rand(0,9);
            $number = $number . $new_rand;
        
        return $number;
    

【问题讨论】:

【参考方案1】:

当你在同一个类中引用另一个方法时,你需要在它前面加上$this。所以这段代码:

$userid = create_userid();

应该是:

$userid = $this->create_userid();

另请注意,您的代码容易受到SQL injection 攻击。不要使用字符串连接构建查询,而是始终使用prepared statementsbound parameters。请参阅 this pagethis post 了解一些很好的示例。

并且从不存储纯文本密码。请改用password_hash()password_verify()

【讨论】:

感谢您的解决方案!我知道我的代码并不完全安全并且容易受到攻击,但稍后我会在我关注的视频中对此进行介绍 :) 谢谢!

以上是关于调用 PHP 中未定义的函数和数组键,即使它已明确定义?的主要内容,如果未能解决你的问题,请参考以下文章

更改 PHP 版本后调用 Xampp 中未定义的函数 mb_detect_encoding() (PHPmyadmin)

致命错误:在第 5 行调用 C:\wamp\www\Test-CI\application\views\layout.php 中未定义的函数 base_url()

致命错误:在第 177 行调用 C:\Users\Jarek\mywebsite\phpMyAdmin\libraries\php-gettext\gettext.inc 中未定义的函数 mb_det

如何修复这个未定义的数组键? [复制]

使用箭头函数时,开发工具中未定义“this”

调用未定义的函数 curl_init() 即使它在 php7 中启用