0

PHP で非常に基本的なコメント システムを作成しようとしています。問題は、フォームを送信すると、MySQL テーブルに新しい行が挿入されないことです。これは私のコードです(誰かが何が悪いのかチェックしてもらえますか?):

<?php
$act = $_POST['act'];
if($act == 1) {
    $m = $_POST['message'];
    $m = strip_tags($m);
    $message = mysql_real_escape_string($m);
    $name = "Anonymous"; //Static username for demonstration purposes
    $date = "2012-7-28"; //Static date for demonstration purposes

    $con = mysql_connect("localhost","username","password");
    if (!$con){die('Could not connect: ' . mysql_error());}

    mysql_query("INSERT INTO comments (name, message, date) VALUES ('$name', '$message', '$date')");
    mysql_close($con);
}
?>

<form action="comments.php" method="post"> 
    <input type="text" name="message">
    <input type="hidden" name="act" value="1">
    <input type="submit" name="submit" value="Submit">
</form>
4

3 に答える 3

2

あなたの問題は、列名のエスケープ、つまり「エスケープしない」ことにあると思います。'date'がmySQLの関数名であることをご存知ですか?

すべてのテーブル名と列名をバッククォートに入れてみてください。

mysql_query("INSERT INTO `comments` (`name`, `message`, `date`) VALUES ('$name', '$message', '$date')");

また、参考までに、エラーメッセージを投稿しても、答えを探すのに支障はありません。それ以外は、あなたの質問に特に問題はありません。

編集:DUH!私は明らかな何かを逃しました。'mysql_select_db(' name_of_database');を実行してください。クエリの前。そうしないと、指定しているテーブルを探す場所がわかりません。

完全を期すために(Michael Besteckが指摘したように)、接続が確立された後でのみ「mysql_real_escape_string」を実行する必要があります。

つまり、「escape_string」は接続のエンコードに依存して、エスケープする必要のある文字とその方法を決定するためです。

于 2012-07-28T14:53:40.133 に答える
2

私のmysqlではエスケープ機能が実行されるため、最初にデータベース接続を確立する必要があります。

$con = mysql_connect("localhost","username","password");
$message = mysql_real_escape_string($m);
于 2012-07-28T15:08:39.233 に答える
0

このコードでスクリプトを実行し、mysql_error をポストします。

<?php
$act = $_POST['act'];
if($act == 1) {
$m = $_POST['message'];
$m = strip_tags($m);
$message = mysql_real_escape_string($m);
$name = "Anonymous"; //Static username for demonstration purposes
$date = "2012-7-28"; //Static date for demonstration purposes

$con = mysql_connect("localhost","username","password");
if (!$con){die('Could not connect: ' . mysql_error());}

mysql_query("INSERT INTO comments (name, message, date) VALUES ('$name', '$message', '$date')") or die(mysql_error());
mysql_close($con);
}
?>

<form action="comments.php" method="post"> 
<input type="text" name="message">
<input type="hidden" name="act" value="1">
<input type="submit" name="submit" value="Submit">
</form>

UODATE> 作業コードは次のとおりです。

<?php
$act = $_POST['act'];
if($act == 1) {
$m = $_POST['message'];
$m = strip_tags($m);
$message = mysql_real_escape_string($m);
$name = "Anonymous"; //Static username for demonstration purposes
$date = "2012-7-28"; //Static date for demonstration purposes

$con = mysql_connect("localhost","username","password");
mysql_select_db('databasename');
if (!$con){die('Could not connect: ' . mysql_error());}
mysql_query("INSERT INTO comments (name, message, date) VALUES ('$name', '$message', '$date')") or die(mysql_error());
 mysql_close($con);
}
?>

<form action="comments.php" method="post"> 
<input type="text" name="message">
<input type="hidden" name="act" value="1">
<input type="submit" name="submit" value="Submit">
</form>
于 2012-07-28T14:57:36.833 に答える