当前位置: 首页 > 知识库问答 >
问题:

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

韦修文
2023-03-14

嘿,伙计们,现在我在自学PHP,但遇到了一个非常令人困惑的问题。在运行另一个文件时,如果在单独的文件中包含此代码,则会出现以下错误。

警告:C:\xampp\htdocs\MirrorTrade\classes\signup中未定义的数组键“first\u name”。php第26行警告:C:\xampp\htdocs\MirrorTrade\classes\signup中未定义的数组键“last\u name”。php第27行警告:C:\xampp\htdocs\MirrorTrade\classes\signup中未定义的数组键“email”。php第28行警告:C:\xampp\htdocs\MirrorTrade\classes\signup中未html" target="_blank">定义的数组键“password”。php第29行致命错误:未捕获错误:调用C:\xampp\htdocs\MirrorTrade\classes\signup中未定义的函数create\u userid()。php:32堆栈跟踪:#0 C:\xampp\htdocs\MirrorTrade\classes\signup。php(17):注册-

这是我遇到问题的代码

<?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个答案

汤英豪
2023-03-14

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

$userid = create_userid();

应该是:

$userid = $this->create_userid();

还要注意,您的代码容易受到SQL注入攻击。不要使用字符串连接构建查询,而是始终使用带绑定参数的准备语句。有关一些好的例子,请参阅本页和本文。

并且永远不要存储纯文本密码。而是使用password_hash()password_verify()

 类似资料:
  • 问题内容: 我正在测试php 7,并遇到此错误: 致命错误:未捕获错误:调用未定义函数odbc_connect() 从文档页面:http : //php.net/manual/en/function.odbc- connect.php php 7未列为受支持。 有谁有办法解决这个问题或何时会支持它? 谢谢@ 问题答案: DOC页面上确实列出了PHP 7,因此只需安装php-odbc,您就可以使用了

  • 问题内容: 当我要实现Authorize.net付款网关时。但是,我收到此错误: 调用未定义的函数curl_init() 请让我知道其中有什么问题。 问题答案: 如果您使用的是Windows: 转到您的php.ini文件,并从以下行的开头删除标记: 保存文件后, 必须 重新启动HTTP服务器软件(例如Apache),然后才能生效。 对于Ubuntu 13.0及更高版本,只需使用已解包的软件包。在终

  • 问题内容: 我刚刚将脚本切换到其他服务器。在以前的服务器上,它可以完美地工作,现在,我将它们切换到其他服务器上,我无法理解问题。 我不确定是否有帮助,但这是相关的代码。 PHP版本是:PHP 5.3.2 问题答案: 从文档开始,在PHP 5.4.0发行之前: 仅当PHP作为Apache模块安装时才支持此功能。 PHP 5.4.0和更高版本无条件支持此功能。 所述文档还包括替换功能,这些功能通过逐步

  • 我正在OSX El Capitan和Apache服务器上运行最新版本的PHP(目前为5.6.22)。 我正在尝试使用PostgreSQL数据库,实际上,昨天已经成功了,但在我重写了httpd之后。conf文件和默认文件(我想这就是问题所在)我收到了以下消息: 调用中未定义的函数pg_connect()。。。 问题是我没有改变php。ini文件。如果我运行phpinfo();我得到了etc/php。

  • 定义函数 在JavaScript中,定义函数的方式如下: function abs(x) { if (x >= 0) { return x; } else { return -x; } } 上述abs()函数的定义如下: function指出这是一个函数定义; abs是函数的名称; (x)括号内列出函数的参数,多个参数以,分隔; { ...

  • 问题内容: 我正在尝试通过本地主机访问我的Gmail帐户。但是,我得到的答复: 致命错误:调用未定义的函数imap_open() 这是我的代码: 问题答案: 很简单,在您的PHP安装中未激活IMAP扩展。默认情况下未启用它。如果本地安装在Windows上运行XAMPP,则必须按照XAMPP FAQ 中的说明启用它: IMAP对PHP的支持在哪里? 默认情况下,由于一些家庭版本(例如Windows