PHP和MySQL生成的标签云实现代码
用户输入文本和输入的文本在过去的一个标签云 。标签云是一个用户生成的标签的可视化描述,或只是一个网站的文字内容,通常用来描述网站的内容。
为此,我们将创建一个HTML表格,将接受用户文本,也让用户可以看到从 MySQL数据库,其中包含在过去输入的文本生成的标签云。
代码如下 | 复制代码 |
<?php echo '<form method="post" action="tag_cloud_gen.php" name="gen_tag_db">'; echo '<p>Input your text here:<br /><textarea name="tag_input" rows="20" cols="80"></textarea></p>'; echo '<input type="submit" name="submit">'; echo '</form>'; ?> <br /> <h3>OR</h3> <br /> <p>see the current tag cloud here</p> <?php echo '<form name="show_tag_cloud" method="post" action="show_tag_cloud.php">'; echo '<input type="submit" value="show current tag cloud" >'; echo '</form>'; ?> |
其中每个计算其频率和对将进入一个数组,输入的文本将被表征为单个词。然后将这个数组存储到一个MySQL数据库,我们可以选择保存在MySQL数据库表coloumn存储任何链接,如果这个项目未来的扩展。
1) tag_id —- int,primary key,auto increament 1)tag_id - 整型,主键,自动increament
2) keyword — varchar(20),unique 2)关键字 - 数据类型为varchar(20),独特的
3) weight — int 3)重量 - 诠释
4) link — varchar(256). 4)链接 - 为varchar(256)。
代码如下 | 复制代码 |
<?php $string=$_POST['tag_input']; $query="select * from `tagcloud_db`.`tags` where keyword like '%$keyword%'"; if(!$resultset){ |
Make anether file and name it style.css .做出anether文件和将其命名为style.css文件。 Put the following code in it.把下面的代码。
代码如下 | 复制代码 |
HTML, BODY |
这将使我们的标签云外观漂亮,它保存为style.css的。
再次,使一个新的PHP文件,并命名它show_tag_cloud.php。
在PHP代码中,如下我们连接到MySQL数据库,获取所有的标签,其重量和纽带。
然后计算每个使用它的重量及最小的标签大小假定为标签的大小,它也是每一个标签从数据库中检索或与Google链接,如果没有链接存在,即“不适用”的链接
代码如下 | 复制代码 |
<?php if($resultset=mysql_query($query,$connection)){ // Smallest font size possible // Tag Separator ?> |
现在把他们所有在您的Web服务器的根目录,并观看结果。 每个查询会给你新的结果,随着时间的推移,数据库的增长。
我们这里讲述的防盗链代码只专注于php的解决方案,当然如果你有服务器管理权限或htaccess文件操作我建义不要用php防盗链哦。先来看个最简单的
下面是php实现的代码, xxx.mp3就是你的音乐文件的实际地址, 对外传播的时候只传播php地址,mp3地址对外不公开
代码如下 | 复制代码 |
<?php if(strpos($_SERVER['HTTP_REFERER'], 'qq.com') !== FALSE) { header('HTTP/1.1 404 Not Found'); exit; } readfile('xxx.mp3'); ?> |
可以加入白名单的做法
代码如下 | 复制代码 |
<?php /** * @author seraphim * @copyright 2012 */ $ADMIN = array( 'defaulturl'=> 'http://www.xx.com/images/banner-header.gif', //盗链返回的地址 'url_1' => 'http://www.xx.net/file', 'url_2' => 'http://www.xx.net/file1', ); $okaysites = array( 'http://box.baidu.com', 'http://tieba.baidu.com/p/1493336008', //白名单 'http://www.xx.com/1.html', ); $reffer = $_SERVER['HTTP_REFERER']; if ($reffer) { $yes = 0; while (list($domain, $subarray) = each($okaysites)) { if (ereg($subarray, "$reffer")) { $yes = 1; } } $theu = 'url_' . $_GET['site']; $file = $_GET['file']; if ($ADMIN[$theu] and $yes == 1) { header("Location: $ADMIN[$theu]/$file"); } else { header("Location: $ADMIN[defaulturl]"); } } else { header("Location: $ADMIN[defaulturl]"); } print_r($_SERVER['HTTP_REFERER']); ?> |
实例3 [支持白名单二]
代码如下 | 复制代码 |
<?php $ADMIN[defaulturl] = "http://www.111cn.net/404.htm";//盗链返回的地址 $reffer = $HTTP_REFERER; ?> |
还有很多的方法来实现防盗链本文章只讲到了利用php实现,像有些站生成了html这样做起来就不怎么方便了,我们可以在iis,apache,htaccess来操作。
在php中分页相对来说很是简单的,我们只要理解到几点就好如pagesize,count,page这几个变量,总体多少页,当前是第几页,第页要显示几条记录,我们只要一个公式可以算出来。只需要得到两个变量就成功了一半:
每页要显示的记录数$pageSize
表中总的数据量 $rowCount
有了以上两个变量,我们就可以得出 共有几页了$pageCount
然后通过for循环,比如总共有13个页面,那么很容易就能通过for循环输出页数
代码如下 | 复制代码 |
$nav='';//用来保存页数的一个变量 for ($i=1;$i<=13;$i++) { $nav.="<a href='index.php?page=".$i."'>第".$i."页</a> "; } |
以上的for循环将输出如
第1页,第2页,第3页,第4页,第5页,第6页,第7页,第8页,第9页,第10页,第11页,第12页,第13页
如果我们只想每次只显示十个页面呢?比如1-10页,11-20页
很简单,只要稍微修改下for循环即可实现
代码如下 | 复制代码 |
$step= floor(($pageNow-1)/10)*10+1; for ($i=$step;$i<=$step+10;$i++) { $nav.="<a href='index.php?page=".$i."'>第".$i."页</a> "; } |
比如,当前页面$pageNow如何在1~10之间的话,那么$step=0
当前页面$pageNow如何在11~20之间的话,那么$step=10
当前页面$pageNow如何在21~30之间的话,那么$step=20
参考具体的实现过程的代码,我们不难发现,for循环的第二个条件只需要加上10就可以实现每次只显示10也的情况了,我们将这一步分装在fenyePage类中的getLink()方法中
话又说回来,如何才能得到$pageSize和$rowCount两个变量的值呢?
$pageSize可以又程序员自己指定,$rowCount可以借助一个简单的执行sql语句的函数就能得到
代码如下 | 复制代码 |
<?php /** * $sql语句:①获取数据②获取总记录数 */ class fenyePage{ public $pageSize=5;//每页显示的数量-->程序员指定的 public $rowCount;//这是从数据库中获取的(形如SELECT COUNT(id) FROM TABLE)用来保存总共有多少条记录 public $pageNow;//通过$_GET['page']获取的,用来保存当前所在的页码 public $pageCount;//计算得到的,用来保存总共有多少页 public $res_arr;//用来保存要显示到页面的数据(比如保存SELECT * FROM TABLE LIMIT 0,10 检索的数据) public $nav;//显示第几页第几页的导航条 /** * 取得当前页面的超链接 * * @author 小飞 2012/5/30 */ public function getLink() { $this->nav=''; $this->pageCount=ceil(($this->rowCount/$this->pageSize)); $step= floor(($this->pageNow-1)/10)*10+1; if ($this->pageNow>10) { $this->nav.=" <a href='index.php?page=".($step-1)."'> << </a> ";//整体每10页向前翻 } if ($this->pageNow!=1) { $this->nav.="<a href='index.php?page=".($this->pageNow-1)."'> 上一页</a> "; } if ($this->pageNow!=1) { $this->nav.="<a href='index.php?page=1'>首页</a> "; } for ($start=$step;$start<$step+10 && $start<=$this->pageCount;$start++) { $this->nav.="<a href='index.php?page=".$start."'>".$start."</a> "; } if ($this->pageNow!=$this->pageCount) { $this->nav.="<a href='index.php?page=".$this->pageCount."'>末页</a> "; } if ($this->pageNow!=$this->pageCount) { $this->nav.=" <a href='index.php?page=".($this->pageNow+1)."'>下一页</a>"; } if ($this->pageCount>10 && $this->pageNow<$this->pageCount-8){ $this->nav.=" <a href='index.php?page=".($step+10)."'> >> </a>";//整体每10页向后翻 } $this->nav.="/共有".$this->pageCount."页"; } } ?> |
由于zf中操作数据库的任务由model层来完成,所以,我将获取$rowCount的值的函数放在了对应的表model中
比如:我是操作order表的
那么当我要显示所有订单信息的时候,我通过order类中的showorder()方法取得$rowCount的值,并将其付给分页类中的$rowCount属性
同样,将要显示在页面上的数据信息也一并付给了分页类中的$res_arr属性
这样,我们就可以很容易的通过实例化一个分页类(fenyePage),然后将其通过参数传给showorder()函数,由该函数完成以下动作:
①要显示在页面上的信息
②表中总共有多少条记录
代码如下 | 复制代码 |
/** * 根据指定的用户id,查询该用户的历史订餐记录 * * @author 小飞 2012/5/30 * @param $id 用户id * @param $fenye 实例化的一个对象,用来处理分页 * @todo $sql1语句 "select * from table where * limit 0,10" 该sql语句主要用来检索数据库中的数据,用以显示在view层 * @todo $sql2语句 "select count(id) from table" 该sql语句用来得出总的数据量 */ public function showorder($id=null,$fenye=null) { $db = $this->getAdapter(); $select=$db->select(); $select->from(array('o' => 'order'),array('o.id','o.user_id','o.user_name','o.food_name','o.food_price','o.order_time','o.order_state')); if ($id!=null){ $select->where('o.user_id=?',$id); } $select->join(array('d'=>'department'),'o.dep_id = d.id','d.dep_name'); if($fenye!=null){ $select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize); } $sql1=$select->__toString(); //该sql语句主要用来计算总的数据量 $sql2="SELECT COUNT(id) FROM `order`"; $fenye->res_arr=$db->fetchAll($sql1);//将要显示的数据存储到分页类的$res_arr属性当中,方便调用 $rowCount=$db->fetchAll($sql2);//将表中的总数据量保存到分页类的rowCount属性当中 $fenye->rowCount=$rowCount[0]['COUNT(id)']; $fenye->getLink(); return $fenye->res_arr; } |
总结分页最核心的几句代码
代码如下 | 复制代码 |
$this->pageCount=ceil(($this->rowCount/$this->pageSize)); $step= floor(($this->pageNow-1)/10)*10+1; |
再就是sql中的select * from table where * limit 0,10也就是本实例中的$select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize); 了。
文章利用了第三方接口来实现ip地址查询,这里根据用户提交的IP地址就可以方便的查出IP地址真实所在地。代码如下 | 复制代码 |
<?php header("content-Type: text/html; charset=utf-8");$weburl=$_SERVER['SERVER_NAME'];$weblink="http://".$weburl."/";if(count($_GET)>0){$urlip=array_keys($_GET);$urlip=str_replace("_",".",$urlip[0]);}?> <style type="text/css"> <SCRIPT LANGUAGE="JavaScript">function checkIP(){var ipArray,ip,j;ip = document.ipform.ip.value;if(/[A-Za-z_-]/.test(ip)){if(!/^([w-]+.)+((com)|(net)|(org)|(gov.cn)|(info)|(cc)|(com.cn)|(com.hk)|(net.cn)|(org.cn)|(com.ru)|(net.ru)|(org.ru)|(name)|(biz)|(hk)|(vn)|(com.sg)|(pk)|(ph)|(ac)|(bz)|(de)|(net.au)|(my)|(tv)|(us)|(jp)|(kr)|(sg)|(mn)|(cd)|(ue)|(sh)|(lc)|(hn)|(me)|(la)|(cc)|(tk)|(com.tw)|(cm)|(cn))$/.test(ip)){alert("不是正确的域名,请检查域名格式或看是否有空格"); document.ipform.ip.focus();return false;}}else{ipArray = ip.split(".");j = ipArray.length;if(j!=4){alert("不是正确的IP");document.ipform.ip.focus();return false;}for(var i=0;i<4;i++){if(ipArray[i].length==0 || ipArray[i]>255){alert("不是正确的IP");document.ipform.ip.focus();return false;}}}} |
淘宝IP地址库接口说明
1. 请求接口(GET):
http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]
2. 响应信息:
(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
3. 返回数据格式:
代码如下 | 复制代码 |
{"code":0,"data":{"ip":"210.75.225.254","country":"u4e2du56fd","area":"u534eu5317", "region":"u5317u4eacu5e02","city":"u5317u4eacu5e02","county":"","isp":"u7535u4fe1", "country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000", "county_id":"-1","isp_id":"100017"}} |
其中code的值的含义为,0:成功,1:失败。
.htaccess 通用版伪静态规则 其它规则请参考下面的进行修改
代码如下 | 复制代码 |
RewriteEngine on RewriteRule ^(.*)$ index.php?id=$1 [L] |
sina SAE专版伪静态配置规则
代码如下 | 复制代码 |
- rewrite: if (!is_dir() && !is_file() && path ~ "/(.*)" ) goto "index.php?$1" |
代码如下 | 复制代码 |
<?php |
-1062731331 3194548645
相关文章
- 有一种方法,可以不打开网站而直接查看到这个网站的源代码.. 这样可以有效地防止误入恶意网站... 在浏览器地址栏输入: view-source:http://...2016-09-20
- <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
- 本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
- php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p> </p> <p> </p> <form name="form1...2016-11-25
- 公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
- 本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
- 1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
- 其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
- 一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
- 微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了JS创建Tag标签的方法,结合具体实例形式分析了javascript动态操作页面HTML元素实现tag标签功能的步骤与相关操作技巧,需要的朋友可以参考下...2017-06-15
- 本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
- 这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
- 关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24