我正在尝试在我的网站上创建一个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');
?>
答案 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)
由于您使用的是网络制作工具,可能会发生此问题。
你试着跟随。
将文件名复制到某处。并备份你的文件。
删除现有文件
使用记事本或记事本++(只是文本编辑器)创建一个新的php文件。并将其重命名为以前的文件名。
使用文本编辑器将代码复制到文件中。准确地将<?php
复制到?>
,没有空格。
确保<?php
之前没有空格。