0

ブログのコメントを MySsl データベースの「comments」テーブルに挿入するスクリプトを生成しようとしています

<form action="insertcomment.php" method="post">
        <p class ="ctitle">Leave a Comment:</p>
        <p>
            <label for="name"><b>PostID:</b></label>
            <input type="text" id="postid" name="name" maxlength="4" /> <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="800"></textarea> <br/>

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

私のPHPスクリプトは次のとおりです。

<?php
include("dbconnect.php");
$con=new dbconnect();
$con->connect();
error_reporting(E_ALL);

if(isset($_POST['submit'])) {


    $sSql = "INSERT INTO comments
         ( post_id,name, email, website,content)
         VALUES ('$_POST[postid]','$_POST[name]', '$_POST[email]', '$_POST[website]',  '$_POST[content]')";

    mysql_query($sSql);

    echo '<h2> Your Comment is submitted</h2><br />';
}


?>

しかし、コメントをデータベースに挿入できませんでした。私の「コメント」テーブルには、comment_id、post_id、name、email、website、content、date_published フィールドがあります。comment_id は主キーです。オプション auto_increment があります。デフォルトでdate_publishedは現在のタイムスタンプを与えます。私は自分のエラーが何であるかを理解できませんでした。任意の考えをいただければ幸いです。

ありがとう!

4

1 に答える 1

1

mysqliまたはPDOを使用する必要がありますが、減価償却予定の mysql プラグインを使用する必要がある場合:

<?php
include("dbconnect.php");
$con=new dbconnect();
$con->connect();
error_reporting(E_ALL);

if(isset($_POST['submit'])) {

foreach ($_POST as $key => $value) {
    $$key = mysql_real_escape_string($value); // You should always sanitize user inputs.
}


    $sSql = "INSERT INTO comments
         ( post_id,name, email, website,content)
         VALUES ($postid,'$name', '$email', '$website',  '$content')"; // No quotes around $postid because I'm assuming post_id column is an int type.

    mysql_query($sSql);

    echo '<h2> Your Comment is submitted</h2><br />';
}


?>

$postid から一重引用符が削除されていることに注意してください。これは、テーブル post_id が int 型の場合、整数値を引用符で囲んではならないためです。

また、入力を消去するために mysql_real_escape_string() 関数を使用したことに注意してください。ユーザーが直接入力した変数を SQL にクォートしないでください。ユーザーが SQL インジェクション攻撃を使用して、テーブルをドロップしてはならない、またはドロップする可能性さえある DB にアクセスできるため、非常に危険です。

それでも、mysql プラグインは減価償却されようとしているため、可能であれば mysqli または PDO に変換することをお勧めします。

于 2012-07-08T22:15:04.517 に答える