1

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

  1. 当数据错误时,我会将用户重定向到 default.html,因为如果我不这样做,它将保留在 default2.php 中,而 default2.php 对用户来说没有什么重要的东西可以看到。我不知道这是否是最好的方法。
  2. 当输入的数据错误时,我希望在 default.html 中向用户发送回显消息。但我不知道如何从 default2.php 触发它。

我该如何解决这两个问题?谢谢...


默认.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>

默认2.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");
    }

  }
?>
4

3 回答 3

2

只需添加一些参数

header("Location: default.html?test=failed");

并且在 html 中,当变量 test 设置为失败时,使用 Javascript 来显示一些有意义的东西。您可以在此处找到如何使用 javascript 获取 url 参数值的教程。

希望有帮助。

除此之外,您可以在不离开页面并突出显示验证错误的情况下PHP在您的default.html甚至请求中进行验证。AJAX

于 2012-05-16T19:54:47.597 回答
1

如果您将 default.html 设置为 PHP 文件,则可以通过 URL 传递一个变量,这将允许您检查该变量是否已被传递$_GET[],并向用户显示一条消息。

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

default.php?error=1

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

if (isset($_GET['error'])) {
echo "Show user a message here";
}
于 2012-05-16T19:55:52.170 回答
1

就个人而言,我不喜欢使用查询字符串向用户公开诸如“错误”“无效”之类的状态。在这种情况下,我会将这两个文件合并到一个 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 文件的末尾。

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

于 2012-05-16T20:21:48.817 回答