这不行。所有字段都是正确的,我有一个数据库连接。
解决问题
我使用此脚本将帖子插入db:
<?php
if (isset($_POST['msg'])) {
$title = mysql_real_escape_string($_POST['title']);
$msg = mysql_real_escape_string($_POST['msg']);
// kolla efter tomma fält
if (empty($title) || empty($msg)) {
$reg_error[] = 1;
}
if (!isset($reg_error)) {
mysql_query("INSERT INTO messages (title, message, date, user_id)
VALUES('$title', '$msg', '".time()."', '2')");
header('location: /');
exit;
}
}
?>
表格:
<form action="post_msg.php" method="post">
<b>Title:</b>
<input type="text" name="title" size="40" />
<b>Message:</b>
<textarea rows="15" cols="75" name="msg"></textarea>
<input type="submit" value="Post Message" />
</form>
前几天工作正常。今天不行。没有错误。 “帖子”显示在网址中。我认为只有在使用$ _GET时我才会这样做。
http://localhost/post_msg.php?title=fdsg&msg=sdfg
我没有得到任何错误页面只是重新加载
消息db
CREATE TABLE IF NOT EXISTS `messages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(140) COLLATE utf8_unicode_ci DEFAULT NULL,
`message` text COLLATE utf8_unicode_ci
`date` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `title` (`title`,`message`)
答案 0 :(得分:4)
听起来您的表单未设置为使用POST
<form action="post_msg.php" method="post">
答案 1 :(得分:1)
一些可能会有所帮助的评论:
查看 PDO 的文档。 PHP中的API虽然名称不一致但相当稳定。所以你最有可能做错了什么,在这种情况下应该发生错误。
答案 2 :(得分:1)
如果一切正常,你会得到一个结果。但是,如果任何事情“失败”,你什么也得不到,没有任何消息。它让你在黑暗中,无能为力。这很糟糕。
打开错误报告。不要只有if块,也可以添加else块。
<?php
error_reporting(E_ALL); ini_set('display_errors', true);
if (isset($_POST['msg'])) {
$title = mysql_real_escape_string($_POST['title'])
or die('escape_string title failed');
$msg = mysql_real_escape_string($_POST['msg'])
or die('escape_string msg failed');
// kolla efter tomma fält
if (empty($title) || empty($msg)) {
$reg_error[] = 1;
}
if (!isset($reg_error)) {
mysql_query("INSERT INTO messages (title, message, date, user_id)
VALUES('$title', '$msg', '".time()."', '2')")
or die(mysql_error());
header('location: /');
exit;
}
else {
print_r($reg_error);
}
}
else {
echo 'post parameter "msg" missing';
}
?>
答案 3 :(得分:0)
回显查询结果
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
脚本是否进入执行查询的行?
答案 4 :(得分:0)
我刚注意到一些奇怪的事情......
$ reg_error是你编写它的方式。
$reg_error[] = 1;
所以..给那个数组分配一个键,比如$ reg_error [0]或者其他..然后
if(count($reg_error) > 0) { /* your code */ }
..或者只是从$ reg_error中删除[]括号并保留if / else原样。
答案 5 :(得分:0)
删除重定向标头并在脚本末尾键入以进行调试:
的var_dump($ _ POST); echo mysql_error();
答案 6 :(得分:0)
使用提供的代码,reg_error仅用于确定是否执行SQL。而不是设置变量(因为它的唯一设置依赖于条件语句),为什么不只是改变你的代码:
<?php
if (isset($_POST['msg'])) {
$title = mysql_real_escape_string($_POST['title']);
$msg = mysql_real_escape_string($_POST['msg']);
// kolla efter tomma fält
if (!empty($title) && !empty($msg)) {
mysql_query("INSERT INTO messages (title, message, date, user_id)
VALUES('$title', '$msg', '".time()."', '2')");
header('location: /');
exit;
}
else {
echo "There was an error";
}
}
?>
这只是代码。 else语句显然最终会被修改,但是现在它会给你一种后退的方式来向你显示它是否尝试过SQL查询。如果不是,则条件失败,并且由于某种原因你没有从帖子中获取值。
您的网址更改的唯一方法是更改表单标记的方法。如果它设置为发布,则不应显示在URL中。
答案 7 :(得分:0)
我发现了问题!我检查了我的header.php文件,猜猜是什么?有一个我关闭的表格:/抱歉打扰你们