php生成验证码

 更新时间:2016年11月25日 17:35  点击:1681

本站原创转载请注明来处

<?php


session_start();


header("content-type:image/png");设置生成图片的格式这里为png


$width=40;//宽度


$height=25;//高度


$color="#ffffff";//色彩


$num=rand(1000,9999);//生成随机数4位


$_SESSION['ver']=$num;保存到session以前验证


$img=imagecreate($width,$height);//使用imagecreate创建图片


$bg1=imagecolorallocate($img,rand(0,100),rand(0,250),rand(0,255));//图片色采


$bg2=imagecolorallocate($img,rand(0,205),rand(0,250),rand(0,245));


//imageline($img,40,20,40,40,$color);


//imagesetpixel($img,44,44,$color);


imagestring($img,7,4,7,$num,$bg2);//增加杂点


imagepng($img);//生成图片


imagedestroy($img);//销毁


?>

这个是很简单的,所以就不详细的讲说了.

 

模板其实就是php和html的分离,有人也说mvc啥的。
php处理程序,把动态内容保存到变量里面,然后通过模板输出这些变量的内容,这就是模板
你可以
$rows = $db->getAll($sql);
require "tpl.html";
来输出。
你也可以
$tpl->setVar("rows",$rows);
$tpl->display("tpl.html");
来输出,总之他是输出变量里面的内容。

我感觉模板应该有下面的特征
1,就是html页面
2,即见即得
3,书写简化,容易扩展。(这一点非常重要,其实就是换个简单的书写形式)
smarty自定义函数还有什么的,还有其他模板也有类似功能。比如{article.addtime:date:Y-m-d} {article.content:nl2br:}
如果能做到上面的三点,我感觉就是一个很好的模板。
很多人说直接用php来做html模板,我比较反对这种形式
1,php代码看不到。
2,书写太繁,太麻烦。
如果看起来麻烦,书写也麻烦,我拿模板来干什么,做花瓶?

