2016-09-13 11 views
0

私はPHPオブジェクト指向を使って独自のカスタムCMSを作っています...サイトのメイン管理者が別の管理者を追加できるページを作っています。これを行うために、私はこのフォームを作った:PHPの別の関数の中で関数を呼び出す方法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> 

それから私はアクションファイルとしてこれを追加しました:あなたは、私がRegisterというクラスを呼んでいると、このクラスでは、私がコード化された見ることができるように

この:

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(); 
     } 
    } 
} 

は基本的に私は、そのユーザ名が既に電子メールが、私はそうNewAdmin関数を呼び出すにしたい存在でなければならば、私もチェックし存在するかどうかをチェックしてみましたadminをdbに挿入することができます。問題は、私がCheckUnameの機能の中でそれをする方法を知らないということです。助けてください?

また、ユーザーがデータベースに既に存在するユーザー名または電子メールを入力したときに生成されるエラーが表示されない理由がもう1つあります。しかし、私はこのために、変数を設定している:

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

私も、このようにページにエラーを設定している:ユーザ名または電子メールの送信中に

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

しかし、エラーなしがページに表示されますdbに存在する!

+1

'$ this-> NewAdmin($ username、$ email、$ password)'は実際の変数でパラメータを置き換えます。 – Andrew

+0

'$ notice'は関数のローカル変数ですか? –

+0

'CheckUname'の中で' NewAdmin'を呼び出すには、 'CheckUname'に' $ password'を渡す必要があります。 –

答えて

3

CheckUname()Registerクラスの中に$this->NewAdmin($username,$email,$password)を使用してください。 $thisを使って別のクラスの中で同じクラス関数を呼び出すことができます。 $thisは現在のクラスオブジェクトを表します。

関連する問題