php记录IP方式来防止表单重复提交

 更新时间:2016年11月25日 17:22  点击:1503
这个原理比较的简单就是用户第一次提交时我们记录提交用户的IP地址,这样如果用户在固定时间内再次提交表单就会提示重复提交了,这种做法通常用于在顶一下,支持一下这种应用中了,在防止数据重复提交是一个非常不好的选择哦。

例子

 代码如下 复制代码

<?php

session_start();
if(empty($_SESSION['ip']))//第一次写入操作,判断是否记录了IP地址,以此知道是否要写入数据库
{
$_SESSION['ip']=$_SERVER['REMOTE_ADDR'];//第一次写入,为后面刷新或后退的判断做个铺垫
...........//写入数据库操作
}
else//已经有第一次写入后的操作,也就不再写入数据库
{
echo '请不要重复提交表单或刷新页面';//写一些已经写入的提示或其它东西
}
?>

还有办法就是

1:在页面生成随机码,也就是每次提交随机码都不一样,在提交的时候验证随机码!
2:在提交的时候,验证如果数据存在,就不提交了.

如果你想防止重复提交入库IP不是最好的办法,我们可以在数据库中查询是不是有相同记录并且IP是不是想同再进行处理,

例子

 代码如下 复制代码

$sql ="select * from 表名 where buy_tel='电话' and IP='$ip'   ";// and $time-buy_date<60
$query = $db->query( $sql );
if( $db->rows( $query ) )
{
echo('<script>alert("您己提交过了,请勿重复提交!");</script>');
}
else
{
进行入库操作了哦
}

今天没事在研究一个功能但会用到strtotime函数了,这个我是把2014-07-8 0:0:0格式的转换时间戳了,这个例子非常的好用,下面来看个例子吧。

实现功能

获取当半时间与用户给定的时间进行对比,然后判断是几天之内进行相关操作了

程序代码

 代码如下 复制代码

<?php

$d ='2014-01-09';
$time = time();
$ftime = strtotime('2014-07-8 0:0:0');

echo $ftime;

echo date('Y-m-d',$ftime).'<br />';

if( round(($time - $ftime) / 86500,1)< 7 ) // 7天之内不允许复制
{
 echo '7 stop copy';
}
else
{
 echo 'good';
}
?>

一聚教程网应用于一些比较简单的内容处理上了,在此我就不说出来了免得大得进行攻击我的网哦哈。

