我正在使用.html和.php。在default.html中,用户必须输入一些信息,当单击该按钮时,html会对default2.php发布一个帖子。 在default2.php中,数据被检查,如果它正确,它会将用户重定向到另一个页面。我遇到的问题是输入的数据是错误的。 我在这里有两个问题:
我如何解决这两个问题? 感谢...
<!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> </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> </p>
</form>
<p> </p>
</body>
</html>
<?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");
}
}
?>
答案 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文件的末尾。
我只是不喜欢额外页面的想法而没有任何仅作为重定向器的内容。