php - 调用 PHP 中未定义的函数和数组键,即使它已明确定义?
问题描述
大家好,目前我正在自学 PHP,但遇到了一个非常令人困惑的问题。运行在单独文件中包含此代码的另一个文件时出现以下错误。
警告:第 26 行 C:\xampp\htdocs\MirrorTrade\classes\signup.php 中未定义的数组键“first_name”警告:C:\xampp\htdocs\MirrorTrade\classes\signup.php 中未定义的数组键“last_name”第 27 行警告:第 28 行 C:\xampp\htdocs\MirrorTrade\classes\signup.php 中未定义数组键“email”警告:C:\xampp\htdocs\MirrorTrade\classes\signup 中未定义数组键“密码”。第 29 行的 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;
}
}
解决方案
当你在同一个类中引用另一个方法时,你需要在它前面加上$this
. 所以这段代码:
$userid = create_userid();
应该:
$userid = $this->create_userid();
另请注意,您的代码容易受到SQL 注入攻击。不要使用字符串连接构建查询,而是始终使用带有绑定参数的准备好的语句。有关一些很好的示例,请参阅此页面和此帖子。
并且永远不要存储纯文本密码。而是使用password_hash()
和password_verify()
。
推荐阅读
- d3.js - 将图例添加到 dc.js 散点图
- c# - 获取C#中组合框的文本后,如何在单词中间添加特殊字符?
- sql - 将 Where 子句存储在表中以获取状态
- javascript - 是否可以删除段之间的边界,但在 react-chartjs-2 中保留饼图周围的边界?
- python - 在 Python 中对字典进行排序
- python - 将单个元素与元素字典键/值对匹配,其中值是列表本身
- css - @media 的目的是什么(最大宽度:-1)
- android - Android Rx 去抖算子
- c++ - 在 Eigen::Matrix::data() 上使用 std::move 将 Eigen::Matrix 转换为向量
- python - Keras 中的 tensorflow 会话在哪里