重定向表单提交

时间:2013-12-31 05:22:13

标签: php forms

我是php的新手。我已经尝试了以下代码来点击登录按钮时重定向页面,但它没有发生。请帮我编辑代码。可能,header()函数中有一个错误。我是否正确使用了header()函数?

<body>
<?php
  $emailErr = $passwordErr = "";
  $email = $password = "";

  if ($_SERVER["REQUEST_METHOD"] == "POST") {
      if (empty($_POST["email"])) {
          $emailErr = "*Email is required";
      } else {
          $email = test_input($_POST["email"]);
          // check if e-mail address syntax is valid
           if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
               $emailErr = "Invalid email format"; 
           }
      }

      if (empty($_POST["password"])) {
          $passwordErr = "*Password is required";
      } else {
         $password = test_input($_POST["password"]);
      }
   }

function test_input($data)
{
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

include("signInform.php");
if($_POST["sign"])
{
  header('Location:signInform.php');
}
?>

<br/><br/><br/><br/><br/>

<h1>WELCOME</h1>
<h2>Please, Register Yourself!</h2>
<form  method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

<label>E-mail:</label><br />
<input type="text" name="email"/>
<span class="error"> <?php echo $emailErr;?></span>
<br />

<label>Password:</label><br />
<input type="password" name="password"/>
<span class="error"> <?php echo $passwordErr;?></span>
<br /><br />
<input type="submit" value="Register"/><br/>

<p>If already a user, Sign in! </p>
<input type="submit" value="Sign In" name="sign"/><br/>
</form>
</body>

4 个答案:

答案 0 :(得分:1)

在页面顶部添加@ob_start();

if (isset($_POST["sign"])) {
    header('Location:signInform.php');
}

答案 1 :(得分:1)

只需删除以下行。

include("signInform.php");

并将头函数放在下面。

header('location:signInform.php');

答案 2 :(得分:0)

您的问题是标题已发送。您可以使用ob_start()来避免此问题。请尝试这样:

<?php
ob_start();
$emailErr = $passwordErr = "";
$email = $password = "";

if ($_SERVER["REQUEST_METHOD"] == "POST")
{

if (empty($_POST["email"]))
{
$emailErr = "*Email is required";}
else
{
$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$emailErr = "Invalid email format"; 
}
}

if (empty($_POST["password"]))
{$passwordErr = "*Password is required";}
else
{$password = test_input($_POST["password"]);}
}

function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
include("signInform.php");
if($_POST["sign"])
{
header('Location:signInform.php');
exit();
    }
?>

<body>
<br/><br/><br/><br/><br/>

<h1>WELCOME</h1>
<h2>Please, Register Yourself!</h2>
<form  method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

<label>E-mail:</label><br />
<input type="text" name="email"/>
<span class="error"> <?php echo $emailErr;?></span>
<br />

<label>Password:</label><br />
<input type="password" name="password"/>
<span class="error"> <?php echo $passwordErr;?></span>
<br /><br />
<input type="submit" value="Register"/><br/>

<p>If already a user, Sign in! </p>
<input type="submit" value="Sign In" name="sign"/><br/>
</form>
</body>

答案 3 :(得分:0)

use--- echo '<script> location.href="signInform.php";</script>';
instead of  header('Location:signInform.php');

replace if($_POST["sign"])
{
  header('Location:signInform.php');
}
to
if($_POST["sign"])
{
echo '<script> location.href="signInform.php";</script>';
}

and why did you include include("signInform.php"); this line that's why showing error already sent.