php简单的投票系统[原创]
php简单的投票系统[原创]
<?php
include_once("../inc/connect.php");
$value =$_SERVER['HTTP_HOST'];
if(empty($_COOKIE["cook"])){
if(sizeof($_POST)<9){ exit("<script>alert('对不起,你还有选项未选!');history.back();</script>");}
for($i=1;$i<=8;$i++){
$c =$_POST['r'.$i];
switch( intval($c) ){
case 0:
$word ='vote_r1';
break;
case 1:
$word ='vote_r2';
break;
case 2:
$word ='vote_r3';
break;
default:
exit('error');
}
$sql ="update gx_votes set $word=$word+1,vote_times=vote_times+1 where id=$i";
mysql_query($sql) or die(mysql_error());
}
if( !empty($_POST['r9']) || !empty($_POST['r10']) ){ sava_voteinfo();}
echo "<script>alert('感谢你的参与,你的报表己提交!');history.back();</script>";
setcookie("cook", $value, time()+7200, "/");
}else{
print "对不起,你己经投票了,<a href=# onclick=\"history.back();\">点击返回</a>";
}
function sava_voteinfo(){
$vote_modi =addslashes(php_sava(isset($_POST['r9'])?$_POST['r9']:''));
$vote_info =addslashes(php_sava(isset($_POST['r10'])?$_POST['r10']:''));
$vote_ip =isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'未获取到IP';
$vote_time =date("Y-m-d H:i:s");
$vote_sql ="Insert into gx_voteguest(vote_ip,vote_modi,vote_info,vote_time) value('$vote_ip','$vote_modi','$vote_info','$vote_time')";
mysql_query($vote_sql) or die('error');
}
function php_sava($str)
{
$farr = array(
"/\s+/",
"/<(\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%)([^>]*?)>/isU",
"/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",
);
$tarr = array(
" ",
"<\\1\\2\\3>", //如果要直接清除不安全的标签,这里可以留空
"\\1\\2",
);
$str = preg_replace( $farr,$tarr,$str);
return $str;
}
?>
ip地址查询,ip查询,ip所在地查询
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>ip归属地</title>
</head>
<body>
<h1>站长爱好者网IP地址查询</h1>
<form id="form1" name="form1" method="post" action="">
<input type="text" name="ipinfo" id="ipinfo" style="border:solid 1px #fdbdd5" />
<input type="submit" name="button" id="button" value="查询" style="border:solid 1px #fdbdd5;width:50px" />
</form>
<?php
include("ipcheck.class.php");
$ipinfo=$_POST['ipinfo'];
$iptest=new IpLocation();
echo $iptest->getlocation($ipinfo);
?>
</body>
</html>
好现在来看看ipcheck.class.php文件.
<?php
/**
* @author 网事如风
* E-mail:rainrenamy@gmail.com
* 个人网址:http://www.adminfan.com
* 演示地址:http;//www.adminfan.com/seo/ip.php
*/
class IpLocation {
/**
* QQWry.Dat文件指针
* @var resource
*/
var $fp;
/**
* 第一条IP记录的偏移地址
*
* @var int
*/
var $firstip;
/**
* 最后一条IP记录的偏移地址
*
* @var int
*/
var $lastip;
/**
* IP记录的总条数(不包含版本信息记录)
*
* @var int
*/
var $totalip;
/**
* 返回读取的长整型数
*
* @access private
* @return int
*/
function getlong() {
//将读取的little-endian编码的4个字节转化为长整型数
$result = unpack('Vlong', fread($this->fp, 4));
return $result['long'];
}
/**
* 返回读取的3个字节的长整型数
*
* @access private
* @return int
*/
function getlong3() {
//将读取的little-endian编码的3个字节转化为长整型数
$result = unpack('Vlong', fread($this->fp, 3).chr(0));
return $result['long'];
}
/**
* 返回压缩后可进行比较的IP地址
*
* @access private
* @param string $ip
* @return string
*/
function packip($ip) {
// 将IP地址转化为长整型数,如果在PHP5中,IP地址错误,则返回False,
// 这时intval将Flase转化为整数-1,之后压缩成big-endian编码的字符串
return pack('N', intval(ip2long($ip)));
}
/**
* 返回读取的字符串
*
* @access private
* @param string $data
* @return string
*/
function getstring($data = "") {
$char = fread($this->fp, 1);
while (ord($char) > 0) { // 字符串按照C格式保存,以\0结束
$data .= $char; // 将读取的字符连接到给定字符串之后
$char = fread($this->fp, 1);
}
return $data;
}
/**
* 返回地区信息
*
* @access private
* @return string
*/
function getarea() {
$byte = fread($this->fp, 1); // 标志字节
switch (ord($byte)) {
case 0: // 没有区域信息
$area = "";
break;
case 1:
case 2: // 标志字节为1或2,表示区域信息被重定向
fseek($this->fp, $this->getlong3());
$area = $this->getstring();
break;
default: // 否则,表示区域信息没有被重定向
$area = $this->getstring($byte);
break;
}
return $area;
}
/**
* 根据所给 IP 地址或域名返回所在地区信息
*
* @access public
* @param string $ip
* @return array
*/
function getlocation($ip) {
if (!$this->fp) return null; // 如果数据文件没有被正确打开,则直接返回空
$location['ip'] = gethostbyname($ip); // 将输入的域名转化为IP地址
$ip = $this->packip($location['ip']); // 将输入的IP地址转化为可比较的IP地址
// 不合法的IP地址会被转化为255.255.255.255
// 对分搜索
$l = 0; // 搜索的下边界
$u = $this->totalip; // 搜索的上边界
$findip = $this->lastip; // 如果没有找到就返回最后一条IP记录(QQWry.Dat的版本信息)
while ($l <= $u) { // 当上边界小于下边界时,查找失败
$i = floor(($l + $u) / 2); // 计算近似中间记录
fseek($this->fp, $this->firstip + $i * 7);
$beginip = strrev(fread($this->fp, 4)); // 获取中间记录的开始IP地址
// strrev函数在这里的作用是将little-endian的压缩IP地址转化为big-endian的格式
// 以便用于比较,后面相同。
if ($ip < $beginip) { // 用户的IP小于中间记录的开始IP地址时
$u = $i - 1; // 将搜索的上边界修改为中间记录减一
}
else {
fseek($this->fp, $this->getlong3());
$endip = strrev(fread($this->fp, 4)); // 获取中间记录的结束IP地址
if ($ip > $endip) { // 用户的IP大于中间记录的结束IP地址时
$l = $i + 1; // 将搜索的下边界修改为中间记录加一
}
else { // 用户的IP在中间记录的IP范围内时
$findip = $this->firstip + $i * 7;
break; // 则表示找到结果,退出循环
}
}
}
//获取查找到的IP地理位置信息
fseek($this->fp, $findip);
$location['beginip'] = long2ip($this->getlong()); // 用户IP所在范围的开始地址
$offset = $this->getlong3();
fseek($this->fp, $offset);
$location['endip'] = long2ip($this->getlong()); // 用户IP所在范围的结束地址
$byte = fread($this->fp, 1); // 标志字节
switch (ord($byte)) {
case 1: // 标志字节为1,表示国家和区域信息都被同时重定向
$countryOffset = $this->getlong3(); // 重定向地址
fseek($this->fp, $countryOffset);
$byte = fread($this->fp, 1); // 标志字节
switch (ord($byte)) {
case 2: // 标志字节为2,表示国家信息又被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $countryOffset + 4);
$location['area'] = $this->getarea();
break;
default: // 否则,表示国家信息没有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
break;
case 2: // 标志字节为2,表示国家信息被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $offset + 8);
$location['area'] = $this->getarea();
break;
default: // 否则,表示国家信息没有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
if ($location['country'] == " CZ88.NET") { // CZ88.NET表示没有有效信息
$location['country'] = "未知";
}
if ($location['area'] == " CZ88.NET") {
$location['area'] = "";
}
//return $location;
echo "你的IP:".$location['ip']."<br />来自".$location['country'].$location['area'];
}
/**
* 构造函数,打开 QQWry.Dat 文件并初始化类中的信息
*
* @param string $filename
* @return IpLocation
*/
function IpLocation($filename = "QQWry.Dat") {
if (($this->fp = @fopen($filename, 'rb')) !== false) {
$this->firstip = $this->getlong();
$this->lastip = $this->getlong();
$this->totalip = ($this->lastip - $this->firstip) / 7;
//注册析构函数,使其在程序执行结束时执行
register_shutdown_function(array(&$this, '_IpLocation'));
}
}
/**
* 析构函数,用于在页面执行结束后自动关闭打开的文件。
*
*/
function _IpLocation() {
fclose($this->fp);
}
}
?>
<?
header("content-type:text/html; charset=utf-8");
$file_name=$_GET['name']; //服务器的真实文件名
$file_realName=urldecode($_GET['real']); //数据库的文件名urlencode编码过的
$file_dir="upload/";
$file = fopen($file_dir . $file_name,"r"); // 打开文件
// 输入文件标签
header( "Pragma: public" );
header( "Expires: 0" );
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($file_dir . $file_name));
Header("Content-Disposition: attachment; filename=" . iconv("UTF-8","GB2312//TRANSLIT",$file_realName));
// 输出文件内容
echo fread($file,filesize($file_dir . $file_name));
fclose($file);
exit;
?>
简单php生成 execel表格 程序
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=test.xls");
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
<?php
/**php简单 模板技术
* 作者:牛哄哄
* QQ:455703030
* 声明:我正则写的不地道,欢迎高手帮我修改一下
* 可自由传播、使用,但请保留此信息
*/
class FLEA_View_NHH
{
//模板存储目录
public $viewDir = null;
//缓存存储目录
public $cacheDir = null;
//是否过滤缓存中多余空格、Tab、回车
public $filterCache = true;
//模板中需要显示的数据
private $data = array();
public function __construct()
{
$viewConf = (array)FLEA::getAppInf('viewConfig');
if (empty($viewConf)) {
FLEA::loadClass('FLEA_Exception_ExpectedFile');
__THROW(new FLEA_Exception_ExpectedFile('The config file is not found: '.$viewConf));
}
$this->viewDir = $viewConf['viewDir'];
$this->cacheDir = $viewConf['cacheDir'];
$this->filterCache = $viewConf['filterCache'];
}
public function assign($var, $value)
{
$this->data[$var] = $value;
}
public function display($viewName)
{
$view = $this->viewDir.'/'.$viewName.'.html';
$cache = $this->cacheDir.'/'.$viewName.'.php';
if (!file_exists($view)) {
FLEA::loadClass('FLEA_Exception_ExpectedFile');
__THROW(new FLEA_Exception_ExpectedFile('The view file is not found: '.$view));
}
if (filemtime($view) > @filemtime($cache)) {
$this->parseView($view, $cache);
}
if (file_exists($cache)) {
if (!defined('IN_THIS_VIEW')) { define('IN_THIS_VIEW', TRUE); }
include($cache);
} else {
FLEA::loadClass('FLEA_Exception_ExpectedFile');
__THROW(new FLEA_Exception_ExpectedFile('The cache file has not read in correctly: '.$cache));
}
}
private function parseView($view, $cache = null)
{
/* 如果模板不存在,则输出错误消息 */
if (!file_exists($view)) {
FLEA::loadClass('FLEA_Exception_ExpectedFile');
__THROW(new FLEA_Exception_ExpectedFile('The view file is not found: '.$view));
}
/* 读取模板内容为一个字符串 */
$view = file_get_contents($view);
/* 将<!--{ }-->替换为{{ }} */
$view = str_replace(array('<!--{', '}-->'), array('{{', '}}'), $view);
/* 清除注释 */
$view = preg_replace("/\{\{\*(.*?)\*\}\}/", '', $view);
/* 解析assign方法引入的变量 */
$view = preg_replace('/\$([A-Za-z0-9_]+)/', '$this->data[\'\\1\']', $view);
/* 机械模板内部定义变量 */
$view = preg_replace('/\$\[([A-Za-z0-9_]+)\]/', '$\\1', $view);
/* 解析{{ $var }}基本变量输出标签 */
$view = preg_replace('/\{\{\s*\$(.+?)\s*\}\}/', '<? echo $\\1; ?>', $view);
/* 解析{{ include }}标签 */
$view = preg_replace('/\{\{\s*include\s+(.+?)\s*\}\}/', '<? include \\1; ?>', $view);
/* 解析{{ html }}标签 */
$view = preg_replace('/\{\{\s*html\s+(.+?)\s*\}\}/', '<? echo file_get_contents(\\1); ?>', $view);
/* 解析{{ code }}标签 */
$view = preg_replace('/\{\{\s*code\s+(.+?)\s*\}\}/', '<? \\1; ?>', $view);
/* 解析{{ if }}标签 */
$view = preg_replace('/\{\{\s*if\s+(.+?)\s*\}\}/', '<? if (\\1) { ?>', $view);
/* 解析{{ elseif }}标签 */
$view = preg_replace('/\{\{\s*elseif\s+(.+?)\s*\}\}/', '<? } elseif(\\1) { ?>', $view);
/* 解析{{ while }}标签 */
$view = preg_replace('/\{\{\s*while\s+(.+?)\s*\}\}/', '<? while (\\1) { ?>', $view);
/* 解析{{ foreach }}标签 */
$view = preg_replace('/\{\{\s*foreach\s+(.+?)\s*\}\}/', '<? foreach (\\1) { ?>', $view);
/* 解析{{ for }}标签 */
$view = preg_replace('/\{\{\s*for\s+(.+?)\s*\}\}/', '<? for (\\1) { ?>', $view);
/* 解析{{ else }}标签 */
$view = preg_replace('/\{\{\s*else\s*\}\}/', '<? } else { ?>', $view);
/* 解析{{ /while }},{{ /if }},{{ /for }},{{ /foreach }}标签 */
$view = preg_replace('#\{\{\s*/[a-z]+\s*\}\}#', '<? } ?>', $view);
/* 递归解析嵌套的子模板 */
if (preg_match_all('/\{\{\s*view\s+(.+?)\s*\}\}/', $view, $viewsInView)) {
/* 循环解析此模板中所有子模板,并将解析结果保存到数组$views */
$viewInViews = array();
foreach ($viewsInView[1] as $viewInView) {
$viewInViews[] = $this->parseView(eval('return '.$viewInView.';'));
}
/* 将该模板中所有子模板的标签分别替换为其对应的解析结果 */
$view = str_replace($viewsInView[0], $viewInViews, $view);
}
/* 合并相邻标签的解析结果 */
$view = preg_replace('/\?>\s*<\?/', '', $view);
/* 如果开启了缓存过滤,则过滤掉其中多余空格、Tab、回车 */
if ($this->filterCache == true) {
$view = preg_replace('/\s+/', ' ', $view);
}
/* 如果是在解析子模板,则返回解析结果 */
if ($cache == null) { return $view; }
/* 加入防止直接访问缓存的代码 */
$view = '<? if (!defined("IN_THIS_VIEW")) exit("The page is not found!"); ?>'.$view;
/* 将模板解析结果写入缓存文件 */
@file_put_contents($cache, $view);
}
}
/**
* 一、配置
* 配置文件请在FLEA的配置文件中修改
* 格式为:
* 'viewConfig' => array(
* 'viewDir' => '', //模板文件路径
* 'cacheDir' => '', //缓存文件路径
* 'filterCache' => true, //是否在模板解析完毕后对缓存进行优化
* );
*
* 二、标签
* 模板文件后缀名为.html
* 标签同时支持两种<!--{ }-->或{{ }},你可以根据情况自由使用
* 1、{{* *}} 添加注释,只支持单行,多行的不知道怎么写,郁闷
* 2、{{ $abc }} 输出一个变量,变量的格式化输出请使用<{code }>标签执行一个函数进行格式化输出
* 3、{{ $[abc] }} 输出一个模板内部定义的变量,变量名要用中括号括起来
* 4、{{ include 'abc/bcd.php' }} 包含一个动态文件,这个文件中可使用通过assign方法加入的变量和模板内部定义的变量,但不可以使用本引擎支持的标签
* 5、{{ html 'abc/bcd.html' }} 包含一个静态文件,此标签仅在PHP5下可用,被包含的文件中不可使用任何变量或标签,此标签可获得几倍于include标签的性能
* 6、{{ code echo substr($abc,1) }} 执行一段PHP代码,包括赋值,函数等等
* 7、{{ if $abc==1 }}和{{ elseif $abc==2 }}和{{ /if }} 判断,分支
* 8、{{ while $abc<1000 }}和{{ /while }} while循环
* 9、{{ for $i=0;$i<1000;$i++ }}和{{ /for }} for循环
* 10、{{ foreach $abc as $k => $v }}和{{ /foreach }} foreach循环
* 11、{{ view 'abc/bcd.html' }} 嵌套另一个模板,支持模板的无限嵌套
*
* 注意:
* 1,include,html,view标签可使用常量来指定路径,这样会更加方便
* 2,assign引入的变量与模板内部定义的变量采用不同的命名空间,因此可重名
* 3,对于while,foreach,for循环需要引入的变量,最好采用模板内部定义的变量
* 4,模板内部定义变量 {{ code $[i]=1 }}
* 5,所有标签内部不可包含{}大括号,否则无法正确解析
* 6,所有标签的参数部分必须写为单行,否则无法正确解析
* 7,在调试时,为方便查看编译结果可关闭缓存优化,发布时,建议开启,可提高性能
* 8,此模板引擎仅可于FLEA下使用,若需不依赖FLEA的版本,请自行修改
* 9,标签中的参数使用PHP的语法
* 10,数组的引用与输出{{ $abc['id'] }}
* 11,所有标签一律小写
* 12,标签的参数中不可包含{{或}},否则会解析错误
*/
?>
相关文章
- 这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
- 这篇文章主要为大家详细解析了BootStrap栅格系统、表单样式与按钮样式源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-01-23
- 如今高要求的分布式系统的建造者遇到了不能完全由传统的面向对象编程(OOP)模型解决的挑战,但这可以从Actor模型中获益。...2021-05-20
- 护卫神·主机管理系统该版本支持在Windows Server 200320082012,含32位和64位,直接开设配置WEB站、FTP站,以及SQL Server和MySQL,是您开设和管理虚拟主机的绝好帮手。但是对于新用户可能在使用上有一些困难,因此请仔细阅读如下说明文档...2016-01-27
- 这篇文章主要介绍了利用C#修改Windows操作系统时间,帮助大家更好的利用c#操作系统,感兴趣的朋友可以了解下...2020-12-08
vivo OriginOS新系统如何更新 originos系统更新方法
vivo新系统更新的步骤是什么?如何更新到vivo的最新系统?vivo的最新系统太亮眼了,不少vivo的用户都在跃跃欲试想体验一下最新的系统。vivo新系统虽然做出来了不过我们想体验的话还是要等待一段时间。到时大家通过下面的方法就可以使用到新系统了...2020-12-08- 这篇文章主要为大家详细介绍了C#实现影院售票系统,解析了售票系统的难点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了基于jquery实现彩色投票进度条代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-27
ColorOS7.2好不好用 ColorOS7.2系统升级体验
ColorOS7.2系统怎么样?好不好用?值不值得升级?下面小编带来ColorOS7.2系统升级体验...2020-06-29- 这篇文章主要介绍了C#多线程编程中的锁系统(四):自旋锁,本文讲解了基础知识、自旋锁示例、SpinLock等内容,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了Unity实现换装系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-11
- 本文给大家介绍一个不错的需要登录的php 文件上传管理系统,功能简单有需要了解的同学可参考。 代码如下<?php$admin_pw="admin";//管理密码$uploaddir="upload";//上传目录session_start();if($_GET['action']=="g...2015-10-30
- 这篇文章主要为大家想详细介绍了C++学生信息管理系统的实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- <?php /* **数据库连接 */ $connect = new PDO ("mysql:host=localhost;dbname=online","root","960515"); ?> < PHP (Hypertext...2016-11-25
- 这篇文章主要为大家详细介绍了C语言学生成绩管理系统小设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- 本文介绍了个人的《零压健身房管理系统(扁平化)》的基本流程和功能点的介绍,虚心接受各位的意见,欢迎在提出宝贵的意见,大家一起探讨学习...2021-09-26
- .net core是最近讨论频率很高的话题,下面这篇文章主要给大家介绍了关于利用.NET Core如何获取操作系统中各种信息的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧...2021-09-22
- 这篇文章主要为大家详细介绍了C++顺序表实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-13
- 这篇文章主要介绍了基于python实现银行管理系统,文中有非常详细的代码示例,对正在学习python项目制作的小伙伴们有很好的帮助,需要的朋友可以参考下...2021-04-19
- 这篇文章主要介绍了C#实现操作windows系统服务(service)的方法,可实现系统服务的启动和停止功能,非常具有实用价值,需要的朋友可以参考下...2020-06-25