图片上传与文件上传在php中都是一样直接使用move_uploaded_file($_FILES["filename"]["tmp_name"]就可以实现了,下面我来给大家分享一个站长分享文件上传例子。

前期需要了解的知识点

move_uploaded_file()文件上传函数

 代码如下 复制代码

if(move_uploaded_file($_FILES["filename"]["tmp_name"])
{
echo '文件上传成功';
}

$_FILES php全局变量

$_FILES: 经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用)

 代码如下 复制代码


$_FILES['myFile']['name']   客户端文件的原名称。
 $_FILES['myFile']['type']   文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
 $_FILES['myFile']['size']   已上传文件的大小,单位为字节。
 $_FILES['myFile']['tmp_name']   文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但用 putenv() 函数设置是不起作用的。
 $_FILES['myFile']['error']   和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
  UPLOAD_ERR_OK             值:0; 没有错误发生,文件上传成功。
  UPLOAD_ERR_INI_SIZE      值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
  UPLOAD_ERR_FORM_SIZE  值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
  UPLOAD_ERR_PARTIAL          值:3; 文件只有部分被上传。
  UPLOAD_ERR_NO_FILE          值:4; 没有文件被上传。    值:5; 上传文件大小为0.

核心文件:

upimg.htm

 代码如下 复制代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>上传图片</title>
 <script language="javascript">
    function $(id){
     return document.getElementById(id);
    }
    function ok(){
 $("logoimg").src = $("filename").value;
    }
</script>
</head>

<body>
<table border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td height="45" align="center" valign="middle">
  <form action="uploadf.php?submit=1" method="post" enctype="multipart/form-data" name="form1"> 请选择上传的图片
   <input type="file" name="filename" id="filename" onchange="ok()">
   <!-- MAX_FILE_SIZE must precede the file input field -->
   <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
   <input type="submit" name="Submit" value="上传">
  </form>
 </td>
  </tr>
</table>
<font color="red">注意:请上传120*45像素的GIF或者jpg格式的logo图片</font><br/>
logo预览:<img id="logoimg" src="images/bg-02.gif"/>

</body>
</html>

uploadf.php

<?php
if(!empty($_GET[submit]))
{
 $path="uploadfiles/pic/"; //上传路径
 //echo $_FILES["filename"]["type"];

 if(!file_exists($path))
 {
  //检查是否有该文件夹,如果没有就创建,并给予最高权限
  mkdir("$path", 0700);
 }//END IF
 
 //允许上传的文件格式
 $tp = array("image/gif","image/pjpeg","image/png");
 //检查上传文件是否在允许上传的类型
 
 if(!in_array($_FILES["filename"]["type"],$tp))
 {
  echo "格式不对";
  exit;
 }//END IF
 
 if($_FILES["filename"]["name"])
 {
  $file1=$_FILES["filename"]["name"];
  $file2 = $path.time().$file1;
  $flag=1;
 }//END IF
 
 if($flag) $result=move_uploaded_file($_FILES["filename"]["tmp_name"],$file2);
 
 //特别注意这里传递给move_uploaded_file的第一个参数为上传到服务器上的临时文件
 if($result)
 {
  //echo "上传成功!".$file2;
  echo "<script language='javascript'>";
  echo "alert(\"上传成功!\");";
  //echo " location='add_aaa.php?pname=$file2'";
  echo "</script>";
  
  echo("<input type=\"button\" name=\"Submit\" value=\"确定\" onClick=\"window.opener.setFile('".$file2."');window.close();\">");
  echo "图片名称:".$file2;
 }//END IF

} else {
 echo "file is null!";
}
?>

调用示例文件:

testUpload.htm

 代码如下 复制代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>上传图片</title>
 <script>
  function setFile(f1){
   document.frm.logoImg.value=f1;
     }
 </script>
</head>

<body>
<table border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td height="45" align="center" valign="middle">
  <form action="#" method="post"  name="frm"> 请选择上传的图片
        <input name="regAd.logoImg" id="logoImg"   type="text" size="30"/>
    <label style="cursor:hand" onClick="window.open('upimg.htm','上传图片','height=200,width=400,top=200,left=200')">上传图片</label><br/>
  </form>
 </td>
  </tr>
</table>

</body>
</html>

此程序不足之处分析

上传预览功能

 代码如下 复制代码

  function $(id){
     return document.getElementById(id);
    }
    function ok(){
 $("logoimg").src = $("filename").value;
    }

这段代码其实就是一个鸡肋了,在有一些浏览器下是不兼容了,但不会影响到图片上传功能。

程序安全

对于在上传处我们并未进行数据大小限制与程序上传文件类型进行限制,这样可以利用它来上传一些像php文件,这样你的网站就不安全了哦。

php判断字符串是否包含另一个字符串的实现方法有许多的办法,像我们在网上一搜索可看到大量关于字符是否包含指定字符的方法,下面我把这些实用的例子整理一起与大家分享。

例子。explode

 代码如下 复制代码

function checkstr($str){
   $needle = "b";//判断是否包含a这个字符
  $tmparray = explode($needle,$str);
 if(count($tmparray)>1){
   return true;
 } else{
   return false;
 }
}

原理非常的简单:就是以我们要查找的字符为定界,然后我们再利用explode分成函数,如果分切成功之后并且数组长度大于1那不代码是存在你要找到字符了,否则就没有了,这个只适用于判断字符串中是否存在字符,更多深一层就无法操作了。

例子,strpos()

strpos() 函数返回字符串在另一个字符串中第一次出现的位置

 代码如下 复制代码

<?php
   $attach='omr/online/php/img/news/';
   //注意要用 !==
   //查找的字符串在第一个位置返回是0
   if (strpos($attach, 'omr/online') !== false) {
    //如果包含omr/online
   }
?>

例子,strstr()

strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。

 代码如下 复制代码

<?php
   $attach='omr/online/php/img/news/';
   //注意要用 !==
   //返回字符串的其余部分(从匹配点)
   if (strstr($attach, 'omr/online') !== false) {
    //如果包含omr/online
   }
?>

总结

我觉得最简单的就是这种了 strpos($a, $b) !== false 如果$a 中存在 $b,则为 true ,否则为 false。

用 !== false (或者 === false) 的原因是如果 $b 正好位于$a的开始部分,那么该函数会返回int(0),那么0是false,但$b确实位于$a中,所以要用 !== 判断一下类型,要确保是严格的 false。昨天晚上去中关村图书大厦,看到一本书中用的是 strpos === true 来判断,这是极其不正确的

一个非常简单的PHP验证码生成例子,在这个PHP验证码生成我们需要使用到php_gd2.dll扩展了,下面我就来给大家整个例子了,希望对各位朋友会带来帮助哦。

使用PHP的GD库扩展类制作验证码的基本步骤:
启用php.ini配置文件中的extension=php_gd2.dll扩展(打开php.ini配置文件,去掉行首的分号后重启Apache即可);
下面是PHP生成验证码的代码:

 代码如下 复制代码

<?php
for($i=0;$i<5;$i++){
    $suijishu.=dechex(rand(1,15));//使用循环产生一个十六进制格式的五位数
}
setcookie("useryzm",$suijishu);//创建一个名为useryzm、值为$suijishu的cookie
$img=imagecreatetruecolor(100,30);//创建一个宽100高30的图片验证码
$bg=imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));//定义验证码的背景颜色
$sc=imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));//定义验证码字体的颜色
imagestring($img,5,rand(0,50),rand(0,15),$suijishu,$sc);//定义字体的位置(左上角为坐标原点)
for($k=0;$k<10;$k++){
    imageline($img,rand(1,100),rand(1,100),rand(1,100),rand(1,100),$sc);//在验证码上绘制直线(扰乱作用)
    imagesetpixel($img,rand(1,100),rand(1,30),$sc);//在验证码上绘制点(扰乱作用)
}
ob_clean();//清空输出缓冲区(这句很重要)
header("Content-type:image/jpeg");//定义输出图片的格式(image/后面可以是jpeg或png或gif等图片格式)
imagejpeg($img);//输出图象
imageDestroy($img);//释放内存,完成创建
?>

