2017-01-29 8 views
-1

私はajaxを使用してphp OOPメソッドを使用してログインと登録のサンプル関数を作成しています。ログインボタンをクリックすると自動的に登録機能が起動され、登録ボタンをクリックするとログイン機能が起動します。私は問題が私がオブジェクトを作成し、クラスの下の両方の関数を呼び出すときであることを知っている。私は一度に一つの関数しか呼び出せないということを知りたい。ここでは、コードです:一度に1つの関数だけを呼び出すPHP

アヤックス

function login() { 

    jQuery('#loginform').on('submit', (function(e) { 
     e.preventDefault(); 
     jQuery.ajax({ 
      url: 'scripts/controller.php/login', 
      type: 'POST', 
      data: new FormData(this), 
      processData: false, 
      contentType: false, 
      cache: false, 
      beforeSend: function() { 
       jQuery('#btn-login').html('<i class="fa fa-spinner fa-spin fa-fw"></i>'); 
      }, 
      success: function(data) { 
       if(data == 'Logged in') { 
        jQuery('.result').show(); 
        jQuery('.result').html(data); 
        jQuery('#btn-login').html('Login'); 
       } 
       else { 
        jQuery('.result').html(data); 
        jQuery('.result').show(); 
        jQuery('#btn-login').html('Login'); 
       } 
      } 
     }); 
    })); 

} 

function register() { 

    jQuery('#signupform').on('submit', (function(e) { 
     e.preventDefault(); 
     jQuery.ajax({ 
      url: 'scripts/controller.php/register', 
      type: 'POST', 
      data: new FormData(this), 
      processData: false, 
      contentType: false, 
      cache: false, 
      beforeSend: function() { 
       jQuery('#btn-signup').html('<i class="fa fa-spinner fa-spin fa-fw"></i>'); 
      }, 
      success: function(data) { 
       if(data === 'An email has been sent. Please verify your account with in 3 days.') { 
        jQuery('.result').show(); 
        jQuery('.result').fadeOut(5000); 
        jQuery('.result').html(data); 
        jQuery('#btn-signup').html('Sign Up'); 
        jQuery('.result').html(data); 
        jQuery('#signupform')[0].reset(); 
       } 
       else { 
        jQuery('.result').show(); 
        jQuery('.result').html(data); 
        jQuery('#btn-signup').html('Sign Up'); 
       } 
      } 
     }); 
    })); 

} 

PHPコードファイルをロードします

<?php 

    require('model.php'); 

    class curd { 

     /************************************************/ 
       /*** LOGIN **/  
     /************************************************/ 

     public function login() { 

      $restricted = array('--', '#', "'--", '/*', '*/', '/**/', '/*', '1/0', '*/ 1', "'", ';', '1=1','true','false', 'BEGIN', '+', '||', '|', "' or 1=1/*", "') or '1'='1--", "') or ('1'='1--", '*', 'drop'); 

      $userEmail = strip_tags(stripcslashes(htmlspecialchars($_POST['email']))); 
      $password = strip_tags(stripcslashes(htmlspecialchars($_POST['password']))); 

      if(in_array($userEmail, $restricted) or in_array($password, $restricted)) { 
       echo 'Avoid SQL injection attacks.'; 
      } 
      else if(!filter_var($userEmail, FILTER_VALIDATE_EMAIL)) { 
       echo 'Invalid email address.'; 
      } 
      else if(strlen(trim($userEmail)) < 5) { 
       echo 'Minimum characters in email are 5.'; 
      } 
      else if(strlen(trim($password)) < 5) { 
       echo 'Minimum characters in password are 5.'; 
      } 
      else { 
       $model = new curd_model(); 
       echo $model -> login($userEmail, md5(sha1($password))); 
      } 

     } 

     /************************************************/ 
       /*** REGISTER **/  
     /************************************************/ 

     public function register() { 

      $restricted = array('--', '#', "'--", '/*', '*/', '/**/', '/*', '1/0', '*/ 1', "'", ';', '1=1','true','false', 'BEGIN', '+', '||', '|', "' or 1=1/*", "') or '1'='1--", "') or ('1'='1--", '*', 'drop'); 

      $username = strip_tags(stripcslashes(htmlspecialchars($_POST['username']))); 
      $userEmail = strip_tags(stripcslashes(htmlspecialchars($_POST['email']))); 
      $password = strip_tags(stripcslashes(htmlspecialchars($_POST['password']))); 
      $question = strip_tags(stripcslashes(htmlspecialchars($_POST['question']))); 
      $answer = strip_tags(stripcslashes(htmlspecialchars($_POST['answer']))); 

      if(in_array($userEmail, $restricted) or in_array($password, $restricted) or in_array($userEmail, $restricted) or in_array($question, $restricted) or in_array($answer, $restricted)) { 
       echo 'Avoid SQL injection attacks.'; 
      } 
      else if(!filter_var($userEmail, FILTER_VALIDATE_EMAIL)) { 
       echo 'Invalid email address.'; 
      } 
      else if(strlen(trim($userEmail)) < 5) { 
       echo 'Minimum characters in email are 5.'; 
      } 
      else if(strlen(trim($password)) < 5) { 
       echo 'Minimum characters in password are 5.'; 
      } 
      else { 
       $model = new curd_model(); 
       echo $model -> register($username, $userEmail, md5(sha1($password)), $question, $answer); 
      } 

     } 
    } 

    $object = new curd(); 
    $object -> login(); 
    $object -> register(); 

?> 
+0

なぜPHPコードはログインメソッドと登録メソッドの両方を呼び出しますか?あなたは、おそらくそれぞれのアクションのための個別のコントローラを持つべきです。そして準備された/パラメータ化されたクエリでPDOまたはMysqliを使用して、すべてのストリップ/タグなどを削除してください。そして、PHPパスワードlibを使用してください.MD5はひどい恐ろしい方法です。 – JimL

+0

応答のためにありがとう私は1つのコントローラファイルでのみ作業したいです。 codeigniterのように、私は常にコントローラーのための1つのファイルだけを作ります。そしてバージョンiに関してはmysqliを使用しています。 –

+0

異なるルート(URL)の正しいアクションにリクエストをルーティングするには、少なくともロジックが必要です。 – JimL

答えて

0

いつでも次の行を実行します:

$object = new curd(); 
    $object -> login(); 
    $object -> register(); 

したがって、両方ともfログインとレジスタ関数が実行されます。 2つのオプションがあります。

  1. これらの機能を2つの異なるファイルに分割します。

  2. あなたのAjaxに、実行する関数をこのファイルに伝えるパラメータを追加します。

    あなたが(例えば:/ユーザー/ログイン - >コントローラユーザ - >メソッドログイン)ルーティングメカニズムを持っているかもしれませんMVCで

場合、あなたは、あなたが単に同じように、クエリ文字列を使用することができません。 /scripts/controller.php?do=loginとあなたのPHPファイル内の条件を持っている:

$object = new curd(); 

$do = $_GET['do']; 
    if($do == 'login'){ 
     $object -> login(); 
    } else { 
     $object -> register(); 
    } 

とあなたのAJAXで、リクエストURLを更新:

jQuery.ajax({ 
      url: 'scripts/controller.php?do=register', 

(ログイン要求のためにも... =ログインしていますか?)

+0

ありがとう男私はこれを試していないが、これが完全に問題を解決することを願って –

+0

私はそれを更新しない –

関連する問題