如何在 PHP 中验证表单,然后重定向到外部页面

Posted

技术标签:

【中文标题】如何在 PHP 中验证表单,然后重定向到外部页面【英文标题】:How to validate a form in PHP, then redirect to an external page 【发布时间】:2016-05-01 13:20:18 【问题描述】:

我正在尝试使用 htmlphp 验证注册表单,并将数据插入 SQL 数据库。注册后,我希望将我的用户定向到他们的个人仪表板。除了表单提交时的重定向之外,我可以让一切正常工作。

这是页面开头的PHP:

<?php


// define variables and set to empty values
$emailErr = $passErr = $confirmErr = $email = $pass = $confirm = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") 
  if (empty($_POST["email"])) 
    $emailErr = "Email is required";
   else 
    $email = test_input($_POST["email"]);
  

  if (empty($_POST["pass"])) 
    $passErr = "You must have a password";
   else 
    $pass = test_input($_POST["pass"]);
  

  if (empty($_POST["confirm"])) 
    $confirmErr = "You must confirm your password";
   else 
    $confirm = test_input($_POST["confirm"]);
    

  if ($pass != $confirm) 
    $confirmErr = "Your passwords must match";
   



  if ($_SERVER["REQUEST_METHOD"] == "POST") 
  $email = test_input($_POST["email"]);
  $pass = test_input($_POST["pass"]);
    

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

?>

还有我的 HTML 表单:

<div class="container">

    <form class="form-signin" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
      <h2 class="form-signin-heading">Register below:</h2>   
      <span class="error"><?php echo $emailErr;?></span>  
      <input type='email' class="form-control" placeholder="enter email..." name='email'/>
      <span class="error"><?php echo $passErr;?></span>
      <input type='password' class="form-control" placeholder="enter password" name='pass'/><span class="error"><?php echo $confirmErr;?></span>
      <input type='password' class="form-control" placeholder="confirm password" name='confirm'/>

      <input type='submit' class="btn btn-success btn-block" name="submit" value="submit">
      <h5>Already have an account? <a href="login.html">Log in</a>.</h5>
    </form>

  </div>

注意使用

<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?> 

<form action=""> 

参数。使用此功能我无法获得重定向。

我在 HTML 之后包含了我的 SQL 条目,这些条目工作得很好,但是 header();标签似乎不起作用。见这里:

<?php

$email = $_POST['email'];
$pass = md5($_POST['pass']);

// Database connection
require 'database.php';
$sql = "SELECT email FROM users WHERE email = '".$email."'";

$result = $conn->query($sql);
$row_count = $result->num_rows;

if ($row_count == 1) 
    // user already exists
    header('Location: login.php');
 elseif ($row_count > 1) 
    // just to double check multiple entries aren't input into the DB
    echo 'There are too many records with that name!';
 else 
    // enter user into DB
    $sql = "INSERT INTO users (email, pass)
    VALUES ('".$email."', '".$pass."')";

    if ($conn->query($sql) === TRUE) 
        header('Location: dashboard.php');
        exit();
     else 
        echo "Error: " . $sql . "<br>" . $conn->error;
    

mysqli_close($conn);


?>

任何想法我做错了什么?

【问题讨论】:

请检查form提交后重定向的页面是否在同一文件夹中。 是的,t在同一个文件夹中 【参考方案1】:

您好,我在您的代码中看到您使用 login.php 从标头标签重定向的代码。 在 html 文件中,您使用 login.html 文件来检查帐户是否存在。 请检查您的登录文件的文件扩展名。 您可以使用以下链接获取标头功能详细信息: PHP header(Location: ...): Force URL change in address bar

【讨论】:

虽然你是对的,但这对我遇到的问题无关紧要。 login.html 和 login.php 文件都存在。在表单提交和验证后,我再次得到一个空白表单。用户的数据被输入到我的数据库中,但页面没有被重定向。 请尝试重定向@header("Location:dashboard.php") 请查看此链接以获取帮助***.com/questions/12525251/…【参考方案2】:

如果我理解正确,您可以通过链接重定向回您的页面:

<form name="form-lignin" method="post" action="this-php-page.php">

然后,您可以在同一页面上创建一个部分,该部分仅在表单已提交且表单将被隐藏时才会显示。该部分也可以为每个用户个性化。

您可以通过在表单中​​添加隐藏字段来做到这一点。

<input type='hidden' name='submission' value="something"/>

然后你可以添加这个 php :

            if ($_POST["submission"]=="something") 

        *Dashboard content?*    

               else 

        *The actual form...*
              

希望这有帮助:)

【讨论】:

这在提交有效表单时给了我一个空白页。仍然没有重定向。 我不明白,您是要重定向到另一个页面还是停留在该页面上并验证表单并提取数据? 如果可能的话,我还想在代码中保留 "" 部分。我见过的每个教程都表明这是使用表单验证时最安全的方法 我想重定向到另一个页面。但我需要确保数据正确。 所以只需在“
”中添加其他页面的链接即可获取值通过 POST。
【参考方案3】:

1.你需要确保代码已经运行

    if ($conn->query($sql) === TRUE) 
        echo 'is run!';exit;
        header('Location: dashboard.php');
        exit();
    
你可以使用 if ($conn->query($sql)) 代替 if ($conn->query($sql) === TRUE)

2.notice,如果“退出;”代码运行“mysqli_close($conn);”会没用的。

【讨论】:

尝试使用“var_dump($conn->query($sql));exit;”你得到了什么? 我会在哪里使用 var_dump? before ---- if ($conn->query($sql) === TRUE) 【参考方案4】:

你首先需要把你所有的 php 代码放在 html 上面,以便在执行验证脚本后 html 输出将被发送到浏览器。

然后

1 捕获表单值

2 验证表单值

3 如果一切正常。然后清理输入并将其插入数据库。

4如果插入成功,重定向到另一个页面,使用header('location:http://example.com');

就是这样

【讨论】:

您能否写出代码,以便我了解如何实现此更改?或者使用我的代码并告诉我我将使用的代码(以及在哪里)

以上是关于如何在 PHP 中验证表单,然后重定向到外部页面的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ASP.Net 发布然后重定向到外部 URL?

重定向到同一页面php后避免表单重新提交[重复]

验证注册表中的数据后,重定向到另一个页面以登录

表单提交后PHP重定向到另一个页面

提交表单后重定向到另一个页面?

联系表单提交后如何重定向到感谢页面 - Wordpress 高级主题联系我们 php 模板 [关闭]