MySQL“INSERT”不起作用

时间:2012-01-03 03:32:55

标签: php mysql

我正在尝试在我的网站上创建一个PM系统,但发送不起作用......

这是我的代码:

<?php
$from = $_POST['from'];
$to = $_POST['to'];
$content = $_POST['content'];
$date = date("Y-n-j H:i:s");
$id = rand(0000,9999);

include('sql_connect.php');
mysql_query("INSERT INTO pm (`from`, `to`, `content`, `date`, `id`) VALUES ('".$from."', '".$to."', '".$content."', '".$date."', '".$id."')");
mysql_close($con);
header('Location: members.php?sent');
?>

有人可以告诉我它为什么不起作用吗?

编辑:我添加了backtits但结果如下:

NULL 
Warning: Cannot modify header information - headers already sent by (output started at /home/quebecen/public_html/new/do_pm.php:10) in /home/quebecen/public_html/new/do_pm.php on line 15

编辑2:我在que mysql_query()之前添加了$ result(我忘记了),现在我有了这段代码:

<?php
$from = $_POST['from'];
$to = $_POST['to'];
$content = $_POST['content'];
$date = date("Y-n-j H:i:s");
$id = rand(0000,9999);

include('sql_connect.php');
$result = mysql_query("INSERT INTO pm (`from`, `to`, `content`, `date`, `id`) VALUES ('".$from."', '".$to."', '".$content."', '".$date."', '".$id."')", $con);

var_dump($result);

if(!$result) {
    echo mysql_error();
}

mysql_close($con);
header('Location: members.php?sent');
?>

5 个答案:

答案 0 :(得分:0)

确保查询没有死亡。

$result = mysql_query("...");
var_dump($result); //If $result is false, then there was an error executing the query.

if(!$result) {
    echo mysql_error();
}

您可能也没有使用正确的连接。您可能需要将$con添加到mysql_query

mysql_query("...", $con);

答案 1 :(得分:0)

你得到的错误是因为你输出缓冲区&amp;然后尝试添加标题; (这可以是单个空格或回车符或其自身的错误消息,但在您的情况下是var_dump)。此外,你有sql注入漏洞,而不是逃避 post变量,我建议你忘记mysql_ *系列函数并转移到PDO预处理语句:

<?php
//Start a session to hold the status
session_start();
try {
    $dbh = new PDO("mysql:host=localhost;dbname=yourDB", 'dbUser', 'dbPass');

    /*** set the error reporting attribute ***/
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    /*** some variables ***/
    $from = $_POST['from'];
    $to = $_POST['to'];
    $content = $_POST['content'];
    $date = date("Y-n-j H:i:s");

    $id = rand(0000,9999); //? This is wrongly implemented if you want a uniqie id, you should be using the AUTO INCREMENT value

    /*** prepare the SQL statement ***/
    $stmt = $dbh->prepare("INSERT INTO pm (`from`, `to`, `content`, `date`, `id`)VALUES(:from, :to, :content, :date, :id)");

    /*** bind the paramaters ***/
    $stmt->bindParam(':id', $id, PDO::PARAM_INT);
    $stmt->bindParam(':from', $from, PDO::PARAM_STR, strlen($from));
    $stmt->bindParam(':to', $to, PDO::PARAM_STR, strlen($to));
    $stmt->bindParam(':content', $content, PDO::PARAM_STR, strlen($content));
    $stmt->bindParam(':date', $date, PDO::PARAM_STR, strlen($date));


    /*** execute the prepared statement ***/
    $stmt->execute();
    /*** close the database connection ***/
    $dbh = null;

    //Set as sent, redirect to members cleanly and then check session var is true
    $_SESSION['sent']=true;
    header('Location: ./members.php');
}
catch(PDOException $e)
{
    //Something went wrong
    $_SESSION['sent']=false;
    //You should log this error, and not output any internal errors to the user, just advise them something went wrong.
    error_log("FATAL MSG ERROR:".$e->getMessage(), 3, "/home/quebecen/logs/my-errors.log");

    header('Location: ./members.php');
}
?>

答案 2 :(得分:0)

1)标头已经发送错误非常明显,在使用header()之前不要回显任何内容,所以代码应该是:

if(!$result) {
    echo mysql_error();
    mysql_close($con);
} else {
    mysql_close($con);
    header('Location: members.php?sent');
}

2)尝试使用$date = date("Y-m-d H:i:s");

答案 3 :(得分:0)

警告:无法修改标题信息 - 已在第15行的/home/quebecen/public_html/new/do_pm.php中发送的标题(在/home/quebecen/public_html/new/do_pm.php:10中开始输出)< / p>

如果您要使用标题功能,请确保在该功能之前不会显示任何html内容。

最好你可以使用ob_start();重定向或页面第一行之前的功能。

希望有所帮助

答案 4 :(得分:0)

由于您使用的是网络制作工具,可能会发生此问题。

你试着跟随。

  1. 将文件名复制到某处。并备份你的文件。

  2. 删除现有文件

  3. 使用记事本或记事本++(只是文本编辑器)创建一个新的php文件。并将其重命名为以前的文件名。

  4. 使用文本编辑器将代码复制到文件中。准确地将<?php复制到?>,没有空格。

  5. 确保<?php之前没有空格。