我正在尝试创建一个登录和注销系统。一切工作正常,直到我试图发送隐藏值(在最后)注销。用户将"提交"隐藏值"注销",但似乎值没有发送。我已经尝试过不同的方法来解决这个问题,但要么我总是得到错误消息(但代码工作),要么我没有得到错误消息,但它不工作。
<section>
<h2>Zaloguj się do systemu</h2>
<?php
//$username;
//$password;
if(empty($_SESSION['userpass']) && empty($_POST['pass'])){
//create a log in form if no one is log in
echo "
<form method='post' action='./indexLogin.php'>
<table>
<tr>
<td>Urzytkownik:</td>
<td><input type='text' name='name'/></td>
</tr>
<tr>
<td>Hasło:</td>
<td><input type='password' name='pass'/></td>
</tr>
</table>
<input type='submit' value='Wyślij'>
</form>
"; //end of echo
}
else if(empty($_SESSION['userpass']) && !empty($_POST['pass'])){
//echo the user name and his password
$userName = $_POST['name'];
$password = $_POST['pass'];
echo "Nastąpiło poprawne zalogowanie do systemu";
//save user password to session
$_SESSION['username'] = $userName;
$_SESSION['userpass'] = $password;
}
//problem starts here
else{
if($_POST['logout'] == true){
session_destroy();
echo "Nastąpiło poprawne wylogowanie z systemu";
}
else{
echo "Jesteś zalogowany jako: ".$_SESSION['username'];
echo "
<form method='post' action='./indexLogin.php'>
Do you want to log out?<br/>
<input type='hidden' name='logout' value='true'>
<input type='submit' value='Wyloguj'>
</form>
";
}
}
?>
当我使用这段代码时,我没有得到错误消息,但它不起作用
//problem starts here
else{
if(!empty($_POST['pass'])){
//confirmation that log out was successful
//$_POST['logout'];
session_destroy();
echo "Nastąpiło poprawne wylogowanie z systemu";
}
else{
//form to log out
echo "Jesteś zalogowany jako: ".$_SESSION['username'];
echo "
<form method='post' action='./indexLogin.php'>
Czy chesz się wylogować?<br/>
<input type='hidden' name='logout' value='1'>
<input type='submit' value='Wyloguj'>
</form>
";
}
}
我所做的就是用get
代替post
方法。我发现的是,即使值是在url,它仍然没有工作!我似乎从来没有收到任何值,所以它使用最后一个else
。
首先要检查的是您实际上有PHP>= 4.1。在旧版本的PHP中,$_GET和$_POST是不存在的。
第二件要检查的事情实际上是$_REQUEST的print_r内容(它是$_GET、$_POST和$_COOKIE的组合),看看是否有一些数据实际上进入了你的脚本。
第三:我已经在我的主机上执行了你的脚本,并以"else if"分支结束。显然,您的脚本没有问题,但问题在于您的主机处理请求的方式。你是共享主机吗?一些共享主机有意关闭了超全局变量,这时你需要使用$GLOBALS["_POST"]而不是$_POST
当然还要使用session_start()
实际上你的代码似乎工作,但你应该启用你的会话与
session_start();
放在代码前面。然后我就可以提交登录凭据并注销了。
欢呼,