0

ハンドラーにフォームがあります。

<form action="../submitcomment.php" method="post">
                <input maxlength=100 size=60 type="text" name="IP" value="' . $ip . '" readonly="readonly" hidden="hidden">
                <input maxlength=100 size=60 type="text" name="BlogId" value="' . $blogId . '" readonly="readonly" hidden="hidden">
                <input maxlength=100 size=60 type="text" name="Date" value="' . $date . '" readonly="readonly" hidden="hidden">         
                <input maxlength=100 size=60 type="text" name="Name" placeholder="Enter Your Name">
                <input maxlength=100 size=60 type="text" name="Email" placeholder="Enter Your Email">
                <input maxlength=100 size=60 type="text" name="Comment" placeholder="Enter Your Comment">
                <br>
                <input type="submit" name="Submit" value="Submit Your Comment">
                </form>

アクションはsubmitcomment.php

$ip = $_POST['IP'];
$BlogId = $_POST['BlogId'];
$Date = $_POST['Date'];
$Name = $_POST['Name'];
$Email = $_POST['Email'];
$Comment = $_POST['Comment'];

$blog = new Blogs();

if (isset($_POST['Submit'])) 
{
    $addComment = $blog->insertComment($ip, $BlogId, $Date, $Name, $Email, $Comment);
    header('Location: http://www.ryan.archi.dev.netsite.co.uk/Blog?success=1');
}else{
    header('Location: http://www.ryan.archi.dev.netsite.co.uk/Blog?fail=1');
}

私のクラスの関数を参照するもの:

function insertComment($ip, $BlogId, $Date, $Name, $Email, $Comment)
    {
        $query = "INSERT INTO BlogComments (Name, Comment, IPAddress, Email, BlogId, Date) VALUES ('$Name', '$Comment', '$ip', '$Email', '$BlogId', '$Date')";
        $oDatabase = new database;
        $connection = $oDatabase->Connect();
        $result = mysql_query ($query, $connection);
        return $result;
    }

挿入しようとしても、エラーが返されたり発生したりすることはありません。これが機能しているはずだと私が知っている限り、私が間違っていることを見つけられますか?

4

2 に答える 2

3

問題は、Date-という名前の列にありますdate。これは予約語です(すべての既知のRDBMSを推測します)。

クエリでこの単語をエスケープする必要があります。

INSERT INTO BlogComments (Name, Comment, IPAddress, Email, BlogId, `Date`) VALUES ('$Name', '$Comment', '$ip', '$Email', '$BlogId', '$Date')

また、あなたのコードは誰にでもSQLインジェクション攻撃を行う機会を与えるので、少なくともユーザー入力をエスケープするか、MySQLiまたはPDOをより適切に使用する必要があります。

あなたはphp関数http://php.net/mysql_real_escape_stringによってエスケープを行うことができます:

$ip = mysql_real_escape_string($_POST['IP']);
$BlogId = mysql_real_escape_string($_POST['BlogId']);
$Date = mysql_real_escape_string($_POST['Date']);
$Name = mysql_real_escape_string($_POST['Name']);
$Email = mysql_real_escape_string($_POST['Email']);
$Comment = mysql_real_escape_string($_POST['Comment']);
于 2012-05-21T09:27:16.903 に答える
0

デバッグしましたか?データベースへの接続は正常に確立されていますか?mysqlをエスケープしなかったため、挿入クエリが失敗する可能性があります。

于 2012-05-21T09:25:50.060 に答える