2016-07-08 23 views
1

私は恒久的なアカウント番号(パン)をユーザーから受け取り、送信する前に、パン番号が既にdbに存在するかどうかチェックしています。それは働いていて、私はまた、パン番号がすでに登録されていると言っているエラーを受け取ります私はエラーを無視し、パン番号を変更せずに提出すると、データベースに入ります。データがdbに格納されるエラー

妥当性検査の確認後、入力した番号がそのまま残ります。私は、エラーが発生した後に入力ボックスを空にする方法を知りたいと思う。空のままであれば、送信ボタンは機能しません。では、エラーが表示されたら入力ボックスから入力した数値を削除するにはどうすればよいですか?入力ボックスにカーソルのフォーカスを移動させるにはどうすればよいですか?

おかげ

enter image description here

HTML

<input name="panno" type="text" id="panno" style="width:219px;" /> 
<span id="pan_status1"></span> 

FUNCTION

$("#panno").change(function() 
      { 
       $("#pan_status1").html('<img src="images/9.gif" align="absmiddle">&nbsp;Loading Please wait...'); 
       var id=$(this).val(); 
       var dataString = 'panno='+ id; 
       $.ajax 
       ({ 
        type: "POST", 
        url: "checkp.php", 
        data: dataString, 
        cache: false, 
        success: function(html) 
        { 
         $("#pan_status1").html(html); 

        } 
       }); 

      }); 

CHECKP.PHP

<?php 

require("connection/config.php"); 
    if(isset($_POST['panno'])) 
    { 
    $mpan = $_POST['panno']; 

    $sql_check = mysql_query("select * from register where pan_no='".$mpan."'") or die(mysql_error()); 

    if(mysql_num_rows($sql_check)) 
    { 
    echo '<font color="red"><STRONG>'.$madhar.'</STRONG> is already registered.</font>'; 


      $response = array(); 
      $response['successStatus'] = 'error'; 
      $response['responseMessage'] = $erroMessage; 
      header('Content-type: application/json'); 
      echo json_encode($response);  

    } 
    else 
    { 
      $response = array(); 
      $response['successStatus'] = 'success'; 
      $response['responseMessage'] = $erroMessage; 
      header('Content-type: application/json'); 
      echo json_encode($response); 
    } 
} 
?> 

EDIT

私は、PHPファイルの変更を行いました。今、私はパンの数を入力し、入力されたパンの数がデータベースに存在しない場合、私は次の入力ボタン

{"successStatus":"success","responseMessage":null} 

に次の出力を取得し、それが存在する場合、私は次のよう

123456789012 is already registered.{"successStatus":"error","responseMessage":null} 
を取得するときステータスが エラー

ある場合

は、今の状態がキャプチャされていることを、どのように私は、入力フィールドを空にすることができ、私はステータスが成功であり、唯一の表示したい場合は、HTML/JSON出力を表示したくありませんもしhtmlならばステータスはエラーです。

+0

サーバー側の* always *を検証する必要があります。 –

+0

[Little Bobby](http://bobby-tables.com/)は*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされていると言います。](http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-in-php)***。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

+0

*** [mysql_ *関数の使用をやめる](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)*** [これらの拡張機能](http://php.net/manual/en/migration70.removed-exts-sapis.php)がPHP 7で削除されました。[prepared](http://en.wikipedia.org/wiki/Prepared_statement)について学んでください。 )[PDO](http://php.net/manual/en/pdo.prepared-statements.php)と[MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared- statements.php)、PDOの使用を検討してください。[これは本当に簡単です](http://jayblanchard.net/demystifying_php_pdo.html)。 –

答えて

0

mysql(php extension)は廃止予定ですので、mysqliはSQLコードを実行する必要があります。次に、SQLインジェクションを介してハッキングされたくないため、受信したPOSTリクエストをエスケープします。

エラーがあるかどうかをクライアント側(jQuery)に通知するために、JSONを使用して応答できます。

さらに、PHPエラーをクライアントに送信しないでください。試してみる/キャッチするソリューションを使用できます。

+1

これは、OPが求めているものではありません –

+0

ああ、アロン、私はコブズがここでオンになっていると思います。 :-)「直接的、文字通り」の回答ではないかもしれませんが、確かに関連しています。 ###おそらくCobuzが示唆していることを明確にするために、「例外を投げる」は検証を行うのに非常に便利な方法です。サーバーのコードは、内部関数の呼び出しの周りに 'try {}'ブロックを設定できます。何か問題が生じた場合、そのコードが "例外をスロー"するように手配します。例外は簡単に捕捉され、エラーメッセージの作成に使用できます。 –

0

フィールドをクリアするのに十分ですが、特にタイポグラフィが遅い場合は、ユーザーがそうしたくない場合があります。 (彼らは自分自身に言うことができる、"おお、私は2つの数字を交換!"と実際のtpyoを修正し、ボタンをもう一度押してください。)

ここでは、を覚えていることを覚えておいてください。サーバは(POSTの結果で)番号が無効であることをサーバーに通知しました。 (あるいは、まだ特定の番号であることをまだ伝えていないことを覚えておくと良いでしょう)。ユーザーがボタンを押しても、情報メッセージを表示してサーバーに何も送信することはできません。

あなたはでもと入力する必要があります。 PAN番号を検証するためのAJAX呼び出しを提供しても、サーバーは最終的にデータベースが正しく更新されるようにする責任があります。 を再度確認して番号が有効であることを確認してから、データベースに送信してください。そして、あなたはその結果をJavaScriptで適切にテストする必要があります:ポストが成功したかどうか、そうでない場合はどうしたらいいのでしょうか。

あなたのJavaScriptは、意図的に欠落しているか無効なPAN番号をホストに送信するべきではありません。しかし、ホストは、クライアントが「正しいことをやっている」と想定してはいけません。データベースの内容に対する最終的な責任はホストにあります。

+0

私は送信する前にページ全体を検証しており、入力ボックスのどれかが空であれば先に進むことを許可していないという検証が既に終わっています。しかしこの場合、入力ボックスからの値はクリアされないので無効な入力も受け取ります。 'パン番号が既に登録されています 'というエラーを表示した後、入力ボックスをクリアするために必要な変更を教えてください。 – Sabha

+0

私の' checkp.php'ファイルにelse文が必要ですか?キャプチャして入力ボックスを空にすることはできますか? – Sabha

+0

私が心に留めていることは、このコードのビットで実行されるクエリを*繰り返す*ということです。*(もちろん、テストを 'function'から呼び出すこともできます2つの場所...)新しいPANをテーブルに挿入しようとしているコードは、まずPANをチェックする必要があります。 (実際には、それを徹底的に行う必要があります。*それがちょうど多くの数字などで構成されていることを確認してください。 –

関連する問題