PHP如何不用表单进行POST传递
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP如何不用表单进行POST传递相关的知识,希望对你有一定的参考价值。
例如登陆失败返回页面login.php,如果是GET的话就是login.php?login=fall然后用IF
这样很难看,如何用POST传递?或者其他方法?
就是
<?php if($_GET['login'=="fall"])?>
<a>登陆失败</a>
<?php |?>
如何用POST传递值?或者其他方法?
通过onClick="location='html/zhuce.php';
可以点按钮后直接进入另一个页,这样就可以不用form来跳转到另一个页了,也省了一个判断语句来判断点的哪个按钮来进哪个页面.如:
<input type="submit" name="Submit" value="登录"/>
<input name="Submit" type="button" id="Submit" value="注册" onClick="location='html/zhuce.php';"/>
这里的按钮的类型submit和button的区别:
button在没有外加程序的情况下不能向服务器或者其他页面提交数据(表单内容)
但点击submit就可以
submit直接提交form的内容,button不行,button必须写onclick函数完成提交。
type=button 就单纯是按钮功能
type=submit 是发送表单
但是对于从事WEB UI的人应该要注意到,使用submit来提高页面易用性:
使用submit后,页面支持键盘enter键操作,而很多WEB软件设计师,可能没有注意到submit统一用button后往往页面不支持enter键了。所以需要支持enter键,必须要设置个submit,默认enter键对页面第一个submit进行操作。
(2)<A onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('设为首页的网址');return(false);"href="设置后转向哪个页">设为首页</A>
<A onclick=window.external.AddFavorite(document.location.href,document.title) href="收藏的网址">加入收藏夹</A>
(3)
location.href='../index.php'
这里是转向上一级目录index.php文件的意思注意 ../
(4)
1>$sql="select * from dlzc username='".$username."',password='".$password."'";
2>$result=mysql_query($sql);
3>$num=mysql_num_rows($result);
4>$rs=mysql_fetch_array($result); 参考技术A 在用户名 密码验证页面,
<?php
///
///
///
if ( /*用户名密码验证失败*/ )
?>
<form id="form1" name="form1" method="post" action="login.php">
<input name="login" type="hidden" id="login" value="fall" />
</form>
<script language="javascript" type="text/javascript">
document.getElementById("form1").submit();
</script>
<?php
exit();
//表单自动post提交
?>
方法二
<?php
session_start();
///
///
///
if ( /*用户名密码验证失败*/ )
$_SESSION['login'] = 'fall';
header('location:login.php');
exit();
?>
在login.php
<?php
session_start();
if ($_SESSION['login'] == 'fall' )
echo '<a>登陆失败</a>';
$_SESSION['login'] = '';
?>
方法三:
<?php
if ( /*用户名密码验证失败*/ )
setcookie("login","fall",time()+7200,"/");
header('location:login.php');
exit();
?>
在login.php
<?php
if ($_COOKIE['login'] == 'fall' )
echo '<a>登陆失败</a>';
$_SESSION['login'] = '';
?> 参考技术B 不想使用post传递也可以,可以使用get传递,使用get传递相对来说不安全 参考技术C 你把登陆信息存放在session中,在login文件里判断$_SESSION("??")是否等于成功登录的判断值,如果不是就显示<a>登录失败</a>追问
这样涉及到删除session问题,不然刷新以后还会显示登录失败...
追答楼下已经有答案了
不存在什么删除Session问题,唯一就是Session过期失效要注意一下而已
php高级
- php表单
- GET和POST都创建数组
- GET和POST被视作$_GET和$_POST,都是超全局变量,意思就是前段传来的get或者post的请求,控制器可以不用定义$_GET和$_POST就可以用
- $_GET是通过URL参数传递到当前脚本的变量数组
- $_POST是通过HTTP POST传递到当前脚本的变量数组
- 我们之所以说GET传值是不安全的是因为从表单发送的信息对任何人都可见的,都是在url中可以看到的,get对发送信息的数量是有限制的,大约在2000个字符
- 前方高危:注意一定不要用GET方式发送敏感数据,会导致你的信息让别人看到哦!
- POST传值从表单发送的信息对其他人都是不可见的,对信息的数量也是没有限制的
- $_SERVER[‘PHP_SELF‘]
- 一种超全局变量,返回的是当前正在执行的脚本名称
- 将表单数据发送到本身,不进行页面的跳转
- php高级
- date函数:把时间戳格式化为更易懂的日期和时间
- 有两个参数,第一个参数是必填的(Y-m-d H:i:s),第二个是可选的time()
- dete_default_timezone_set:设置时区
- date(“h:i:sa”)
- mktime:创建日期
- mktime(hour,minute,second,month,day,year) 时,分,秒,年,月,日
- strtotime:将可读的字符串转换成Unix时间
- include和require语句
- 错误处理方面
- require会生成致命错误,并停止脚本
- include只生成警告,脚本继续运行
- 应用场景
- require:当文件被应用程序请求时
- include:当文件不是必需的,且应用程序在文件未找到是应该继续运行时
- 错误处理方面
- 操作文件
- 前方高危
- 当操作文件时必须非常小心,如果操作失误,可能会造成非常严重的破坏
- 常见的错误
- 编辑错误的文件
- 被垃圾数据填满硬盘
- 意外删除文件内容
- readfile:读取文件,并把它写入输出缓存
- fopen:打开文件
- 两个参数,第一个是打开文件的名字,第二个打开的模式
- 模式
- r:打开文件为只读,文件指针在文件的开头开始
- w:打开文件为只写,删除文件的内容或创建一个新的文件,如果它不存在,文件的指针在文件的开头开始
- a:打开文件为只写,文件中的现有数据会被保留,文件指针在文件结尾开始,如果文件不存在,创建新的文件
- x:创建新文件为只写,如果文件存在,返回false和错误
- r+:同上
- w+:同上
- a+:同上
- x+:同上
- fread:读取打开的文件
- 两个参数,第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数
- fclose:关闭打开的文件
- 养成用完文件之后将他们全部关闭的习惯
- fgets:用于从文件读取单行
- feof:检查是否已到达“end-of-file”
- 对于遍历未知长度的数据很有用
- fgetc:用于从文件读取单个字符
- fwrite:用于写入文件
- 两个参数,第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串
- 后写入的文件会覆盖之前文件的内容
- 前方高危
- 文件上传
- $_FILES
- $_FILES["file"]["name"]:被上传文件的名称
- $_FILES["file"]["type"]:被上传文件的类型
- $_FILES["file"]["size"]:被上传文件的大小,以字节计
- $_FILES["file"]["tmp_name"]:存储在服务器的文件的临时副本的名称
- $_FILES["file"]["error"]:由文件上传导致的错误代码
- $_FILES
- 错误处理
- php中一些最为重要的错误检测方法
- 简单的die()语句
- 基本的错误处理:使用die()函数
- 自定义错误和错误触发器
- 默认错误处理程序是内建的错误处理程序
- E_USER_ERROR:致命的用户生成的run-time,错误无法恢复,脚本执行被中断
- E_USER_WARNING:非致命的用户生成的run-time警告,脚本执行不会被中断
- E_USER_NOTICE:默认,用户生成的run-time通知,脚本发现了可能的错误,也可能在脚本正常运行时发生
- 创建一个错误专用函数,该函数至少有2个参数(error_level,error_message),对多可接受5个参数(可选file,line-number以及error_context)
- error_level:必须,为用户定义的错误规定错误报告级别
- error-message:必须,为用户定义的错误规定错误消息
- error_file:规定错误在其中发生的文件名
- error_line:规定错误发生的行号
- error_context:规定一个数组,包含了当错误发生时在用的每个变量以及它们的值
- 错误报告级别级别
- E_WARNING:非致命的run-time错误
- E_NOTICE:run-time通知,脚本发现可能有错误发生,但也可能在脚本正常运行时发生
- E_USER_ERROR:致命的用户生成的错误
- E_USER_WARNING:非致命的用户生成的警告
- E_USER_NOTICE:用户生成的通知
- E_RECOVERABLE_ERROR:可捕获的致命错误
- E_ALL:所有错误和警告除级别E_STRICT以外
- 默认错误处理程序是内建的错误处理程序
- 错误报告
- 简单的die()语句
- php中一些最为重要的错误检测方法
- 异常处理
- 什么事异常
- 用于在指定的错误发生时改变脚本的正常流程
- 当异常被触发时,通常会发生
- 当前代码状态被保存
- 代码执行被切换到预定义的异常处理器函数
- 处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本
- 不同的错误处理方法
- 异常的基本使用
- 当异常被抛出时,其后的代码不会继续执行,php会尝试查找匹配的“catch”代码块
- 如果异常没有被捕获,而且又没有使用set_seception_handler作相应的处理的话,那么将发生一个严重的错误,并且输出“Uncaught Exception”(未捕获异常)的错误消息
- 创建自定义的异常处理器
- 多个异常
- 重新抛出异常
- 设置顶层异常处理器
- 异常的基本使用
- set_exception_handler:设置处理未捕获异常的用户定义函数
- Try:使用异常的函数应该位于“try”代码块内,如果没有触发异常,则代码将照常执行,如果异常被触发,将会抛出一个异常
- Throw:规定如何触发异常,每一个“throw”必须对应至少一个“catch”
- Catch:“catch”代码块会捕获异常,并创建一个包含异常信息的对象
- 异常的规则
- 需要进行异常处理的代码应该放入try代码块内,以便捕获潜在的异常
- 每个try或throw代码块必须至少拥有一个应用的catch代码块
- 使用多个catch代码块可以捕获不同种类的异常
- 可以在try代码块内的catch代码块中再次抛出(re-throw)异常
- 如果抛出异常,就必须捕获它
- 什么事异常
- 过滤器
- 什么是php过滤器
- 用于验证和过滤来自非安全来源的数据
- 验证和过滤用户输入或自定义数据是任何web应用程序的重要组成部分
- 设计php的过滤器扩展的目的是使数据过滤更轻松快捷
- 为什么使用过滤器
- 几乎所有web应用程序都依赖外部的输入,这些数据通常来自用户或其他应用程序,通过使用过滤器,能够确保应有程序获得正确的输入类型
- 始终对外部数据进行过滤
- 什么事外部数据
- 来自表单的输入数据
- cookies
- 服务器变量
- 数据库查询结果
- 什么事外部数据
- 输入过滤是最重要的应用程序安全课题之一
- 函数和过滤器
- 如果需要过滤变量,使用下面的过滤器函数之一
- filter_var:通过一个指定的过滤器函数来过滤单一的变量
- filter_var_array:通过相同的或不同的过滤器来过滤多个变量
- filter_input:获取一个输入变量,并对它进行过滤
- filter_input_array:获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
- 如果需要过滤变量,使用下面的过滤器函数之一
- 两种过滤器
- Validating
- 用于验证用户输入
- 严格的格式规则
- 如果成功则返回预期的类型,如果失败则返回FALSE
- Sanitizing
- 用于允许或禁止字符串中指定的字符
- 无数据格式规则
- 始终返回字符串
- Validating
- 什么是php过滤器
- date函数:把时间戳格式化为更易懂的日期和时间
- php的安全
- 跨站点脚本(Cross-site scripting , XSS)
- 一种计算机安全漏洞类型,一般都是出现在web应用程序
- XSS能够使攻击者向其他用户浏览的网页中输入客户端脚本
- 如何预防
- htmlspecialchars()函数
- 将特殊字符转化为html实体,这么做的含义是防止攻击者通过在表单中注入HTML或javascript代码
- htmlspecialchars()函数
- 在用户提交表单的时候我们还需要做两件事:
- 通过PHP trim函数,去除用户输入数据中不必要的字符(多余的空格,制表符,换行)
- 通过PHP stripslashes函数,删除用户输入数据中的反斜杠(\)
- 尽量使用检查函数,$_SERVER[‘REQUEST_METHOD‘]
- E-mail注入
- 未经授权的用户可通过输入表单在邮件头部插入数据
- 预防E-mail注入
- 最好的方法是对输入进行验证
- FILTER_SANITIZE_EMAIL:从字符串中删除电子邮件的非法字符
- FILTER_VALIDATE_EMAIL:验证电子邮件地址
- filter_var:通过指定的过滤器过滤变量
- spamcheck:电子邮件扫描和Linux系统的检疫制度
- 跨站点脚本(Cross-site scripting , XSS)
以上是关于PHP如何不用表单进行POST传递的主要内容,如果未能解决你的问题,请参考以下文章