PHP - 如果输入错误,请不要转到下一页

时间:2012-05-16 19:41:32

标签: php

我正在使用.html和.php。在default.html中,用户必须输入一些信息,当单击该按钮时,html会对default2.php发布一个帖子。 在default2.php中,数据被检查,如果它正确,它会将用户重定向到另一个页面。我遇到的问题是输入的数据是错误的。 我在这里有两个问题:

  1. 当数据错误时,我将用户重定向到default.html,因为如果我不这样做,它将保留在default2.php中,而default2.php对用户没有任何重要意义查看。我不知道这是否是最好的方法。
  2. 当输入的数据错误时,我想在default.html中向用户发送回显消息。但是我不知道如何从default2.php中触发这个。
  3. 我如何解决这两个问题? 感谢...


    default.html中:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type="text/javascript">
    
    </script>
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>PHP4</title>
    <style type="text/css">
    body {
        background-color: #CCC;
    }
    </style>
    </head>
    
    <body>
    
    
    <p>&nbsp;</p>
    
    <form id="form1" name="form1" method="post" action="default2.php">
      <p>
        <label for="textfield1">User Name</label>
        <input type="text" name="username" id="username" />
      </p>
      <p>
        <label for="textfield2">Password</label>
        <input type="password" name="password" id="password" />
      </p>
      <p>
        <input type="submit" name="button1" id="button1" value="Submit"  />
        <br />
        <br />
      <label id="label1">
      </label></p>
      <p>&nbsp;</p>  
    </form>
    <p>&nbsp;</p>
    
    
    </body>
    </html>
    

    default2.php:

    <?php
    require 'connection.php';
    
      if (isset($_POST['button1'])) {
    
        $username_v = $_POST['username'];
        $password_v = $_POST['password'];
    
        // Then you can prepare a statement and execute it.    
        $stmt = $dbh->prepare("CALL login(?, ?)");
        $stmt->bindParam(1, $username_v, PDO::PARAM_STR); 
        $stmt->bindParam(2, $password_v, PDO::PARAM_STR); 
    
        // call the stored procedure
        $stmt->execute();
    
        if ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) 
        {
              header("Location: main.php");
        }
        else
        {
            header("Location: default.html");
        }
    
      }
    ?>
    

3 个答案:

答案 0 :(得分:2)

只需在

中添加一些参数即可
header("Location: default.html?test=failed");

并且在html中使用Javascript在变量测试设置为失败时显示合理的内容。您可以使用javascript here找到如何获取url参数值的教程。

希望有所帮助。

除此之外,您可以在PHP甚至default.html请求中使用AJAX进行验证,而无需离开页面并突出显示验证错误。

答案 1 :(得分:1)

如果你使default.html成为一个PHP文件,你可以通过URL传递一个变量,然后这将允许你检查这个变量是否已经使用$_GET[]传递并向用户显示一条消息。

例如,如果您将用户转发到

  

如default.php?误差= 1

在默认页面上,您可以拥有一段代码,例如

if (isset($_GET['error'])) {
echo "Show user a message here";
}

答案 2 :(得分:1)

就个人而言,我不喜欢使用查询字符串向用户公开“error”“invalid”等状态。在这种情况下,我会将这两个文件合并到一个PHP文件中,PHP代码位于顶部,HTML代码位于底部。

PHP代码中的if语句为:

if ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) 
{
    header("Location: main.php");
    exit;
}
else
{
    $error = true;
}

然后在HTML中显示消息:

<?php

if( isset( $error ) && $error )
    echo 'You have entered the wrong data!';

?>

当然,在表单元素中,您必须删除action="default2.php"

如果您更喜欢分离逻辑和标记,可以将default.html更改为例如template.php并将其包含在控制器php文件的末尾。

我只是不喜欢额外页面的想法而没有任何仅作为重定向器的内容。