Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么在使用继承的类中没有设置这个变量?

为什么在使用继承的类中没有设置这个变量?
EN

Stack Overflow用户
提问于 2021-05-25 19:42:36
回答 1查看 31关注 0票数 0

我已经创建了一个validation类,它接受用户的输入并将其存储在一个名为user_data的类属性中,我还使用了一个foreach循环来识别一个空字段,如果找到了这个空字段,我就使用isset()函数设置一个会话变量,以便在登录页面中向用户显示一个错误。

然后,我使用了继承的力量,创建了一些子类来验证用户的输入。

这里的问题是没有设置validation类和password_validate extends validation类中的$errors变量,其中我使用了会话变量$_SESSION['inval rep password']

我做错了什么?我如何才能纠正它?

代码语言:javascript
运行
AI代码解释
复制
<?php 
session_start();
class validation{
    public $user_data; #storing users data
    public $errors; #storing errors that occurs

    #this function takes users data as an associative array and store it in class $user_data property
    public function __construct($data)
    {
        $this->user_data = $data;
        
        #searching for any empty user inputs
        foreach($this->user_data as $key => $value){
            if(empty($value)){
                #using session variables to display errors to users
                $_SESSION["$key"."_empty"] = "set";
                #storing the errors in $errors property of this class
                $this->errors[] = "empty $key"; 
            }else{
                unset($_SESSION["$key"."_empty"]);
            }
        }
        #using session variables to hold data in the text-box
        foreach($this->user_data as $key => $value){
            $_SESSION["$key" . "_value"] = $value;
        }
    }
}  

#real problem starts from here, the errors are not storing  
class email_validate extends validation{
    function __construct(){
        if(!filter_var($this->user_data['email'], FILTER_VALIDATE_EMAIL)){
            $this->errors[] = "inval email";
            $_SESSION['inval email'] = 'set';
        }else{
            unset($_SESSION['inval email']);
        }
    }
}
class password_validate extends validation{
    function __construct(){
        if(strlen($this->user_data['password']) < 6){
            $this->errors[] = "inval password";
            $_SESSION['inval password'] = 'set';
        }else{
            unset($_SESSION['inval password']);
        }
    }
}
#here is an other problem in this class
class repeat_password_validate extends validation{
    function __construct(){
        if($this->user_data['password'] !== $this->user_data['reppassword']){
            $this->errors[] = "inval repeat password";
            #this session is not getting set
            $_SESSION['inval rep password'] = 'set';
        }else{
            unset($_SESSION['inval rep password']);
        }
    }
}



$data = array("email" => "{$_POST['email']}", "password" => "{$_POST['password']}", "reppassword" => "{$_POST['reppassword']}");
$validation = new validation($data);

#executing validation
$email = new email_validate();
$password = new password_validate();
$repeated_password = new repeat_password_validate();
       

echo "<pre>";
print_r($validation->errors);
?>
EN

回答 1

Stack Overflow用户

发布于 2021-09-29 06:07:24

我不知道你现在是否需要这个,但我可以建议一个解决方案。尝试使用此代码。

代码语言:javascript
运行
AI代码解释
复制
<?php 
session_start();
class validation{
    public $user_data; #storing users data
    public $errors; #storing errors that occurs

    public function __construct($data)
    {
        $this->user_data = $data;
        
        foreach($this->user_data as $key => $value){
            if(empty($value)){
                #using session variables to display errors to users
                $_SESSION["$key"."_empty"] = "set";
                #storing the errors in $errors property of this class
                $this->errors[] = "empty $key"; 
            }else{
                unset($_SESSION["$key"."_empty"]);
            }
        }
        #using session variables to hold data in the text-box
        foreach($this->user_data as $key => $value){
            $_SESSION["$key" . "_value"] = $value;
        }

        if ($this->email_validate() && $this->password_validate() && $this->repeat_password_validate()) {
            echo "Welcome!";
        } else {
            print_r($this->errors);
        }
    }

    private function email_validate() {
        if (!filter_var($this->user_data['email'], FILTER_VALIDATE_EMAIL)) {
            $this->errors[] = 'inval email';
            $_SESSION['inval email'] = 'set';
        } else {
            unset($_SESSION['inval email']);
            return true;
        }
    }

    private function password_validate() {
        if (strlen($this->user_data['password']) < 6) {
            $this->errors[] = 'inval password';
            $_SESSION['inval password'] = 'set';
        } else {
            unset($_SESSION['inval password']);
            return true;
        }
    }