discuz的模板就是一个不错的模板,可惜2,3两点他做得不太好,我自己也做个模板。到现在也一直用,差什么就加什么,对我来说他就是一个好的模板。
1,就是html页面
2,即见即得,你看到的什么样子,输出就是什么样子。不像很多人去搞个href="$cssPath/css.css"这样去搞个,div+css的页面这种模板美工改起来肯定没少吃苦。
3,书写简化   其实就是函数的简写。就如上面的,比如发布时间需要格式化可以任意改,比如内容要吧回车变成换行,比如要把内容弄到一个编辑器。{content:htmleditor:},比如。。。。,他就是一个简写,这样做起来什么事情都事倍功半。还记得那个页面的调用吧?比如最新产品显示8个,最新。。。显示10个。(很多所谓的cms采用标签)
其实说白了就是一个foreach,传入参数返回一个二维数组。
于是就有了
<!--{loop NewProduct:sortid=1;limit=8 $product}-->
{product.productname:cut:20} ....
<!---{/loop}-->
有一天客户要求变了,要调用精华产品,于是
<!--{loop NewProduct:sortid=1;limit=8 $product}-->
变成了
<!--{loop NewProduct:sortid=1;digest=1;limit=8 $product}-->
我感觉这就是简化,美工只要明白,这里应该是循环就行了,到现在和我合作的美工还没有一个不会改我的模板的,虽然他不懂程序。
4,模板吧,你要追求速度,缓存吧。
缓存真的有用吗?俺为啥要缓存?
很多人说设置下缓存时间,html缓存就行了,这个能叫缓存么?如果是动态网页,上面写的
欢迎你,{username},你还能把他缓存了?你说不缓存吧,下面的调用又太多,咋办捏?
这时候就要用到局部缓存,什么叫局部缓存,就是缓存页面的也部分。
其实说白了也就是那些调用。
<!--{loop NewProduct:sortid=1;limit=8 $product}-->
这种地方的调用,如果首页显示20个分类的最新5篇文章,那打开页面,光这些文章调用就要20次查询。局部缓存吧
<!--{#loop NewProduct:sortid=1;limit=8 $product}-->
loop我加一个#就让他缓存了。
我加20个#,首页的调用就没数据库查询了,好像有的地方必须每次都调用最新的,咋办呢,把#去掉吧。

模板就是模板,虽然只负责显示,不一定就不重要,如果让模板变得简单倒是我们应该考虑的问题。

<?php
function ubbcode($str){
 //$str = str_replace("file:","file :",$str);
 //$str = str_replace("files:","files :",$str);
 //$str = str_replace("script:","script :",$str);
 //$str = str_replace("js:","js :",$str);
   
 //图片UBB
 $str = preg_replace("/\[img\](http|https|ftp):\/\/(.[^\[]*)\[\/img\]/i", "<a onfocus=\"this.blur()\" href=\"\${1}://\${2}\" target=new><img src=\"\${1}://\${2}\" border=\"0\" alt=\"按此在新窗口浏览图片\" onload=\"javascript:if(this.width>300)this.width=300\"></a>", $str);
 $str = preg_replace("/\[img=*([0-9]*),*([0-9]*)\](http|https|ftp):\/\/(.[^\[]*)\[\/img\]/i", "<a onfocus=\"this.blur()\" href=\"\${3}://\${4}\" target=new><img src=\"\${3}://\${4}\" border=\"0\"  width=\"\${1}\" heigh=\"\${2}\" alt=\"按此在新窗口浏览图片\" onload=\"javascript:if(this.width>300)this.width=300\"></a>", $str);
 
 $str = preg_replace("/(\[img\])images\/face\/em(.*?)\.gif(\[\/img\])/i", "<img src=\"images/face/em\${2}.gif\" />", $str);
 //链接UBB
 $str = preg_replace("/(\[url\])(.[^\[]*)(\[url\])/i", "<a href=\"\${2}\" target=\"new\">\${1}</a>", $str);
 $str = preg_replace("/\[url=(.[^\[]*)\]/i", "<a href=\"\${1}\" target=\"new\">", $str);
 //邮箱UBB
 $str = preg_replace("/(\[email\])(.*?)(\[\/email\])/i", "<img align=\"absmiddle\" \"src=image/email1.gif\"><a href=\"
mailto:\${2}\">\${2}</a>", $str);
 $str = preg_replace("/\[email=(.[^\[]*)\]/i", "<img align=\"absmiddle\" src=\"image/email1.gif\"><a href=\"
mailto:\${1}\" target=\"new\">", $str);
 //QQ号码UBB
 $str = preg_replace("/\[qq=([0-9]*)\]([0-9]*)\[\/qq\]/i", "<a target=\"new\" href=\"tencent://message/?uin=\${2}&Site=www.52515.net&Menu=yes\"><img border=\"0\" src=\"
http://wpa.qq.com/pa?p=1:\${2}:\${1}\" alt=\"点击这里给我发消息\"></a>", $str);
 //颜色UBB
 $str = preg_replace("/\[color=(.[^\[]*)\]/i", "<font color=\"\${1}\">", $str);
 //文字字体UBB
 $str = preg_replace("/\[font=(.[^\[]*)\]/i", "<font face=\"\${1}\">", $str);
 //文字大小UBB
 $str = preg_replace("/\[size=([0-9]*)\]/i", "<font size=\"\${1}\">", $str);
 $str = preg_replace("/\[size=([0-9]*)pt\]/i", "<font size=\"\${1}\">", $str);
 $str = preg_replace("/\[size=([0-9]*)px\]/i", "<font size=\"\${1}\">", $str);
 //文字对齐方式UBB
 $str = preg_replace("/\[align=(center|left|right)\]/i", "<div align=\"\${1}\">", $str);
 //表格UBB
 //$str = preg_replace("/\[table=(.[^\[]*)\]/i", "<table width=\"\${1}\" border=\"1\" style=\"border-collapse:collapse\">", $str);
 //表格UBB2
 //$str = preg_replace("/\[td=([0-9]*),([0-9]*),([0-9]*)\]/i", "<td colspan=\"\${1}\" rowspan=\"\${2}\" width=\"\${3}\">", $str);
 //字体倾斜
 $str = preg_replace("/\[i\]((.|\n)*?)\[\/i\]/i", "<i>\${1}</i>", $str);
 //FLASH动画UBB
 $str = preg_replace("/(\[flash\])(http:\/\/.[^\[]*(.swf))(\[\/flash\])/i", "<a href=\"\${2}\" target=\"new\"><img src=\"image/swf.gif\" border=\"0\" alt=\"点击开新窗口欣赏该flash动画!\" height=\"16\" width=\"16\">[全屏欣赏]</a><br><center><object codebase=\"
http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0\" classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" width=\"300\" height=\"200\"><param name=\"movie\" value=\"\${2}\"><param name=\"quality\" value=\"high\"><embed src=\"\${2}\" quality=\"high\" pluginspage=\"http://www.macromedia.com/shockwave/download/index.cgi?p1_prod_version=shockwaveflash\" type=\"application/x-shockwave-flash\" width=\"300\" height=\"200\">\${2}</embed></object></center>", $str);
 $str = preg_replace("/(\[flash=*([0-9]*),*([0-9]*)\])(http:\/\/.[^\[]*(.swf))(\[\/flash\])/i", "<a href=\"\${4}\" target=\"new\"><img src=\"image/swf.gif\" border=\"0\" alt=\"点击开新窗口欣赏该flash动画!\" height=\"16\" width=\"16\">[全屏欣赏]</a><br><center><object codebase=\"
http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0\" classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" width=\"\${2}\" height=\"\${3}\"><param name=\"movie\" value=\"\${4}\"><param name=quality value=high><embed src=\"\${4}\" quality=\"high\" pluginspage=\"http://www.macromedia.com/shockwave/download/index.cgi?p1_prod_version=shockwaveflash\" type=\"application/x-shockwave-flash\" width=\"\${2}\" height=\"\${3}\">\${4}</embed></object></center>", $str);
   
 //MEDIA PLAY播放UBB
 $str = preg_replace("/\[wmv\](.[^\[]*)\[\/wmv]/i", "<object align=\"middle\" classid=\"clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95\" class=\"object\" id=\"mediaplayer\" width=\"300\" height=\"200\" ><param name=\"showstatusbar\" value=\"-1\"><param name=\"filename\" value=\"\${1}\"><embed type=\"application/x-oleobject\" codebase=\"
http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#version=5,1,52,701\" flename=\"mp\" src=\"\${1}\"  width=\"300\" height=\"200\"></embed></object>", $str);
 $str = preg_replace("/\[wmv=*([0-9]*),*([0-9]*)\](.[^\[]*)\[\/wmv]/i", "<object align=\"middle\" classid=\"clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95\" class=\"object\" id=\"mediaplayer\" width=\"\${1}\" height=\"\${2}\" ><param name=\"showstatusbar\" value=\"-1\"><param name=\"filename\" value=\"\${3}\"><embed type=\"application/x-oleobject\" codebase=\"
http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#version=5,1,52,701\" flename=\"mp\" src=\"\${3}\"  width=\"\${1}\" height=\"\${2}\"></embed></object>", $str);
   
 //REALPLAY 播放UBB
 $str = preg_replace("/\[rm\](.[^\[]*)\[\/rm]/i", "<object classid=\"clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa\" class=\"object\" id=\"raocx\" width=\"300\" height=\"200\"><param name=\"src\" value=\"\${1}\"><param name=\"console\" value=\"clip1\"><param name=\"controls\" value=\"imagewindow\"><param name=\"autostart\" value=\"true\"></object><br><object classid=\"clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa\" height=\"32\" id=\"video2\" width=\"300\"><param name=\"src\" value=\"\${1}\"><param name=\"autostart\" value=\"-1\"><param name=\"controls\" value=\"controlpanel\"><param name=\"console\" value=\"clip1\"></object>", $str);
 $str = preg_replace("/\[rm=*([0-9]*),*([0-9]*)\](.[^\[]*)\[\/rm]/i", "<object classid=\"clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa\" class=\"object\" id=\"raocx\" width=\"\${1}\" height=\"\${2}\"><param name=\"src\" value=\"\${3}\"><param name=\"console\" value=\"clip1\"><param name=\"controls\" value=\"imagewindow\"><param name=\"autostart\" value=\"true\"></object><br><object classid=\"clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa\" height=\"32\" id=\"video2\" width=\"\${1}\"><param name=\"src\" value=\"\${3}\"><param name=\"autostart\" value=\"-1\"><param name=\"controls\" value=\"controlpanel\"><param name=\"console\" value=\"clip1\"></object>", $str);
    $str = str_replace("\r\n", "<BR/>", $str);
 $str = preg_replace("/\[rm=*([0-9]*),*([0-9]*)\](.[^\[]*)\[\/rm]/i", "<object classid=\"clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa\" class=\"object\" id=\"raocx\" width=\"\${1}\" height=\"\${2}\"><param name=\"src\" value=\"\${3}\"><param name=\"console\" value=\"clip1\"><param name=\"controls\" value=\"imagewindow\"><param name=\"autostart\" value=\"true\"></object><br><object classid=\"clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa\" height=\"32\" id=\"video2\" width=\"\${1}\"><param name=\"src\" value=\"\${3}\"><param name=\"autostart\" value=\"-1\"><param name=\"controls\" value=\"controlpanel\"><param name=\"console\" value=\"clip1\"></object>", $str);
/*
 re.pattern="\[code\]((.|\n)*?)\[\/code\]"
 Set tempcodes=re.Execute($str)
 For i=0 To tempcodes.count-1
   re.pattern="<BR/>"
   tempcode=Replace(tempcodes(i),"<BR/>",vbcrlf)
   $str=replace($str,tempcodes(i),tempcode)
 next
*/
    $searcharray = array("[/url]","[/email]","[/color]", "[/size]", "[/font]", "[/align]", "[b]", "[/b]","[u]", "[/u]", "[list]", "[list=1]", "[list=a]","[list=A]", "[*]", "[/list]", "[indent]", "[/indent]","[ DISCUZ_CODE_0 ]","[quote]","[/quote]","[tr]","[td]","[/td]","[/tr]","[/table]");
 $replacearray= array("</a>","</a>","</font>", "</font>", "</font>", "</div>", "<b>", "</b>","<u>", "</u>", "<ul>", "<ol type=1>", "<ol type=a>","<ol type=A>", "<li>", "</ul></ol>", "<blockquote>", "</blockquote>","<div><textarea name=\"codes\" id=\"codes\" rows=\"12\" cols=\"65\">","</textarea><br/><input type=\"button\" value=\"运行代码\" onclick=\"RunCode()\"> <input type=\"button\" value=\"复制代码\" onclick=\"CopyCode()\"> <input type=\"button\" value=\"另存代码\" onclick=\"SaveCode()\"> <input type=\"button\" value=\"跳&nbsp;&nbsp;转\" onclick=\"Goto(prompt('请输入要跳转到第几行?','1'))\"  accesskey=\"g\"> &nbsp;提示:您可以先修改部分代码再运行</div>","<div style=\"background:#E2F2FF;width:90%;height:auto;border:1px solid #3CAAEC;padding:5px;\">","</div>","<tr>","<td>","</td>","</tr>","</table>");
 for ($i=0; $i<count($searcharray); $i++){
  $str = str_replace($searcharray[$i], $replacearray[$i], $str);
 }
 return $str;
}
/*
 're.Pattern="\[UPLOAD=(gif|jpg|jpeg|bmp)\](.[^\[]*)(gif|jpg|jpeg|bmp)\[\/UPLOAD\]"
 '$str= re.Replace($str,"<br><IMG SRC=\"image/$1.gif\" border=0>此主题相关链接如下:<br><A HREF=\"$2$1\" TARGET=_blank><IMG SRC=\"$2$1\" border=0 alt=按此在新窗口浏览图片 onload=\"javascript:if(this.width>screen.width-333)this.width=screen.width-333\"></A>")
 're.Pattern="\[UPLOAD=(doc|xls|ppt|htm|swf|rar|zip|exe)\](.[^\[]*)(doc|xls|ppt|htm|swf|rar|zip|exe)\[\/UPLOAD\]"
 '$str= re.Replace($str,"<br><IMG SRC=\"image/$1.gif\" border=0>此主题相关链接如下:<br><a href=\"$2$1\" target='_blank'>点击浏览该文件</a>")
 '自动识别网址
 're.Pattern = "^((http|https|ftp|rtsp|mms):(\/\/|\\\\)[A-Za-z0-9\./=\?%\-&_~`@[\]\':+!]+)"
 '$str = re.Replace($str,"<img align=absmiddle src=image/url.gif border=0><a target=_blank href=$1>$1</a>")
 're.Pattern = "((http|https|ftp|rtsp|mms):(\/\/|\\\\)[A-Za-z0-9\./=\?%\-&_~`@[\]\':+!]+)$"
 '$str = re.Replace($str,"<img align=absmiddle src=image/url.gif border=0><a target=_blank href=$1>$1</a>")
 're.Pattern = "([^>=\"])((http|https|ftp|rtsp|mms):(\/\/|\\\\)[A-Za-z0-9\./=\?%\-&_~`@[\]\':+!]+)"
 '$str = re.Replace($str,"$1<img align=absmiddle src=image/url.gif border=0><a target=_blank href=$2>$2</a>")
 '自动识别www等开头的网址
 're.Pattern = "([^(
http://|http:\\)])((www|cn)[.](\w)+[.]{1,}(net|com|cn|org|cc)(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\&](\w)+[\=](\w)+)*)*)"
 '$str = re.Replace($str,"<img align=absmiddle src=image/url.gif border=0><a target=_blank href=http://$2>$2</a>")
 're.Pattern="\[SHADOW=*([0-9]*),*(#*[a-z0-9]*),*([0-9]*)\](.[^\[]*)\[\/SHADOW]"
 '$str=re.Replace($str,"<div style=\"width:$1;filter:shadow(color=$2, strength=$3)\">$4</div>")
 're.Pattern="\[GLOW=*([0-9]*),*(#*[a-z0-9]*),*([0-9]*)\](.[^\[]*)\[\/GLOW]"
 '$str=re.Replace($str,"<div style=\"width:$1;filter:glow(color=$2, strength=$3)\">$4</div>")
*/
?>


多文件上传是PHP中一基础应用,在此把相关知识向大家详细介绍一下,本人水平有限,还请多提意见。大家一起进步。
        上传文件HTML的输入标签FILE类型中的名称后要加[],作用是在HTML中向PHP建立数组,比如名称为pictures,多文件引用名称则为pictures[],实例如下:
复制内容到剪贴板


<form action="upload.php" method="post" enctype="multipart/form-data">
<p>
<input type="file" name="pictures[]" /><br />
<input type="file" name="pictures[]" /><br />
<input type="file" name="pictures[]" /><br />
<input type="submit" value="上传" />
</p>
</form> //手册中实例。
利用HTML文件建立数组的方法手册中是这样讲解的:

        要使你的 <form> 结果被当成 array 发送到 PHP 脚本,要对 <input>,<select> 或者 <textarea> 单元这样命名:
           <input name="MyArray[]" />
           <input name="MyArray[]" />
           <input name="MyArray[]" />
           <input name="MyArray[]" />
        注意变量名后的方括号,这使其成为一个数组。


        可以通过给不同的单元分配相同的名字来把单元分组到不同的数组里:
           <input name="MyArray[]" />
           <input name="MyArray[]" />
           <input name="MyOtherArray[]" />
           <input name="MyOtherArray[]" />
        这将产生两个数组,MyArray 和 MyOtherArray,并发送给 PHP 脚本。


        还可以给数组分配指定的键名:
           <input name="AnotherArray[]" />
           <input name="AnotherArray[]" />
           <input name="AnotherArray[email]" />
           <input name="AnotherArray[phone]" />
        AnotherArray 数组将包含键名 0,1,email 和 phone。

        注意: 指定数组的键名是 HTML 的可选项。如果不指定键名,则数组被按照单元在表单中出现的顺序填充。第一个例子将包含键名 0,1,2,3。


        以上HTML点击上传后,通过$_FILES超级全局变量进行读取,$_FILES将会把HTTP POST 方法传递上来的文件信息组合成数组,一个文件数组形式为二维。二个以上文件数组形式为三维。


   $_FILES的使用方法:
$_FILES['userfile']['name']
客户端机器文件的原名称。
$_FILES['userfile']['type'] 文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
$_FILES['userfile']['size'] 已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error']


        下面是一个文件上传,此文件上传后$_FILES数组内将会产生其信息,因为是一个文件所以是二维的,为了便于大家理解我们将$_FILES用PRINT_R输出查看其结构。

HTML文件:



<form action="upload.php" method="post" enctype="multipart/form-data">
<p>
<input type="file" name="pictures" /><br />
<input type="submit" value="上传" />
</p>
</form>
PHP接收文件:


         
<?php
print_r($_FILES);
?>
将其令存为UPLOAD.PHP,运行上面的HTML选择一个文件上传,比如文件名为Thumbs.db,在IE浏览器内单击“查看”,“源代码”。显示如下:
Array
(
    [pictures] => Array
        (
            [name] => Thumbs.db                                                       //原文件名
            [type] => application/octet-stream                                     //文件类型
            [tmp_name] => D:EasyPHP\tmpphp64.tmp                    //临时存储目录及文件名
            [error] => 0                                                                       //错误代码 0为上传成功
            [size] => 23040                                                                 //文件大小
        )
)根据此信息,结合上面$_FILES的使用方法,大家应该能理解的更深刻一些。


下面看一下多文件上传,三个文件名分别为FILE1.TXT,FILE2.TXT,FILE3.TXT,然后用PRINT_R输出查看其结构:

HTML文件代码:



<form action="upload.php" method="post" enctype="multipart/form-data">
<p>
<input type="file" name="pictures[]" /><br />
<input type="file" name="pictures[]" /><br />
<input type="file" name="pictures[]" /><br />
<input type="submit" value="上传" />
</p>
</form>
PHP接收文件代码:


         
<?php
print_r($_FILES);
?>
查看源文件:

Array
(
    [pictures] => Array
        (
            [name] => Array
                (
                    [0] => file1.txt
                    [1] => file2.txt
                    [2] => file3.txt
                )
            [type] => Array
                (
                    [0] => application/octet-stream
                    [1] => application/octet-stream
                    [2] => application/octet-stream
                )
            [tmp_name] => Array
                (
                    [0] => D:EasyPHP\tmpphp47.tmp
                    [1] => D:EasyPHP\tmpphp48.tmp
                    [2] => D:EasyPHP\tmpphp49.tmp
                )
            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                )
            [size] => Array
                (
                    [0] => 94289
                    [1] => 65536
                    [2] => 102400
                )
        )
)
        假设名为 /file1.txt  和 /file2.txt 的文件被提交,则 $_FILES['pictures']['name'][0] 的值将是 file1.txt,而 $_FILES['pictures']['name'][1] 的值将是 file2.txt。类似的,$_FILES['file2.txt']['size'][0] 将包含文件 file1.txt 的大小,依此类推。

很简单的   

  1.先把  <script language="JavaScript" src="../include/js/regions.js"></script>
加到 header.html 页
  2.把 regionss() 函数 加到 /include/tag.php 里
  3.在你网站的根目录建立个  regions.php 文件
  4.在你的模板的适当的地方加入   {$regionss(中华人民共和国)}   即可  

注意:  表单的名字可根据你的需要可以自己修改...


测试页代码:
<html>
<head>
<meta http-equiv="Content-Type" c />
<title>php+ajax动态生成下拉菜单</title>
<script language="JavaScript" src="../include/js/regions.js"></script>
</head>
<body>
<form name="form1" method="post" action="">
<tr><td>{$regionss(中华人民共和国)}</td></tr>
</form>
</body>
</html>

regionss 函数代码:
//省市地3级联动下拉菜单函数 regionss 省.市.地  
function regionss($country="中华人民共和国")
{      
        global $db; $i = 1;
        $text="<select id=\"select1\" name=\"select1\" onchange=\"startRequest()\" style=\"width:90px;\"><option value=\"\">省/市/自治区</option>\n";
      
        $result = $db->query("SELECT province FROM ".TABLE_PROVINCE." WHERE country='$country' ORDER BY provinceid");
        while($r = $db->fetch_array($result))
         {
  $text .= "<option value=".$r['province'].">".$r['province']."</option> ";
  $i++;
         }
        $text.="</select>";
        $text.=" <select id=\"select2\" name=\"select2\" onchange=\"startRequesta()\" style=\"width:90px;\"><option value=\"\">市/县/区</option></select>\n";
        $text.="<select id=\"select3\" name=\"select3\" style=\"width:90px;\"><option value=\"\">县级市/县</option></select>\n";   
        return $text;
                        
}

regions.js 的代码:

//var ab = new Array();
var xmlHttp;
var xmlHttpa;
function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }  
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}
function createXMLHttpRequesta() {
    if (window.ActiveXObject) {
        xmlHttpa = new ActiveXObject("Microsoft.XMLHTTP");
    }  
    else if (window.XMLHttpRequest) {
        xmlHttpa = new XMLHttpRequest();
    }
}  
   
function startRequest() {
    createXMLHttpRequest();
    createXMLHttpRequesta();
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttpa.onreadystatechange = handleStateChangearea;
    document.getElementById('select2').options.length = 0;
    document.getElementById('select3').options.length = 0;
    var url = document.form1.select1.value;
    var qurl = "/regions.php?province="+url+"&time="+new Date().getTime();
    xmlHttp.open("GET", qurl, true);
    xmlHttp.send(null);
    //setTimeout("startRequest()",2000);
}
     
function handleStateChange() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
         var obj = document.getElementById('select2'); //将服务器返回的字符串写到页面中ID为select2的区域   
            obja = document.getElementById('select3'); //将服务器返回的字符串写到页面中ID为select3的区域   
            eval(xmlHttp.responseText);   
        
        }
    }
}
function handleStateChangearea() {         
            eval(xmlHttpa.responseText);         
}
//var ab = new Array();

