调用 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 statements 和bound parameters。请参阅 this page 和 this 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