我正在尝试用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>
答案 0 :(得分: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'依赖于连接的编码来确定需要转义哪些字符以及如何转义。
答案 1 :(得分:2)
首先建立数据库连接是必要的,因为我的mysql执行了转义函数。
$con = mysql_connect("localhost","username","password");
$message = mysql_real_escape_string($m);
答案 2 :(得分: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&GT; 工作代码如下:
<?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>