1

PHP と jQuery Ajax を使用して、基本的なログ システムを構築します。

私がやりたいことは、ajax を介してフォームのセクションを送信し、配列を返すことです。これが正しいかどうかはよくわかりません。

ここにPHPがあります

if($access_function == 'access_login_1'){
    $email = $_POST['access_email'];
    $pwd = $_POST['access_pwd'];

    if(!$email || !$pwd){
        $error = 'Empty';
    }
    else {
        $user = get_user($email);
        if($user && $user['pwd'] == $pwd){
            if($user['status'] == 1){
                $action = 1;
            }
            else {
                $order = 'Unauthorised';
            }
        }
        else {
            $error = 'invalid';
        }
    }
    return array('action'=>$action,'error'=>$error,'order'=>$order);
}

get_user 関数は次のようになります::

function get_user($email){
    global $cnx;
    $q = $cnx->prepare("SELECT email FROM `users` WHERE email = :email");
    $q->execute(array(':email' => $email)); 
    return $q->fetch();
}

今、jQuery は本当の闘争です。私が望むのは、シリアル化された値をこの php に送信することです。スクリプトが 1 のアクションを返した場合、別のスクリプトを実行したいので、$error を error という div に入れ、$order という div に注文するようにします。

これはうまくいきませんでした:

function sendvars(container,linkrul,perform){
    var vars = 'access=1';
    $(container).find('input').each(function(){
        vars += '&' + $(this).attr('name') + '=' + $(this).val();
    });
    $.ajax({type:'POST',url:linkrul,data:vars,success:function(results){
        if(results == 1){  }
        else { $(container).find('.orders').html(results).slideDown(300); }
        }
    });
}

-- ハッシュ化は、すべてをテストしている間だけではありません。

4

3 に答える 3

0

PHP から AJAX コールバックに送信されるデータについて、より慎重に検討する必要があります。

  1. PHP スクリプトは何も「返す」ことができず、単純に「表示」することに注意してください。そのreturn array('action'=>$action,'error'=>$error,'order'=>$order);ため、XML や JSON ( を使用) などの何らかの方法でシリアル化 (文字列に変換して出力) しない限り、Javascript が読み取ることができる出力は生成されませんjson_encode()。ブラウザで直接見るか、Firebugなどのデバッグ ツールを使用して、スクリプトが有用なものを出力しているかどうかをテストできます。
  2. jQuery は、データを出力したエンコーディングを知る必要があります (パラメータに関するドキュメントを参照してdataTypeください)。XML の場合は、XML ドキュメント全体がコールバック関数に渡されるため、 や などの関数を使用して検査する必要があり.findます.each。おそらく最も簡単な方法は、PHP を使用してheader('Content-type: application/json');(JSON を使用していることを jQuery に伝えます)、 を使用してデータをエコーすることです。json_encodeこれにより、Javascript コールバックが動作する単純な Javascript オブジェクトを取得します。
  3. 現在の Javascript は、AJAX 呼び出しの結果が整数 ( result == 1) または HTML の blob であると想定しています.html(results)。より良いアプローチは、PHP コード (つまりecho json_encode(array('action'=>$action,'error'=>$error,'order'=>$order));) に表示される結果構造全体を返すことです。次に、構造の各部分 (例: response.action == 1.html(response.order)) を個別にチェックして処理することができ、コードはより読みやすくなり、将来の状況に備えてより柔軟になります。

最後に、jQuery にはいくつかの組み込み関数があり、ここでさらに多くの作業を行うことができ$.postます。 AJAX コールバックに送信できるフォーム。.serialize().serializeArray()

(ちなみに、あなたはこれを見つけたと思いますが、そうlinkrulすべきだと思いますlinkurl

于 2013-01-27T14:37:24.323 に答える
0

これも一つの選択肢です。

HTML

<input type='text' class='email' />
<input type='password' class='pass' />

PHP - checkLogin.php

<?php

$action = 0;
$order  = 0;
$error  = 0;

if(isset($_POST['email'], $_POST['pass'])) {
     if(!empty($_POST['email']) && !empty($_POST['pass'])) {
          $user = get_user($email);
          if($user && $user['pwd'] == $_POST['pass']){
               if($user['status'] == 1){
                    $action = 1;
               } else {
                    $order = 'Unauthorised';
               }
          } else {
            $error = 'invalid';
          }
     } else {
          $error = "Empty";
     }

     $array = array('action'=>$action,'error'=>$error,'order'=>$order);
     echo json_encode($array);
}

Javascript

function checkLogin(){
    var email = $('.email').val();
    var pass  = $('.pass').val();
    $.post('checkLogin.php', {email:email,pass:pass}, function(response) {
         var result = $.parseJSON(response);
         if(response['action'] == 1) {
              //authorized
         } else if(response['order'] == 'Unauthorised') {
              //unauthorized
         } else {
              //error
         }
    });
}
于 2013-01-27T14:49:50.993 に答える
0

私はjsonでエンコードされた配列を返します:

if($access_function == 'access_login_1'){
    $email = $_POST['access_email'];
    $pwd = $_POST['access_pwd'];

    if(!$email || !$pwd){
        $resp = array(
           'action' => $someValue,
           'order' => $someValue,
           'error' => 'No Email or password provided' 
         );
    }
    else {
        $user = get_user($email);
        if($user && $user['pwd'] == $pwd){
            if($user['status'] == 1){
                $resp = array(
                   'action' => 1,
                   'order' => $someValue,
                   'error' => 'No Error' 
                );
            }
            else{
                $resp = array(
                    'action' => $someValue,
                    'order' => 'Unauthorised',
                    'error' => 'Order Error'
                );
            }
        }
        else {
               $resp = array(
                    'action' => $someValue,
                    'order' => 'Unauthorised',
                    'error' => 'Invalid'
                );
        }
    }
    echo json_encode($resp);
}

そしてjsで:

function sendvars(container,linkrul,perform){
    var vars = 'access=1';
    $(container).find('input').each(function(){
        vars += '&' + $(this).attr('name') + '=' + $(this).val();
    });
    $.ajax({type:'POST',url:linkrul,data:vars,dataType:'JSON',success:function(results){
         if(results.action == 1){ 
            //do something 
         }else if(results.action == someOtherValue){
           $(container).find('.orders').html(results.order).slideDown(300);
         }else{
            alert(results.error); //Or put the error in some div
         }    
        //any other code or if/else statement
    });
}
于 2013-01-27T14:41:47.383 に答える