    private function repeat_password_validate() {
        if ($this->user_data['reppassword'] !== $this->user_data['password']) {
            $this->errors[] = 'inval repeat password';
            $_SESSION['inval rep password'] = 'set';
        } else {
            unset($_SESSION['inval rep password']);
            return true;
        }
    }
}  





$data = array("email" => "{$_POST['email']}", "password" => "{$_POST['password']}", "reppassword" => "{$_POST['reppassword']}");
$validation = new validation($data);


?>

如果您正在使用类,则可以创建一个类,然后在其中创建方法并在同一个类中调用它们。尽量不要在一个php文件中创建很多类。这里我在validation()类中创建了email_validate()、password_validate()和repeat_password_validate()方法。然后我检查是否所有的输入都是正确的,如果正确,方法将返回true。然后,在__construct()类中,我检查是否所有方法都返回true。如果是这样,这意味着没有错误,否则我将打印错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67694621

复制
相关文章
jenkins学习13-凭据管理(删除多余的凭据)
jenkins在源码管理选择 Credentials 的时候,有时候会不小心添加多余的凭据,在列表中会显示很多,看着碍眼。 可以在首页的凭据管理删除多余的凭据。 凭据管理
上海-悠悠
2020/03/26
2K0
Jenkins用户、凭据、权限管理
凭据参数、字符参数、密码参数、布尔值参数、文件参数、文本参数、运行时参数、选项参数
DevOps云学堂
2019/10/18
2.8K0
第5章 流水线数据脱敏-Jenkins系统凭据管理
在我们配置持续交付流水线的过程中会与第三方的系统交互。例如:Jira、GitLab、SonarQube等等工具。平时我们在设置第三方系统的认证信息的时候是明文配置的,这样非常不安全,建议使用Jenkins凭据来存储使用。Jenkins的凭据管理是通过Credentials Binding插件实现的,所以在使用前请确保插件已经安装了。
DevOps云学堂
2020/08/03
2.8K0
腾讯云智能结构化识别~资产管理系统
一个发展中的企业,往往都会有很多固定资产需要管理,而这些固定资产的管理、调拨分配、盘点折旧等流程都是非常繁琐的,常常需要大量的时间去完成,资产管理系统(Asset Management System,简称AMS)是一种专门用于对企业的各类资产进行综合管理的软件系统。它覆盖了从资产采购、登记、追踪、维护、调拨、报废到最终处置的整个生命周期,旨在提高资产管理效率、降低管理成本,并为企业决策提供有力支持。
卖核弹的小男孩
2024/12/19
2523
腾讯云智能结构化识别~资产管理系统
腾讯云国际站:腾讯云异常请重试是什么原因
腾讯云作为国内领先的云计算服务提供商,其在技术实力、产品丰富度、安全性等方面都有着很大的优势。但在日常使用过程中,也会遇到一些异常情况,比如出现“腾讯云异常请重试”的提示。本文将探讨这种异常情况可能的原因。
悟空云_飞机@CloudWuKong
2025/01/19
1240
腾讯云国际站:腾讯云异常请重试是什么原因
凭据为王,如何看待凭据泄露?
信息窃取型恶意软件是企业信息安全团队面临的最重大且常被低估的风险因素之一。这类软件侵入计算机后,会盗取浏览器中储存的所有登录凭证、活跃会话的cookies及其他数据,接着将窃取到的信息发送到远程指挥控制(C2)服务器,并且在某些情况下,恶意软件还会为了消除痕迹而自动销毁。
FB客服
2024/01/20
2470
凭据为王,如何看待凭据泄露?
利用腾讯云AI代码助手优化图书馆管理系统
在当今信息爆炸的时代,软件开发已成为推动社会进步和科技发展的重要力量。随着项目规模的扩大和复杂性的提升,我们开发者在编程过程中面临着越来越多的挑战。代码编写的效率、准确性和规范性,直接关系到项目的成功与否。为了应对这些挑战,我们需要借助先进的工具和技术,以提升开发流程的智能化和自动化水平。
桃花键神
2024/08/12
1780
Windows 身份验证中的凭据管理
Windows 凭据管理是操作系统从服务或用户接收凭据并保护该信息以供将来向身份验证目标呈现的过程。对于加入域的计算机,身份验证目标是域控制器。身份验证中使用的凭据是将用户身份与某种形式的真实性证明(例如证书、密码或 PIN)相关联的数字文档。
黑白天安全
2021/07/16
6.2K0
Jenkins实践文档-管理Jenkins(用户、凭据、权限)
凭据参数、字符参数、密码参数、布尔值参数、文件参数、文本参数、运行时参数、选项参数
DevOps云学堂
2019/10/17
3.9K0
腾讯云账号安全管理方案
随着云时代的到来,目前越来越多的企业选择上云,然而企业上云往往面临各种各样的安全威胁,密码泄露、账号共享、数据丢失、系统漏洞、外部攻击等等。
高敬
2022/06/24
12.6K0
腾讯云数据库是什么?腾讯云数据库怎么用?
目前国内的网络技术已经相当发达了,各个公司和企业都开始使用云数据库,国内的云数据库有很多,较为出名的有腾讯云数据库,您数据库对于企业来说是一种伟大的发明,因为能够帮助企业实现高效管理,促进企业的业务发展,但是介于很多人对云数据库不了解,所以下面为大家介绍腾讯云数据库是什么?腾讯云数据库怎么用?
用户8715145
2021/09/30
53.5K1
腾讯云网站备案号是什么?
腾讯云网站备案号是什么及如何使用?国内网站备案时都会听到一个名词:备案号,大家都是初次备案所以老魏分享相关知识和遇到问题如何解决。
魏艾斯博客www.vpsss.net
2019/11/01
13.4K0
腾讯云网站备案号是什么?
【玩转腾讯云】通过公网跨云迁移Window系统到腾讯云
操作之前先对源端做个base快照或镜像以备不时之需,然后在源端系统里安装好腾讯云虚拟化驱动,最好是能卸载掉杀毒防护软件(否则迁移可能会很慢,或最终结果不理想,进不了系统),迁移过去后再重新安装杀软
Windows技术交流
2022/10/11
19K1
国内首家!腾讯云密钥管理系统通过密码应用验证测试
数字经济时代,数据已经成为关键生产资料。运用密码技术对数据传输、流转、存储和使用等环节进行加密保护,是确保用户和企业信息安全的重要手段。
腾讯安全
2021/05/08
4.3K0
国内首家!腾讯云密钥管理系统通过密码应用验证测试
基于腾讯云OCR能力的行驶证年审管理系统实践
在现代社会,车辆管理的效率直接影响到交通秩序和人们的出行体验。行驶证作为车辆的重要证件,承载了车主和车辆的基本信息。传统的年审管理方式往往依赖人工录入,效率低下且容易出错。因此,开发一个基于OCR(光学字符识别)技术的行驶证年审管理系统显得尤为重要。
lyushine
2024/12/17
1020
腾讯云 上传视频_云点播系统源码
所需jar包http://download.csdn.net/download/sinat_36596988/10195891
全栈程序员站长
2022/11/17
14.4K0
获取远程管理软件保存的凭据
内网的核心敏感数据,不仅包括数据库、电子邮件,还包括个人数据及组织的业务数据、技术数据等。可以说,价值较高的数据基本都在内网中。本文重点介绍如何快速定位个人计算机,并对计算机操作系统信息、浏览器登录和使用的历史记录、用户文件操作行为以及聊天软件对话内容等信息进行收集。因此,了解攻击者的操作流程,对内网数据安全防护工作至关重要。
Ms08067安全实验室
2024/03/22
4930
获取远程管理软件保存的凭据
腾讯云访问管理服务(CAM)介绍
访问管理(Cloud Access Management,CAM)是一套建立于腾讯云账号体系和开放云API基础之上的云服务,用于帮助客户安全地管理腾讯云账户的访问权限,资源管理和使用权限。通过 CAM,用户可以创建、管理和销毁用户(组),并通过身份管理和策略管理控制哪些人可以使用哪些腾讯云资源。
byronzhong
2018/07/13
7.4K0
腾讯云访问管理服务(CAM)介绍
企业信息管理系统是什么?
企业信息系统特指用以企业的各种各样信息系统,例如管理方法信息系统或管理决策适用系统、权威专家系统、各种各样泛ERP系统或客户关系管理管理方法、人力资源资源优化配置那样的职业化系统,全是企业信息系统。[1]
清风明月渝满天
2021/07/21
1.2K0
企业信息管理系统是什么?
腾讯云支付系统架构介绍
近年来,得益于丰富的场景、便捷的服务,移动支付用户总量和支付频度持续快速增加,移动支付已经成为人们的生活习惯。但是便捷之后也暗藏隐忧,调查报告显示(《2017移动支付用户调研报告》),商户不支持和安全隐患成为移动支付用户最担心的问题,其次是付费失败等问题。
腾讯 架构师
2021/07/15
7.6K0
腾讯云支付系统架构介绍

相似问题

腾讯云是什么?

2161

腾讯云灾备系统?

0289

连接腾讯云桌面显示凭据无法工作?

2401

腾讯云与腾讯会议是什么关系?

1732

腾讯云好不好_腾讯云系统好不好_腾讯云域名好不好?

1329
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文