如何在PHP中设置通知消息OOP

问题描述:

我正在使用PHP OOP处理CMS。在这个项目中,我添加了一个功能,一个网站的管理员可以添加和管理其他管理员。为了添加一个管理员,我创造了这个页面被称为admin_new.php和是这样的:如何在PHP中设置通知消息OOP

<?php 
if (isset($_POST['submit'])){ 
    $username = $_POST['uname']; 
    $email = $_POST['email']; 
    $password = $_POST['pass']; 
    $groups = $_POST['groups']; 
    if($groups == "Main Admin"){ 
     $level = 1; 
    }else if($groups == "Administrator"){ 
     $level = 2; 
    }else if($groups == "Content Creator"){ 
     $level = 3; 
    }else if($groups == "Social Media Manager"){ 
     $level = 4; 
    }else{ 
     $level = 5; 
    } 
    if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) { 
     $notice['email_validation'] = "The email that you have entered is not a valid one"; 
    }else{ 
     $registration = new Register(); 
     $notices = $registration->CheckUname($username,$email,$password,$groups,$level)->getNotices(); 
    } 
} 
?> 
<div class="content-wrapper"> 
    <section class="content-header"> 
     <h1> 
      Add New Admin 
      <small>You can add new admin here</small> 
     </h1> 
     <ol class="breadcrumb"> 
      <li class="active">addnewadmin.php</li> 
     </ol> 
    </section> 
    <section class="content"> 
     <div class="row"> 
      <div class="col-md-6"> 
       <div class="box box-primary"> 
        <div class="box-header with-border"> 
         <h3 class="box-title">Required Information</h3> 
        </div> 
        <?php 
        if(isset($notice['email_validation'])) { 
         echo " 
          <div class='alert alert-danger'> 
           <strong>Hey!</strong> ".$notice['email_validation'].". 
          </div> 
         "; 
        } 
        if(isset($notice['username_exists'])) { 
         echo " 
          <div class='alert alert-danger'> 
           <strong>Hey!</strong> ".$notice['username_exists'].". 
          </div> 
         "; 
        } 
        if(isset($notice['email_exists'])) { 
         echo " 
          <div class='alert alert-danger'> 
           <strong>Hey!</strong> ".$notice['email_exists'].". 
          </div> 
         "; 
        } 
        if(isset($notice['success_message'])) { 
         echo " 
          <div class='alert alert-success'> 
           <strong>Hey!</strong> ".$notice['success_message'].". 
          </div> 
         "; 
        } 
        ?> 
        <form role="form" method="POST" action=""> 
         <div class="box-body"> 
          <div class="form-group"> 
           <label>User name</label> 
           <input type="text" class="form-control" placeholder="Enter username" name="uname" required> 
          </div> 
          <div class="form-group"> 
           <label for="exampleInputEmail1">Email address</label> 
           <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email" name="email" required> 
          </div> 
          <div class="form-group"> 
           <label for="exampleInputPassword1">Temporary password</label> 
           <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Enter password" name="pass" required> 
          </div> 
          <div class="form-group"> 
           <label>Group admin</label> 
           <select class="form-control" name="groups"> 
            <option value="Main Admin">Main Admin</option> 
            <option value="Administrator">Administrator</option> 
            <option value="Content Creator">Content Creator</option> 
            <option value="Social Media Manager">Social Media Manager</option> 
            <option value="Analyst">Analyst</option> 
           </select> 
          </div> 
         </div> 
         <div class="box-footer"> 
          Visit <a href="https://zite.pouyavagefi.com/documentation/types.php">admin types</a> documentation to know the differences between each admin. 
         </div> 
         <div class="box-footer"> 
          <button name="submit" type="submit" class="btn btn-primary">Submit</button> 
         </div> 
        </form> 
       </div> 
      </div> 
     </div> 
    </section> 
</div> 

而且,我已经在这个文件中使用被称为Register.class.php,包含这个类:

<?php 
class Register 
{ 
    protected $notice = array(); 
    private $db; 
    public function __construct() 
    { 
     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
    } 
    public function CheckUname($username,$email,$password,$groups,$level) 
    { 
     if(!empty($username)&&!empty($email)&&!empty($password)&&!empty($groups)&&!empty($level)) 
     { 
      $chk1 = $this->db->prepare("SELECT username FROM admins WHERE user_name= ?"); 
      $chk1->bindParam(1,$username); 
      $chk1->execute(); 
      if($chk1->rowCount() == 1) 
      { 
       $notice['username_exists'] = "Try different username"; 
       return $notice; 
      }else{ 
       $chk2 = $this->db->prepare("SELECT email FROM admins WHERE email_address= ?"); 
       $chk2->bindParam(1,$email); 
       $chk2->execute(); 
       if($chk2->rowCount() == 1) 
       { 
        $notice['email_exists'] = "The email address that you have entered is already exists in database"; 
        return $notice; 
       }else{ 
        $this->NewAdmin($username,$email,$password,$groups,$level); 
        $notice['success_message'] = "New admin was successfully added"; 
        return $notice; 
       } 
      } 
     } 
    } 
    public function NewAdmin($username,$email,$password,$groups,$level) 
    { 
     if(!empty($username)&&!empty($email)&&!empty($password)&&!empty($groups)&&!empty($level)) 
     { 
      $reg = $this->db->prepare("INSERT INTO admins (user_name, email_address, password_hash, group_admin, date_joined, admin_level) VALUES (?, ?, ?, ?, NOW(), ?)"); 
      $reg->bindParam(1,$username); 
      $reg->bindParam(2,$email); 
      $reg->bindParam(3,$password); 
      $reg->bindParam(4,$groups); 
      $reg->bindParam(5,$level); 
      $reg->execute(); 
     } 
    } 
    public function getNotices() 
    { 
     return $this->notice; 
    } 
} 
?> 

基本上所有我想要做的就是确保:

1用户名不存在于数据库

2 - 用户没有输入EMA它已经存在于数据库

3-如果一切顺利的话,然后添加一个新行到表IL

当我运行这一点,并填写表格,用假信息来检查如何通知出现,我得到这个错误消息:

致命错误:未捕获的错误:调用上阵列的成员函数getNotices()在 admin_new.php:22

堆栈跟踪:addnewadmin.php(20):require_once()

1 {主}抛出admin_new.php上线22

和线路的admins_new.php 22是这样的:

$notices = $registration->CheckUname($username,$email,$password,$groups,$level)->getNotices(); 

我该如何解决这个问题?

问题是概念..什么是什么

$registration - >类的instace 注册 CheckUname($username,$email,$password,$groups,$level) - >函数返回的数组$通知

Basically ur method CheckUname() returns $notices and u call on this array method getNotices() and it's problem..

如果妳想要得到$notices你必须调用$registration实例的公共方法。

$registration->CheckUname($username,$email,$password,$groups,$level); 
$notices = $registration->getNotices() 

$notices = $registration->CheckUname($username,$email,$password,$groups,$level); 
+0

伟大的答案,但现在的问题是,它不ü可以在这里发布一些日志返回$通知 – wrephebiajou

+0

,或者是有一些逻辑上的错误? – Ashwel

+0

基本上没有错误出现,并且逻辑完美地工作。但它只是不显示$ notice消息 – wrephebiajou