我已经创建了一个validation
类,它接受用户的输入并将其存储在一个名为user_data
的类属性中,我还使用了一个foreach
循环来识别一个空字段,如果找到了这个空字段,我就使用isset()
函数设置一个会话变量,以便在登录页面中向用户显示一个错误。
然后,我使用了继承的力量,创建了一些子类来验证用户的输入。
这里的问题是没有设置validation
类和password_validate extends validation
类中的$errors
变量,其中我使用了会话变量$_SESSION['inval rep password']
。
我做错了什么?我如何才能纠正它?
<?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);
?>
发布于 2021-09-29 06:07:24
我不知道你现在是否需要这个,但我可以建议一个解决方案。尝试使用此代码。
<?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。如果是这样,这意味着没有错误,否则我将打印错误。
https://stackoverflow.com/questions/67694621
复制相似问题