2016-09-13 6 views
0

Ich mache mein eigenes benutzerdefiniertes CMS mithilfe von PHP Object Oriented ... Ich habe eine Seite erstellt, auf der ein Hauptadministrator einer Site einen anderen Administrator hinzufügen kann. Um dies zu tun, habe ich diese Form:So rufen Sie eine Funktion innerhalb einer anderen Funktion in PHP auf OOP

<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"> 
       <option>Main Admin</option> 
       <option>Administrator</option> 
       <option>Content Creator</option> 
       <option>Analyst</option> 
      </select> 
     </div> 
    </div> 
    <div class="box-footer"> 
     <button name="submit" type="submit" class="btn btn-primary">Submit</button> 
    </div> 
</form> 

Dann habe ich diese als Aktionsdatei:

So wie Sie habe ich genannt eine Klasse sehen Register und in dieser Klasse namens I codiert dies:

class Register { 
    private $db; 

    public function __construct() { 
     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
    } 

    public function CheckUname($username,$email) { 
     if(!empty($username)&&($email)) { 
      $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"; 
      } 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"; 
       }else{ 
        // I want to call the NewAdmin function here 
       } 
      } 
     } 
    } 

    public function NewAdmin($username,$email,$password) { 
     if(!empty($username)&&!empty($email)&&!empty($password)) { 
      $reg = $this->db->prepare("INSERT INTO admins (user_name, email_address, password_hash) VALUES ('?', '?', '?')"); 
      $reg->bindParam(1,$username); 
      $reg->bindParam(2,$email); 
      $reg->bindParam(2,$password); 
      $reg->execute(); 
     } 
    } 
} 

Im Grunde habe ich versucht, zu überprüfen, ob der Benutzername bereits vorhanden ist oder nicht, dann ich auch überprüft, ob die E-Mail vorhanden ist, und wenn nicht ich will so die NewAdmin Funktion aufzurufen Der Admin kann in db eingefügt werden. Das Problem ist, ich weiß nicht, wie man das innerhalb der CheckUname Funktion tut. Irgendwelche Hilfe bitte?

Auch ich habe eine andere Frage, weshalb die Fehler, die erzeugt werden sollten, wenn der Benutzer einen Benutzernamen oder eine E-Mail, die bereits in der Datenbank existiert, nicht angezeigt wird! Allerdings habe ich eine Variable für diesen Satz:

if($chk1->rowCount() == 1) { 
    $notice['username_exists'] = "Try different username"; 
} 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"; 
    } else { 
     // I want to call the NewAdmin function here 
    } 
} 

Ich habe auch den Fehler in der Seite wie folgt festgelegt:

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>"; 
} 

Aber keine Fehler auf der Seite angezeigt, während Sie einen Benutzernamen oder eine E-Mail einreichen, dass existiert in der db!

+1

'$ this-> NewAdmin ($ username, $ email, $ password) Ersetzen Sie die Parameter durch die tatsächlichen Variablen. – Andrew

+0

Ist '$ notice' eine lokale Variable in der Funktion? –

+0

Sie müssen '$ password' an' CheckUname' übergeben, wenn Sie es aufrufen, wenn Sie 'NewAdmin' innerhalb' CheckUname' aufrufen wollen –

Antwort

3

Verwenden Sie $this->NewAdmin($username,$email,$password) innerhalb der CheckUname() Funktion von Register Klasse. Sie können dieselbe Klassenfunktion in einer anderen Klasse aufrufen, indem Sie $this verwenden. $this repräsentiert das aktuelle Klassenobjekt.

Verwandte Themen