2009-08-06 3 views
0

私は、ユーザーから2つの文字列値と2つの整数値を受け取り、それらをデータベースに格納するWebフォームを持っています。PHPとMySQLでユーザーのデータが有効であることを確認するにはどうすればよいですか?

intが実際にintとsanitzeの入力であることを確認して、Bobby Tablesが私に訪問しないようにするにはどうすればよいですか?ここで

は私のフォームコードです:データベースへの入力を消毒

if(isset($_POST['submit'])) 
{ 
    $formTitle = $_POST['title']; 
    $formAuthor = $_POST['author']; 
    $formPagecount = $_POST["pagecount"]; 
    $formCurrentpage = $_POST["currentpage"]; 
} 

<form method="post" action="index.php"> 
    Title: <input type="text" size="25" maxlength="250" name="title" /> 
    <br/> 
    Author: <input type="text" size="25" maxlength="250" name="author" /> 
    <br/> 
    Page Count: <input type="text" size="25" maxlength="25" name="pagecount" /> 
    <br/> 
    Current Page: <input type="text" size="25" maxlength="25" name="currentpage" /> 
    <br /> 
    <input type="submit" value="Add new book" name="submit" /> 
</form> 

答えて

3

prepared statements

で行うことができますあなたは、様々なtype checking functions

+0

は、私は以下のalbergeに同意しない...、ところで、htmlspecialchars

同じことを見てみましょう - プリペアドステートメントは、時に少し複雑に見えることができますあなたはまず彼らと一緒に仕事を始めますが、ついに彼らの抱きしめを受けると簡単です。あなたの周りの道を知ったら、多くの頭痛を救うことができます – Steven

0

ユーザー入力データが数字のみで構成されているかどうかを確認する唯一の安全な方法は、(1)正規表現を使用するか、(2)ctype-extension(推奨)を使用するかです。あなたがデータベースに整数値を挿入した場合

if (ctype_digit($_POST['pagecount'])) { 
    // ... 
} 

あなたはそれらをエスケープするが、彼らは本当に整数(それらをキャスト)されていることを確認する必要はありません。文字列の場合はmysql_real_escape_stringを使用する必要がありますが、準備された文を使用するのは間違ってはいません(通常はより良い)。道ことで

:それは(フォームはキー入力を経由して送信されていない場合)フォームを送信するためにクリックしたかどうIE < = 6でのみ、それを送信するため、提出ボタンをチェックするために安全ではありません。

0

PDOとその準備文は、最初はもっと複雑に見えても、頭痛を軽減します。整数の場合、intval($ input)を使うことができますが、PHPは無限の知恵で0以外の入力を0にします。

1

チェック/

  • フォームを確認しますが送信されました:isset$_POSTコンポーネント上にデータをChechking
  • を助けるされている「有効」:
    • は、ユーザーが各フィールドにデータを入力したのですか?
    • 必須フィールドにデータが含まれていますか?
      • ので、あなたのデータをChechkingそれにデータをフィールドとして
    • はカウントされません「」を含むフィールドは、実際にあなたが望む方法で、確認する前にtrimに忘れてはいけませんタイトルと著者に文字列が含まれていますか? X文字より長い?そのY文字を短くしますか?任意の "fordibben"文字または値ですか?
    • 他の2つのフィールドに数値データが含まれていますか?ポジティブ?数字だけ(3E5のようなものはありません)あなたがOKと考えるものよりも大きくない?

すべてのことであなたを助けることができるフレームワークがあります。例えば

(より多くのあなたが再利用既存の偉大なコードを、あなたのアプリケーションのためのより良い、私が言うと思います:少ないリスクをバグを紹介しますあなたの新しい、テストされていないコード;-))


それはデータベースに挿入することができます。
これは正しくエスケープする必要があることを意味します。
は、あなたが使用している関数/クラスによっては、文字列、整数(確かに、整数にそれらを強制的に)

  • 使用の場合のために
  • intvalため

    • mysqli_real_escape_stringを見てみましょうPDO:PDO::quote
    • またはあなたがあなたのためにエスケープ作業のほとんどを行いますプリペアドステートメントを使用することができるが、私はそれらと行くと思い
      • を;-)、私が思うに、ところで:
      • データが正常に検証されなかった場合は最後に、あなたはフィールドがすでに何を含んで、再エコーの形にしたいことがありmysqli_prepare
      • PDO::prepare


    を見ますユーザーが最初に入力したものです。

    XSSを避ける​​ために、データをHTML形式にエスケープする必要があります。あなたは、アプリケーション内のどこか別の画面上でそれらのデータを表示したい場合は

  • 関連する問題