$ _POST问题

时间:2009-06-29 15:19:12

标签: php

这不行。所有字段都是正确的,我有一个数据库连接。

解决问题

我使用此脚本将帖子插入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`)

8 个答案:

答案 0 :(得分:4)

听起来您的表单未设置为使用POST

<form action="post_msg.php" method="post">

答案 1 :(得分:1)

一些可能会有所帮助的评论:

  1. 请提供日志输出,错误消息
  2. 打印SQL并在服务器上手动运行,会发生什么错误?
  3. 使用字符串连接的SQL构造非常严重,可能存在安全隐患。
  4. 查看 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文件,猜猜是什么?有一个我关闭的表格:/抱歉打扰你们