我有一个包含基本信息的网络表单(Fname, Lname, Uname, Email, Phumber, Age, Facebook, Major, Education, Music, Fav, message
)
提交表单并将这些字段的数据插入MySQL数据库后,我希望能够重定向到不同的URL。
我尝试使用 PHP 的标头函数,但由于某种原因,它不会将我重定向到我指定的 URL。
<?php
ob_start();
require("config.php");
include 'config.php';
ini_set('display_errors', 0);
if($_GET['action'] == 'check')
{
if($_POST['Fname'] == '' || $_POST['Lname'] == '' || $_POST['Uname'] == '' || $_POST['Email'] == '' || $_POST['Phumber'] == '' || $_POST['Age'] == '' || $_POST['Facebook'] == '' || $_POST['Major'] == '' || $_POST['Education'] == '' || $_POST['Music'] == '' || $_POST['Fav'] == '' || $_POST['message'] == '')
{
exit;
}
else
{
if($_POST['Email'] !== $_POST['Email'])
{
exit;
}
else
{
$result = mysql_query("SELECT * FROM loginphp
WHERE Uname='{$_POST['Uname']}'") or die(mysql_error());
$row = mysql_fetch_array( $result );
if($row['Uname'] == '')
{
$_Fname = str_replace("<", "", $_POST['Fname']);
$_Lname = str_replace("<", "", $_POST['Lname']);
$_Uname = str_replace("<", "", $_POST['Uname']);
$_Email = str_replace("<", "", $_POST['Email']);
$_Phumber = str_replace("<", "", $_POST['Phumber']);
$_Age = str_replace("<", "", $_POST['Age']);
$_Facebook = str_replace("<", "", $_POST['Facebook']);
$_Major = str_replace("<", "", $_POST['Major']);
$_Education = str_replace("<", "", $_POST['Education']);
$_Music = str_replace("<", "", $_POST['Music']);
$_Fav = str_replace("<", "", $_POST['Fav']);
$_message = str_replace("<", "", $_POST['message']);
mysql_query("INSERT INTO loginphp
(Fname, Lname, Uname, Email, Phumber, Age, Facebook, Major, Education, Music, Fav, message) VALUES('$_Fname', '$_Lname', '$_Uname', '$_Email', '$_Phumber', '$_Age', '$_Facebook', '$_Major', '$_Education', '$_Music', '$_Fav', '$_message') ")
or die(mysql_error());
header("Location: main.php");
exit();
}
}
}
}
?>
警告:无法修改标头信息 - 标头已由寄存器中的 (输出从寄存器.php:1 开始.php在第 47 行发送
-------------- 答案
这个问题不想解决,所以我添加了带有html代码的打印,以便在插入数据后重定向页面来解决它
mysql_query("INSERT INTO loginphp
(Fname, Lname, Uname, Email, Phumber, Age, Facebook, Major, Education, Music, Fav, message) VALUES('$_Fname', '$_Lname', '$_Uname', '$_Email', '$_Phumber', '$_Age', '$_Facebook', '$_Major', '$_Education', '$_Music', '$_Fav', '$_message') ")
or die(mysql_error());
echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://www.http://stackoverflow.com/">';
exit();
感谢大家尽力帮助!
删除标头(如 echo
或 print
)之前的所有输出
并在标题后使用退出。
header("Location: main.php");
exit();
更新
如果打开输出缓冲,则可以在脚本中输出,但在缓冲区刷新之前,PHP 不必发送标头。在文件中使用 echo 、print() 或 printr() 检查某些内容。可能是这是问题所在,或者如果有文件,请检查空格数。
$form = "<br>";
//show the form
$form .="<center>";
$form .= '<form method .....';
............
并在?>
之前的最后一行写下这个
echo $form;
在更改标头之前,您必须删除所有echo
、print_r
和var_dump
函数。在您的情况下,如果您config.php
文件中没有类似echo
函数,您可以尝试以下功能:
//ini_set('display_errors', 1); commented in editing
ob_start();
//include the header
require("config.php");
if($_GET['action'] == 'check'){
//your code
}
//other codes (echo and print and vardump)
最好使用像 Twig 这样的模板引擎