2012-03-26 8 views
-1

私はstudentIDが入力されたフォームを持っています。入力したstudentIDがデータベースにあるIDを確認したいのですが、次のページにフォームを投稿しています。 AJAX呼び出しを行う - そして、あなたが入力が本当に 乾杯PHP停止フォームから転載

+3

あなたはSQLインジェクションに**広く開かれています**あなたがまだいなければあなたはハッキングされます**。この問題を完全に回避するには、PDOで準備されたクエリを実行する方法を学びます。 – Brad

+0

mysql_num_rowsについて聞いたことがありますか?クエリを使用して結果が返され、それに応じて動作するかどうかを確認し、0の場合はエラーを表示し、そうでない場合はユーザーに処理を続行させることができます。 http://php.net/manual/en/function.mysql-num-rows.php – davidjwest

答えて

3

を保持するために、セッションを行うことができますが、これは何をしたいのですか?

<form id = "form" action = "./?page=markandfeedback" method = "post"> 

    <br> 
    Mark for: 
<INPUT id="stud" onkeypress="return isNumberKey(event)" type="text" name="stud" value="Enter Student Number"> 
<input type="submit" value = 'Continue'> 
<? 

$studID = $_POST['stud']; 
$module2 = $_SESSION['module']; 
$ex = $_POST['exer']; 
$studerr = array(); 

$sql = 'SELECT * FROM `student`, `modules` WHERE `studentID` = '.$studID.' AND `moduleCode` = '.$_SESSION['module']; 
$result = mysql_query ($sql); 
// echo $_SESSION['module']; 

if ($result == NULL) { // nothing found 
echo "the student id you entered is not in the database"; 
} 
else { 


$_SESSION['student'] = $studID; 

Header("Location: http://www.whereever.com/"); // send the browser where you want 
exit(); 
} 
?> 

EDIT: 私は他の回答に行きました。私はあなたがmysqlの注入を正しくチェックすると仮定します。私はAJAXをすべて動作させて実装することをお勧めします。私の解決策の背後にあるアイデアは、問題を可能な限り簡単に解決することでした。あなたはそれから派手な何かをしたい場合は、可能性:

  • は、idが
  • を提示するためにあなたのJavascriptを教えて見つからなかったことを、PHPを経由して、全体のフォームを生成し、入力フィールドにユーザーに伝えますいくつかの方法で情報
  • AJAXを使用してください。誰もがAJAXでフォームを愛しています。
  • ユーザーが有効なIDを入力したと想定することもできます。あなたはidが実際に有効であるかどうかを確認します。そうでない場合は、フォームにユーザを戻し、PHPにエラーメッセージを出力するように指示します(おそらくgetを介して)。この可能性は通常ではありません。私には利点があるかどうかはわかりません。

ユーザーからのデータを必要としない場合は、mysql_num_rowsヒントも便利です。私はあなたがSELECT *のためにデータで何かしたいと思った。

0

を開始する場所を次の2つの異なる方法

  1. AJAXでこれを行うことができます知ってはいけない

    をstudentIDページにエラーが表示されない場合あなたのサーバーに接続し、そのIDが存在する場合はエラーを表示します。それ以外の場合は次のページに進みます。

  2. PHP - フォームに隠れた入力を置き、フォームのアクションを同じページにして、入力フィールドの$ _POST ['field_name'];

そして、あなたは別のページへのアクションを作成し、変数をバック返すか、エラーメッセージ

1

ユーザ名のチェックを行うコントローラを個別に作成します。

ajaxを使用して、ユーザーの入力が有効かどうかを確認します。

ですから、このようなものがあります:

<input id="stud" onchange="checkStudentId(this)" /> 

<script> 
function checkStudentId(inputElement) { 
var id = inputElement.value(); 

    $.ajax({ 
    url: "test.html", 
    context: {id:id} 
    }).done(function() { 
    // Check the return result 
    }); 
} 
</script> 

ここでは、あなたが実際に学生の把握するために、いくつかの方法でサーバーに接続する必要がありjqueryのAJAX http://api.jquery.com/jQuery.ajax/

+0

Ajaxを使用している質問執筆者をひいきにするつもりはないが、現在のレベルを少し上回る可能性があります。 – davidjwest

+0

