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

问题描述

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']传递的值打印出来,然后看看与数据库的是否一致,如果一直的话,你应该进行格式转换下,譬如剔除空字符等操作,在试试看。

时间: 2025-01-21 12:53:03

mysql-PHP+MYSQL,我登陆之后,点击“注销”,为何会显示“非法访问”?的相关文章

mac-在Mac下安装了mysql,密码无法登陆

问题描述 在Mac下安装了mysql,密码无法登陆 下载了mysql官方最新版本,安装好后也记下了生成的临时密码,打开系统偏好设置下的Mysql使其在运行状态,打开终端输入 cd /usr/local/mysql/bin 显示: 之后看网上一些重置密码等等方法完全不行,终端始终不能打开mysql,要输入密码,密码一直不对. 后来想把mysql卸载了重新安装,但根据网上的方法在系统偏好设置里停止运行mysql,在终端输入一堆编码,但终端输入编码又出现让输入密码的状态,根本不能卸载mysql . 因

MySQL数据库远程无法登陆的几种解决办法

无法远程登入MySQL数据库的解决办法一: 尝试用MySQL Adminstrator GUI Tool登入MySQL Server,Server却回复错误讯息:Host '60-248-32-13.HINET-IP.hinet.net' is not allowed to connect to this MySQL server 这个是因为权限的问题,处理方式如下: shell>mysql --user=root -p 输入密码 mysql>use mysql mysql>GRANT

删除mysql 安装 mysql 5.1.65 5.1.73

新安装的centos 6.5 需要安装mysql,需要删除如下文件: 主 mysql 5.1.65  从 mysql 5.1.73    find / -name mysql 需要删除如下3个文件: [root@m ~]# whereis mysql mysql: /usr/lib64/mysql /usr/share/mysql [root@m ~]# rm -rf /usr/lib64/mysql/ [root@m ~]# rm -rf /usr/share/mysql/ [root@m ~

【MySQL】MySQL 5.6 参数之 extra_port

一 前言     作为MySQL DBA, 在运维MySQL的工作过程中,常常遇到Too many connections这个错误,这时作为数据库维护人员都不能登陆数据库进行维护 是多么窘迫的事.可能有人会说可以修改配置文件,然后重启数据库来解决.恩,不过这个是很多种解决方法中 可用性最差的一种,本文介绍通过 5.6 新的特性--管理端口 来解决这个问题.二 认识 extra_port    MySQL 在5.6.14 版本之后引入一个参数extra_port 用来解决too many conn

应用-微信登陆分享点击留在微信,不能执行回调方法

问题描述 微信登陆分享点击留在微信,不能执行回调方法 使用微信的分享SDK,集成后分享成功后点击返回原应用和留在微信中的留在微信按钮, 无法收到回调就执行不了写好的逻辑代码,怎么解决? 解决方案 sharesdk 微信登陆分享点击留在微信回调解决方案

mysql 5 mysql 5 技术内幕

mysql 5 mysql 5 技术内幕: http://www.kitebird.com/mysql-book/4ed.php

Navicat for MySQL与MySQL GUI Tools功能比较

一.MySQL GUI Tools MySQL官方提供的一个可视化界面的MySQL数据库管理控制台,提供了四个图形化应用程序,这些图形化管理工具可以大大提高数据库管理.备份.迁移和查询效率.它们分别是: ◆MySQL Migration Toolkit ◆MySQL Administrator ◆MySQL Query Browser ◆MySQL Workbench 1.MySQL Query Browser MySQL查询浏览器是为MySQL数据库服务器创造,执行和优化SQL查询的最简单的可

php连接不上mysql但mysql命令行操作正常的解决方法

 这篇文章主要介绍了php连接不上mysql但mysql命令行操作正常的解决方法,需要的朋友可以参考下 故障状况:php网站连接mysql失败,但在命令行下通过mysql命令可登录并正常操作. 解决方案: 1.命令行下登录mysql,执行以下命令:  代码如下:show variables like 'socket'; 执行后会得到类似于如下回显:  代码如下: "Variable_name"        "Value" "socket"  

Ubuntu下安装mysql与mysql workbench

其他相关链接 Ubuntu 安装jdk:[链接] Ubuntu安装eclipse:[链接] Ubuntu下安装mysql与mysql workbench:[链接] Ubuntu配置tomcat9:[链接] 1.sudo apt-get install mysql-server 安装完成,下面测试一下,输入: mysql -u root -p 提示输入密码,输入密码之后: 2.安装mysql workbench 下载好安装包之后执行如下命令(先cd到当前目录): sudo dpkg -i mysq