2011-01-11 23 views
0

質問は、間違ったデータがmysqlテーブルに入力されないようにするにはどうすればいいですか?私にコードを教えてもらえますかロジックかどうかです。挿入クエリが実行される前に?PHPのフォーム検証

+0

'IF()' + 'some_specific_function()'すべてあなたを行うことができます必要。とにかく、質問はあまりにも曖昧です。あなたはまた、「どのようにプログラムするのですか?」と尋ねるでしょう。 – zerkms

+0

どのフィールドを検証する必要があるか(電子メール、名前、住所、電話など)、それぞれ別個のアルゴリズムが必要です。 –

答えて

1

私が使用したい方法は、ビューに戻って自分のURLに投稿するように設定されている(これはMVCアプリケーションのコンテキストである)

  1. フォームこれです。
  2. コントローラがPOST要求を受信すると、検証が実行されます。エラーが見つからない場合は、関連するアクションが実行され、HTTPリダイレクトがブラウザに送り返され、「成功」ページが正しく送信されます。
  3. 検証が失敗すると、元のフォームが表示され、各フィールドに入力されたデータが表示されます。無効なフィールドにはエラーメッセージが表示されます。
2

"submit"という名前の送信ボタンと "yourname"という名前の入力フィールドがあると仮定すると、このようなことができます。このコードはすべて同じファイルにあります。

<?php 
//Form submitted 
if(isset($_POST['submit'])) { 
    if(!isset($_POST['yourname'])) { 
    //Form field 'yourname' didn't have a value 
    $error['yourname'] = "<p>Please provide your name.</p>\n"; 
    } else { 
    //Field 'yourname' had a value, check other things 
    //Your other checks here (optional) 
    } 

    //No errors, process form 
    if(!is_array($error)) { 
    //Process your form 

    //Done processing 
    echo "<p>Information saved.</p>"; 
    exit; 
    } 
} 
?> 
<form method="post" action="<?=$_SERVER['PHP_SELF']?>"> 
    <?=$error['yourname']?> 
    <p><label for="yourname">Name:</label><input type="text" id="yourname" name="yourname" value="<?=htmlspecialchars($_POST['yourname'])?>" /></p> 
    <p><input type="submit" name="submit" value="Submit" /> 
</form> 
+0

あなたは** htmlspecialchars()で出力データをサニタイズする必要があります – zerkms

+0

@zerkmsもちろんですが、私が例として示したベアボーンのコードサンプルにどのように影響しますか?私がはっきりと省略したフォームを処理する(すなわち、情報をデータベースに挿入する)ときに、衛生措置が起こるはずです。 –

+0

'' - これは**正しい**コードです。 – zerkms

1

これは、検証がどの程度厳しいかによって異なります。

sintaxisはかなりストレートfordwardです:セキュリティのため

if(!$var){ 
    die("The input is not valid"); 
} 

:フィールドが必要な場合はあなたのような条件を使用することができますので、それは悪い入力の場合は通常の機能return falseを検証し

$var = function_that_cleans_any_input($_POST['input_name']); 

データベースに挿入する前にユーザーから来る文字列を常にscapeする必要があります。mysql_real_scape_stringを使用すると、非常に一般的で非常に危険なmysql injectionという攻撃を防ぐことができます。

検証するフィールドが特定の形式であることがわかっている場合は、それを検証することをお勧めします。たとえば、メールやURLの場合は、filterの機能があり、使いやすく、役立ちます。

入力がint型のケーキの場合、タイプキャスト$validated = (int)$input;を使用してください。それはそれを行いますが、日付であれば、あなたはネイティブのcheckdate関数をPHPから取得します。

あなたが見ることができるように、いつでも日を保存できる機能があります。何かを妥当性検査するのに問題がある場合は、徹底的に調査してください。ここで

役立つかもしれないリンクされます。http://hungred.com/useful-information/php-form-validation-snippets/