"Cannot modify header information - headers already sent by" error.How 在成功提交表单后重定向
"Cannot modify header information - headers already sent by" error.How to redirect upon successful submission of the form
我下面的代码使用 header 在成功提交表单后进行重定向,并检查是否所有错误变量都设置为 NULL 以重定向到另一个 php 页面。
请帮助我,因为我尝试了很多方法,但 none 似乎适用于条件重定向。
<?php
$proName=$proNameErr=$email=$emailErr=$catErr='';
if(isset($_POST["submit"]))
{
if (empty($_POST["proName"])) {
$proNameErr = "Product name is required";
}
else if(!preg_match('/^[a-z0-9 .&]+$/i',$_POST['proName'])){
$proNameErr = "Invalid product Name";
}
else{
$proName = test_input($_POST["proName"]);
}
if($_POST['cat']==0)
{
$catErr="please select an option";
}
else
{
$cat=$_POST['cat'];
}
if (empty($_POST["email"])) {
$email = "";
}
else{
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
if($proNameErr=='' && $emailErr=='' && $catErr=='')
{
header("Location: addMedia.php", true, 302);
die();
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<!DOCTYPE html>
<html>
<body>
<h1>ADD Product</h1>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post" autocomplete="on">
Product Name: <input type="text" name="proName" placeholder="Product Name" maxlength="35" size="40" required value="<?php echo $proName?>">*
<span class="error"><?php echo $proNameErr;?></span><br><br>
Category: <select name="cat" id="cat" size="1" required>
<option value=0>Select...</option>
<option value=1>John</option>
<option value=2>Paul</option>
<option value=3>Ringo</option>
<option value=4>George</option>
<option value=5>ram</option>
<option value=6>rahim</option>
</select>*<span class="error"><?php echo $catErr;?></span><br><br>
Email Address: <input type="email" name="email" value="<?php echo $email?>"> <span class="error"><?php echo $emailErr;?></span><br><br>
<input type="submit" value="submit" name="submit">
</form>
在这种情况下,输出缓冲是你的朋友。
在每个页面的顶部(或者至少,这里有问题的页面)添加
ob_start();
/* the rest of the code */
/*and at the end*/
ob_end_flush();
您必须在 header 调用之前向浏览器输出了一些内容。它不能是您向我们展示的代码的精确副本。检查:
php开始标签前有html吗
php开始标签前是否有空格
是另一个 php 脚本,包含在该脚本之前的 echo 中
编码是utf8带BOM吗?
这些是您出错的可能原因。
我下面的代码使用 header 在成功提交表单后进行重定向,并检查是否所有错误变量都设置为 NULL 以重定向到另一个 php 页面。 请帮助我,因为我尝试了很多方法,但 none 似乎适用于条件重定向。
<?php
$proName=$proNameErr=$email=$emailErr=$catErr='';
if(isset($_POST["submit"]))
{
if (empty($_POST["proName"])) {
$proNameErr = "Product name is required";
}
else if(!preg_match('/^[a-z0-9 .&]+$/i',$_POST['proName'])){
$proNameErr = "Invalid product Name";
}
else{
$proName = test_input($_POST["proName"]);
}
if($_POST['cat']==0)
{
$catErr="please select an option";
}
else
{
$cat=$_POST['cat'];
}
if (empty($_POST["email"])) {
$email = "";
}
else{
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
if($proNameErr=='' && $emailErr=='' && $catErr=='')
{
header("Location: addMedia.php", true, 302);
die();
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<!DOCTYPE html>
<html>
<body>
<h1>ADD Product</h1>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post" autocomplete="on">
Product Name: <input type="text" name="proName" placeholder="Product Name" maxlength="35" size="40" required value="<?php echo $proName?>">*
<span class="error"><?php echo $proNameErr;?></span><br><br>
Category: <select name="cat" id="cat" size="1" required>
<option value=0>Select...</option>
<option value=1>John</option>
<option value=2>Paul</option>
<option value=3>Ringo</option>
<option value=4>George</option>
<option value=5>ram</option>
<option value=6>rahim</option>
</select>*<span class="error"><?php echo $catErr;?></span><br><br>
Email Address: <input type="email" name="email" value="<?php echo $email?>"> <span class="error"><?php echo $emailErr;?></span><br><br>
<input type="submit" value="submit" name="submit">
</form>
在这种情况下,输出缓冲是你的朋友。 在每个页面的顶部(或者至少,这里有问题的页面)添加
ob_start();
/* the rest of the code */
/*and at the end*/
ob_end_flush();
您必须在 header 调用之前向浏览器输出了一些内容。它不能是您向我们展示的代码的精确副本。检查:
php开始标签前有html吗
php开始标签前是否有空格
是另一个 php 脚本,包含在该脚本之前的 echo 中
编码是utf8带BOM吗?
这些是您出错的可能原因。