我需要能够存储在会话中提交的密码,因为目前使用 php_self 方法页面只是重新加载,就好像用户没有正确输入密码一样(这发生在 Firefox 中,它实际上在 Chrome/Safari 中没有会话的情况下工作正常),所以我相信需要一个会话才能在 FF 中工作, 但我对PHP很陌生,不确定我该怎么做,这是代码:
提前致谢
<?php
session_start();
$Password = 'hello';
if (isset($_POST['submit_pwd'])){
$pass = isset($_POST['passwd']) ? $_POST['passwd'] : '';
if ($pass != $Password) {
showForm("error", "WRONG PASSWORD");
exit();
}
} else {
showForm();
exit();
}
function showForm($Inputclass="mister", $Placeholder="PLEASE ENTER PASSWORD"){
?>
使用 HTML:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="pwd" id="pwd">
<input class="<?php echo $Inputclass; ?>" name="passwd" type="password" size="79" style="margin-left: -100px;" placeholder="<?php echo $Placeholder; ?>"/>
<br/>
<input class="text" name="submit_pwd" value="Login" type="image" src="loginkey.png" style="position: relative; left: 240px; top: -35px;">
</form>
如果你点击按钮,那么应该设置 $_POST['submit_pwd_x'] 和 $_POST['submit_pwd_y']
,而不是 $_POST['submit_pwd']
如果您按"输入",则不应设置 $_POST['submit_pwd']、$_POST['submit_pwd_x'] 或 $_POST['submit_pwd_y'] - 但有时取决于浏览器。
您也不能依赖它们,因此您的检查(isset($_POST['submit_pwd']))将不可靠
诀窍是在表单中添加一个隐藏字段,并以 $_POST 为单位检查该隐藏字段的 sbmission。
有关答案的更多详细信息(基于评论):
PHP是
if (isset($_POST['formsubmitted'])){
....
}
HTML 是
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="pwd" id="pwd">
<input class="<?php echo $Inputclass; ?>" name="passwd" type="password" size="79" style="margin-left: -100px;" placeholder="<?php echo $Placeholder; ?>"/>
<br/>
<input type="hidden" name="formsubmitted" value="1" />
<input class="text" name="submit_pwd" value="Login" type="image" src="loginkey.png" style="position: relative; left: 240px; top: -35px;">
</form>
编辑:
如果您不点击按钮(按回车键):
- IE 不会发送任何内容
- FF,Opera将发送submit_pwd_x=0和submit_pwd_y=0
- Chrome,Safari将发送submit_pwd_x = 0,submit_pwd_y= 0和submit_pwd
如果单击该按钮:
- IE 将发送 submit_pwd_x=X 和 submit_pwd_y=Y
- FF,Opera 将发送 submit_pwd_x=X 和 submit_pwd_y=Y
- Chrome,Safari将发送submit_pwd_x = X,submit_pwd_y = Y和submit_pwd