0

以下のようなフォームがあり、ユーザーからの入力を取得したいと考えています。私の目標は、データベースに送信する前にデータを検証することです。私の質問は、これをどのように行うのですか?

<form action="../actions/insertcomment.php" method="post">
    <p class ="ctitle">Leave a Comment:</p>
    <p><label for="postid"><b>PostID:</b></label>
       <input type="text" id="postid" name="postid" maxlength="5" /> <br/>

        <label for="name"><b>Name:</b></label>
        <input type="text" id="name" name="name" maxlength="25" /> <br/>

        <label for="email"><b>Email:</b></label>
        <input type="text" id="email" name="email" maxlength="50" /> <br/>

        <label for="website"><b>Website:</b></label>
        <input type="text" id="website" name="website" maxlength="25" /> <br/>

        <label for="content"><b>Comment:</b></label>
        <textarea id="content" name="content" cols="10" rows="4" maxlength="100"></textarea> <br/>

        <input type="submit" value="Submit Comment" name="submit_comment" /> <br/>
    </p>
</form>

私のinsercomment.phpは次のとおりです。

<html>
<link rel = "stylesheet" type = "text/css"
          href = "../common/style.css" />
<?php
include("../common/dbconnect.php");
$con=new dbconnect();
$con->connect();
error_reporting(E_ALL);

 //$postid= $_GET['id'];

if($_POST) {

    $postid= $_POST['postid'];
    $users_name = $_POST['name'];
    $users_email = $_POST['email'];
    $users_website = $_POST['website'];
    $users_comment = $_POST['content'];

    $postid = htmlspecialchars($postid);
    $users_name = htmlspecialchars($users_name);
    $users_email = htmlspecialchars($users_email);
    $users_website = htmlspecialchars($users_website);
    $users_comment = htmlspecialchars($users_comment);



$sSql = "INSERT INTO comments
 ( post_id,name, email, website,content)
 VALUES ( $postid, '$users_name',
        '$users_email', '$users_website', '$users_comment' )";

    //echo $sSql;
    mysql_query($sSql);
    //$update=mysql_affected_rows();
    //echo "<h2>$update Record Inserted</h2><br />";
    echo '<h2> Your Comment is submitted</h2><br />';
}

?>

ここでは " method="post"> は使用していません。この種のコードや例は大歓迎です。

4

6 に答える 6

1

最善の方法は、SQLステートメントの前に、データが有効かどうかを確認することです。

Pseudocude:

$data1 = $_POST['xyz']; //text
$data2 = $_POST['abc']; //number
...

errors = array
if(data1 is not text) errors[] = data1 must be text
if(data2 is not number) errors[] = data2 must be number
...

if(count(errors) > 0) return errors
else

do the sql insert
return "thank you message"
于 2012-07-14T13:10:17.977 に答える
1

を使用して SQL インジェクションの文字列をサニタイズすることをお勧めしますmysql_real_escape_string()。if else ステートメントを使用して検証します。例

if ($_POST['name']...) 
{
    echo "fill in those fields!";
}
else
{
    do stuff...
}

ところで、PDO の準備済みステートメントを使用し、PHP で HTML をエコーし​​ないようにする必要があります。

于 2012-12-28T06:18:32.450 に答える
1

インジェクションを防ぐために、必ず入力をサニタイズする必要があります。

    $postid= mysql_real_escape_string($_POST['postid']);

これにより、すべての入力を安全にデータベースに挿入できます。

于 2012-07-14T13:11:11.123 に答える
1

filter_inputPHPでデータを検証するために使用できます。詳細については、こちらをご覧ください。

php の filter_input

これを使用して電子メールを検証する方法の例を次に示します。

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

はメソッドINPUT_POSTemailはフィールドの名前、 は($_POST['email'])検証FILTER_VALIDATE_EMAILオプションです。

アプリケーションをより安全にするために、 mysqliまたはpdoで準備済みステートメントを使用することを検討することをお勧めします。

変数に値があるかどうかを確認するには、関数emptyを使用できます。

if(!empty($_POST['email']){
  //do stuff
}

クライアント側の検証を追加することもできます。優れたライブラリはliveValidation です。名前が示すように、フォームが正常に送信されたかどうかに関係なく、ユーザーがフィードバックを得る前にページが更新されるのを待つ必要がないように、入力時にユーザー入力を検証します。

于 2012-07-14T13:17:02.820 に答える
1

私の経験では、DB への挿入を行う前に、if-else ステートメントで入力を確認する必要があります。最も重要なことは、準備済みステートメントを使用することです。そのような生の文字列を渡さないでください。フォームには常に準備済みステートメントを使用してください。

これを参照してください:SQLインジェクションを防ぐ最良の方法

于 2012-07-14T13:20:39.117 に答える
0

あなたはこのようにすることができます:-

if(isset($_POST))
{
     if($_POST['postid']!="" && $_POST['name']!="" &&.....)
     {
         //do your insertion here 
     }
     else
       echo "oops !! Something is missing";
}
于 2012-07-14T13:13:50.687 に答える