2017-09-20 19 views
1

我正在使用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(); 

我該如何解決這個問題?

回答

1

問題是概念..什麼是什麼

$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