function startRequesta() {
    createXMLHttpRequesta();
    xmlHttpa.onreadystatechange = handleStateChangea;
    document.getElementById('select3').options.length = 0;
    var url = document.form1.select2.value;
    var qurl = "/regions.php?city="+url+"&time="+new Date().getTime();
    xmlHttpa.open("GET", qurl, true);
    xmlHttpa.send(null);
    //setTimeout("startRequest()",2000);
}

function handleStateChangea() {
    if(xmlHttpa.readyState == 4) {
        if(xmlHttpa.status == 200) {
         var obja = document.getElementById('select3');
            eval(xmlHttpa.responseText);  
        //将服务器返回的字符串写到页面中ID为select3的区域
            
        }
    }
}

数据岛 regions.php 页面代码

<?php
require "common.php";
$city = $city ? $city : "";
$area = $area ? $area : "";
if($province && $city==''){
  global $db; $i = 1;
  
  $result = $db->query("SELECT DISTINCT city FROM ".TABLE_CITY." WHERE province='$province' ORDER BY cityid");
  while($r = $db->fetch_array($result))
    {
       $r[city]=iconv('gb2312','UTF-8',$r[city]);
echo "obj.options[obj.options.length] = new Option('".$r[city]."','".$r[city]."');\n";
$i++;
    }
  $resultarea = $db->query("SELECT DISTINCT city FROM ".TABLE_CITY." WHERE province='$province' ORDER BY cityid");
  $r = $db->fetch_array($resultarea);
  $city = $r[city];
  $resulta = $db->query("SELECT DISTINCT area FROM ".TABLE_CITY." WHERE city='$city' ORDER BY cityid");
   while($ra = $db->fetch_array($resulta))
    {
       $ra[area]=iconv('gb2312','UTF-8',$ra[area]);
echo "obja.options[obja.options.length] = new Option('".$ra[area]."','".$ra[area]."');\n";
$i++;
    }


}
if($city && $province==''){
   global $db; $i = 1;
  
   $result = $db->query("SELECT DISTINCT area FROM ".TABLE_CITY." WHERE city='$city' ORDER BY cityid");
   while($r = $db->fetch_array($result))
    {
       $r[area]=iconv('gb2312','UTF-8',$r[area]);
echo "obja.options[obja.options.length] = new Option('".$r[area]."','".$r[area]."');\n";
$i++;
    }
}
?>

