PHP+MYSQL,我登陆之后,点击“注销”,为何会显示“非法访问”?

 <!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>欢迎来到XXX网</h1>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">           
    <span>邮箱:<input type="text" name="user_email"></span>
    <span>密码:<input type="text" name="user_pass"></span>
    <span>      <input type="submit" name ='submit' value="登陆"></span>
    <input type="button" onClick="location.href='register.php'" value="注册" />

</form>    

<?php
//开始登录
if(!isset($_POST['submit'])){exit('非法访问!');}
$user_email = htmlspecialchars($_POST['user_email']);
$user_pass = htmlspecialchars($_POST['user_pass']);
//包含数据库连接文件
include('conn.php');
//检测用户名及密码是否正确
$check_query = mysql_query("select user_id,user_nickname from users where user_email='$user_email' and user_pass='$user_pass' limit 1");
if($result = mysql_fetch_array($check_query))
{
    //登录成功
    @ session_start();
    $_SESSION['user_id'] = $result['user_id'];
    $_SESSION['user_email'] = $user_email;
    echo $result['user_nickname'].',欢迎你!---<a href="my.php">用户中心</a>   ';
    echo '<a href="index.php?action=logout">注销</a><br />';
    exit;
} 
    //登陆失败
else {exit('登录失败!点击此处 <a href="javascript:history.back(-1);">返回</a> 重试');}

    //注销登录
    if ( $_GET['action'] == "logout" && isset($_SESSION['user_id']) )
{
    echo '注销成功!点击此处 <a href="login.html">登录</a>';
    unset($_SESSION['user_id']);
    unset($_SESSION['user_email']);
    exit;
}
?>





</body>
</html>

if(!isset($_POST['submit'])){exit('非法访问!');}

你不是post访问这个页面并且没有传递sumit参数,上面的代码就是true当然会自行die代码

判断代码公用的时候注意要增加op参数什么的,判断是相关的操作在判断值是否存在什么的,而不是直接判断值,要不就出现你这种错误了

 if(isset($_POST['submit'])){
        //共用一个页面就是把代码放到这里了:
 }

谢谢各位朋友解答,问题解决了,根因在这里。

1、我是参考这位作者的代码 http://blog.csdn.net/sysprogram/article/details/21107041

因为原作者的代码中,登陆页面login.html与login.php是两个文件,所以作者使用这段代码

 if(!isset($_POST['submit'])){ exit('非法访问!');  

来判断用户是不是点击submit过来的?如果不是点击submit过来,而是直接输入网址过来的话,就会提示“非法访问”。

2、而我submit按钮、登陆、注销,都是在同一个php文件中,所以当点击“注销”时,肯定没有submit产生,所以会提示“非法访问。

3、解决方法是,修改这个判断规则就可以了。如下:


 <?php
//开始登录
//if(!isset($_POST['submit'])){exit('非法访问!');}
if(isset($_POST['submit']))
{
$user_email = htmlspecialchars($_POST['user_email']);
$user_pass = htmlspecialchars($_POST['user_pass']);
//包含数据库连接文件
include('conn.php');
//检测用户名及密码是否正确
$check_query = mysql_query("select user_id,user_nickname from users where user_email='$user_email' and user_pass='$user_pass' limit 1");
if($result = mysql_fetch_array($check_query))
{
    //登录成功
    @ session_start();
    $_SESSION['user_id'] = $result['user_id'];
    $_SESSION['user_email'] = $user_email;
    echo $result['user_nickname'].',欢迎你!---<a href="my.php">用户中心</a>   ';
    echo '<a href="index.php?action=logout">注销</a><br />';
    exit;
}    //登陆失败
else {exit('登录失败!点击此处 <a href="javascript:history.back(-1);">返回</a> 重试');}  
}

    //注销登录
    if ( $_GET['action'] == "logout" )
{
    echo '注销成功!点击此处 <a href="index.php">登录</a>';
    unset($_SESSION['user_id']);
    unset($_SESSION['user_email']);
    exit;
}
?>

你可以先将_SESSION['user_id']和_SESSION['user_email']传递的值打印出来,然后看看与数据库的是否一致,如果一直的话,你应该进行格式转换下,譬如剔除空字符等操作,在试试看。