下面是HTML中调用验证码的代码:

 代码如下 复制代码

<html>
...
<script language="javascript">
function changeyzm(){
    var img = document.getElementById("yzmimg").src = "gdyzm.php?id="+Math.random()*10;
    return ;
}
</script>
...
<img src="gdyzm.php" name="yzmimg" width="100" height="30" id="yzmimg" title="点击刷新" onclick="changeyzm();" />
...
</html>

如果出现"图像“XXXX”因其本身有错无法显示"的错误,很可能是漏了ob_clean();这句,或是文件的物理编码出了问题(修改物理编码的方法可以参考PHP创建utf8文件)
如果没有加ob_clean();这句,在本地测试且物理编码为ANSI时没问题,物理编码为UTF-8时则会报错(图像“XXXX”因其本身有错无法显示)

[!--infotagslink--]

相关文章

  • php中网页添加到桌面快捷方式方法

    我们经常会在网站中看到可以直接把网站以快捷方式保存到自己的电脑中,然后只要点击就可以实现进入网了,那么php中怎么把网页添加到桌面快捷方式呢。 功能简单,直接上...2016-11-25
  • PHP用DOM方式处理HTML之《Simple HTML DOM》

    近经常需要采集一些网上的数据,发现一个PHP处理HTML的利器 simple html dom,看了一下文档,使用非常方便,关键是能够用CSS选择器来访问DOM树,和jquery相似,实在是难得的利器...2016-11-25
  • ps中怎么设置垂直罗马对齐方式?垂直罗马对齐方式设置方法

    photoshop的直排文字工具,打出的字特别是英文字母,默认排列侧向的,如何调整为正向排列呢?下面我们就来看看标准的罗马对齐方式应该怎么设置。 1、在PS中点击“工具面...2017-01-22
  • sqlserver删除重复记录并且要保留一条记录

    删除重复数据,只保留一条用SQL语句,删除掉重复项只保留一条在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢...2018-09-10
  • C#删除字符串中重复字符的方法

    这篇文章主要介绍了C#删除字符串中重复字符的方法,涉及C#针对字符串的遍历及移除等操作的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • postgresql 删除重复数据的几种方法小结

    这篇文章主要介绍了postgresql 删除重复数据的几种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-05
  • javascript 判断页面访问方式电脑或者移动端

    这篇文章主要介绍了 判断页面访问方式电脑或者移动端的相关资料,这里提供了三种方法,需要的朋友可以参考下...2016-10-03
  • C#实现生成所有不重复的组合功能示例

    这篇文章主要介绍了C#实现生成所有不重复的组合功能,涉及C#数学运算中组合数运算的相关原理应用操作技巧,需要的朋友可以参考下...2020-06-25
  • C#短时间内产生大量不重复的随机数

    在C#编程中,经常会碰到产生随机数的情况,并且是在短时间内产生一组随机数。如果这组随机数中有大量重复的,则达不到我们的要求...2020-06-25
  • PHP中如何防止外部恶意提交调用ajax接口

    本文简单介绍如何防止外部恶意调用ajax接口,以达到节省流量,减轻服务器压力的目的。...2016-04-15
  • JavaScript中数组去除重复的三种方法

    本文通过三种方法给大家介绍js数组去除重复的方法,实用性非常高,感兴趣的朋友一起学习吧...2016-04-24
  • css的四种隐藏方式介绍

    小编推荐的这篇文章介绍了css的四种隐藏方式,有需要的同学赶快来看看吧 1.opacity:0只是把元素隐藏起来了 ,但是还是占有布局,所以还是对布局有影响 ...2017-01-22
  • php创建桌面快捷方式实现方法

    这篇文章主要介绍了php创建桌面快捷方式实现方法...2016-01-04
  • php中防止post提交重复数据

    重复提交数据我们在应用中经常会碰到了,今天我给各位介绍利用session来防止用户不小心重复提交数据的一个例子 原理非常的简单:就是用session在表单页面记录下,...2016-11-25
  • 用C#生成不重复的随机数的代码

    我们在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复的题目,在.net Framework中提供了一个专门用来产生随机数的类System.Random...2020-06-25
  • 浮点数在计算机中存储方式是怎样的

    这篇文章介绍了浮点数在计算机中是如何存储的,讲解的比较详细,有需要的朋友可以参考一下。...2020-04-25
  • php多维数组的排序方式

    php多维数组的排序方式与单数组会有一些不同了同时在不同版本中也有不同的函数了,下面小编整理了一自己在使用php中整理的一些关于php多维数组的排序例子,希望这些例子...2016-11-25
  • 横向重复区域显示二法

    方法一. 注重这里有一个预先定义的图片记录集rsmpic 要横向重复的就是图片,请根据你的情况改为你的记录集名称.整洁地将横向重复内容放在一个表格内 <table width=...2016-11-25
  • 利用asp.net实现生成不重复订单号

    订单号在购物过程中起到了很好的识别作用,更方便的有利于工作人员识别商品,本文介绍利用asp.net实现生成订单号...2021-09-22
  • vue 解决addRoutes多次添加路由重复的操作

    这篇文章主要介绍了vue 解决addRoutes多次添加路由重复的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-04