素敵なUX拡張ですが、実際に検証の問題を解決していません。私が私の答えで指摘したように - これが失敗するいくつかの方法があります。 – gregmac

+0

すべてを解決しようとしていません。作者は私が本当に複雑なものにしたくないように、プログラミング上はとても緑色に見えます。 XSSやSQLInjectionを理解するように彼に尋ねるのは、おそらく彼がやろうとしていることです。表現のように、たわごとがファンに当たるまで、あなたは彼に話そうとしていることを理解していませんが、そうすると、彼は学び、忘れることはありません。 – Churk

1

への参照です存在する。この状況で通常行うことは、サーバーにフォームを送信し、サーバー側で検証を実行することです。生徒がいる場合は、「次の」ページに戻ります。生徒が存在しない場合は、同じフォームをエラーメッセージと共にもう一度返す(またはロケーションヘッダーを使用してリダイレクトする)。


もう一つの一般的な方法は、(私は他の多くの人が推薦されて参照する)非同期にチェックするためにAJAX要求を使用することです。 学生IDの入力を完了し、リアルタイムで効果的にエラーメッセージを表示しているので、実際に検証を行っている場合にのみ、この方法をお勧めします。このように、AJAXは素早いユーザーのフィードバックを提供するのに便利ですが、実際の解決策はありません。これにかかわらず、フォームがとにかく提出されたとき、または最低でもフォームが無効なIDで送信されたときにどうなるかを検討し、処理する必要があることに注意してください。

    このチェックをバイパスすることができます
  • 人々
  • は、別のユーザーがチェックが行われた時間との間に学生IDを削除した可能性があり(クライアント側からのすべての要求が敵対的とみなされ、あなたが暗黙的に何を信頼することはできません)効果的にあなたが仕事の量を倍にしているので、フォームは、
  • が誤って合格または否定応答意味をなさないをonSubmit AJAXを行う

を認識しないように、検証を引き起こし、あなたのコード内の誤りがある可能性が提出されましたサーバーを2つのハンドルにする別々のリクエストを連続して送信します。それは単に問題に対する誤った答えです。


この実装の最大の問題は、すべてが混じっているので、すぐに非常に毛深くて難しくなることです。

ここでは、テンプレート言語(PHPコードとHTMLマークアップの混在)のようにPHPを使用してヒントを開始し、ビュー(HTML)とPHPコードを切り離したフレームワークMVC patternという人口を使用しているので、このコードはコントローラと呼ばれます。サーバーの応答方法を制御するためです)。これは、プロフェッショナルな開発者がどのように働くかです。 Kohana、CakePHP、およびZendはすべて、かなり一般的なMVCフレームワークの例です。これらはすべて専門的に使用されています。

0

これを試してみてください:

<? 
     if(isset($_POST['stud'])){ 
      $studID = $_POST['stud']; 
      $module2 = $_SESSION['module']; 
      $ex = $_POST['exer']; 
      $studerr = array(); 
    $host="hostname";//your db host 
    $user="user";//your db user 
    $pass="pass";//your db pass 
    $conn=mysql_connect($host,$user,$pass); 

      $sql = 'SELECT * FROM `student`, `modules` WHERE `studentID` = '.$studID.' AND `moduleCode` = '.$_SESSION['module']; 
      $result = mysql_query ($sql,$conn); 

     if(mysql_num_rows($result)>0){//the id was found in the DB, do whatever here... 

     echo $_SESSION['module']; 

     $_SESSION['student'] = $studID; 

    Header("Location: http://www.whereever.com/");//redirect to wherever 
     $error=false; 
     } 

     else{//id was not found 
$error=true;} 



     }//end of isset 
     ?> 



     <? if($error===true){?> <div> The id was not found.... </div> <?}?> 
     <form id = "form" action = "<? echo $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; ?>" method = "post"> 

       <br> 
       Mark for: 
     <INPUT id="stud" onkeypress="return isNumberKey(event)" type="text" name="stud" value="Enter Student Number"> 
     <input type="submit" value = 'Continue'> 

それでは、これがすることです:ユーザーヒットはDBに、conectsを提出し、チェックするとIDが存在する場合...それがないならば、それはwherever.comにリダイレクト(コメントを参照)、エラーがなければmessegeが表示されます。 db変数の値を自分自身($host, $user, $pass)に変更してください。

関連する問題