地址信息数据库:

     采用的是phpcms3.0里自带的数据库,我没有进行任何改动

本程序可以在phpcms3.0里直接使用,若在其他地方使用请自己修改

[!--infotagslink--]

相关文章

  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • jQuery Real Person验证码插件防止表单自动提交

    本文介绍的jQuery插件有点特殊,防自动提交表单的验证工具,就是我们经常用到的验证码工具,先给大家看看效果。效果图如下: 使用说明 需要使用jQuery库文件和Real Person库文件 同时需要自定义验证码显示的CSS样式 使用实例...2015-11-08
  • JS实现随机生成验证码

    这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
  • php二维码生成

    本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
  • Java生成随机姓名、性别和年龄的实现示例

    这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
  • C#生成随机数功能示例

    这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • jQuery为动态生成的select元素添加事件的方法

    下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
  • Jquery插件实现点击获取验证码后60秒内禁止重新获取

    通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能效果图:先到官网(http://plugins.jquery.com/cookie/)下载cookie插件,放到相应文件夹,代码如下:复制代码 代码如下: <!DOCTYPE ht...2015-03-15
  • php生成唯一数字id的方法汇总

    关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
  • PHP自动生成后台导航网址的最佳方法

    经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
  • php实现点击可刷新验证码

    验证码类文件 CreateImg.class.php <&#63;php class ValidationCode { private $width,$height,$codenum; public $checkcode; //产生的验证码 private $checkimage; //验证码图片 private $disturbColor = ''; /...2015-11-08
  • 基于JavaScript实现验证码功能

    这篇文章主要介绍了基于JavaScript实现验证码功能的相关资料...2017-04-03
  • js生成随机数的方法实例

    js生成随机数主要用到了内置的Math对象的random()方法。用法如:Math.random()。它返回的是一个 0 ~ 1 之间的随机数。有了这么一个方法,那生成任意随机数就好理解了。比如实际中我们可能会有如下的需要: (1)生成一个 0 - 1...2015-10-21
  • 单击按钮发送验证码,出现倒计时的简单实例

    下面小编就为大家带来一篇单击按钮发送验证码,出现倒计时的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 代码...2017-07-06
  • Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法

    这篇文章主要介绍了Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-06-24
  • PHP验证码生成与验证例子

    验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
  • PHP生成不同颜色、不同大小的tag标签函数

    复制代码 代码如下:function getTagStyle(){ $minFontSize=8; //最小字体大小,可根据需要自行更改 $maxFontSize=18; //最大字体大小,可根据需要自行更改 return 'font-size:'.($minFontSize+lcg_value()*(abs($maxFo...2013-10-04
  • 基于Pytorch版yolov5的滑块验证码破解思路详解

    这篇文章主要介绍了基于Pytorch版yolov5的滑块验证码破解思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-25
  • jQuery实现发送验证码控制按钮禁用功能

    最近接到新需求,需要实现一个点击发送验证码之后,按钮禁用,在5秒之后取消禁用,看似需求很简单,实现起来还真的好好动动脑筋,下面小编把jquery控制按钮禁用核心代码分享给大家,需要的朋友参考下吧...2021-07-24
  • 工信部的ICP备案网站登录时验证码一直输入不正确怎么回事

    工信部的ICP备案网站登录时验证码一直输入不正确怎么回事,为了防止一些机器采集人工信部对于查询验证做得识别度极低,所以许多的朋友都会发现输入验证码一直有问题了,那...2016-10-10