动态生成一组单选按钮
PHP代码
- <?php
- $options = array("010" => "北京",
- "020" => "上海",
- "024" => "沈阳",
- "0411"=> "大连");
- $default = "024";
- $html = generate_radio_group("city_id", $options, $default);
- echo $html;
- function generate_radio_group($name, $options, $default="") {
- $name = htmlentities($name);
- foreach($options as $value => $label) {
- $value = htmlentities($value);
- $html .= "<INPUT TYPE=\"RADIO\" ";
- if ($value == $default){
- $html .= "CHECKED ";
- }
- $html .= "NAME=\"$name\" VALUE=\"$value\">";
- $html .= $label . "<br>";
- }
- return($html);
- }
- ?>
该脚本将生成一列单选按钮组,名称为city_id,默认选项为024-“沈阳”。
动态生成多选下拉列表
PHP代码
- <?php
- function generate_checkboxes($name,$options, $default=array()) {
- if (!is_array($default)){
- $default = array();
- }
- foreach($options as $value => $label) {
- $html .= "<input type=checkbox ";
- if (in_array($value, $default)){
- $html .= "checked ";
- }
- $html .= "name=\"{$name}[]\" value=\"$value\">";
- $html .= $label . "<br>";
- }
- return($html);
- }
- $interests = array("音乐" => "音乐",
- "电影" => "电影",
- "互联网"=> "互联网",
- "旅游" => "旅游");
- $html = generate_checkboxes("interests",$options, $interests);
- ?>
- 选择您的爱好:
- <form action="interests.php" method=post>
- <?php echo $html;?>
- <input type=submit value="继续">
- </form>
防止站外提交
PHP代码
- <?php
- $action = $_SERVER['PHP_SELF'];
- if ($_SERVER['REQUEST_METHOD'] == 'POST'){
- $ref = $_SERVER['HTTP_REFERER'];
- $srv = "http://{$_SERVER['SERVER_NAME']}$action";
- echo "当前来源为:<br><b>$ref</b><br>服务器地址为:<br><b>$srv</b><hr>";
- if (strcmp($srv, $ref) == 0){
- echo "匹配";
- }
- else{
- echo "不允许站外提交";
- }
- }else{
- echo '请提交表单';}
- ?>
- <form action="<?php echo $action;?>" method="post">
- <input type="submit" value="提交"/>
- </form>
该例中用到的$_SERVER服务器变量有如下几个:
ØHTTP_REFERER 保存一个完整的来源URL地址。
ØSERVER_NAME
当前的服务器名称。
ØPHP_SELF
当前脚本的完整路径,包括文件名。
我们可以通过“http:// <SERVER_NAME>< PHP_SELF > == <HTTP_REFERER>”来比较,如果相同,则是合法的表单提交,否则不予处理
避免表单重复提交
方法一,客户端,提交后屏蔽按钮方法三,使用cookie
XML/HTML代码
- <form method="post" name="register" action="test.php" enctype="multipart/form-data">
- <input name="text" type="text" id="text" />
- <input name="cont" value="提交" type="button" FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">正在提交,请等待...';document.register.cont.disabled=true;document.the_form.submit();">
- </form>
方法二,客户端,js
XML/HTML代码
- <script language="javascript">
- <!--
- var submitcount=0;
- function submitOnce (form){
- if (submitcount == 0){
- submitcount++;
- return true;
- } else{
- alert("正在操作,请不要重复提交,谢谢!");
- return false;
- }
- }
- //-->
- </script>
- <form name="the_form" method="post" action="" >
- <input name="text" type="text" id="text" />
- <input name="cont" value="提交" type="submit">
- </form>
PHP代码
- <?php
- if(isset($_POST['go'])){
- setcookie("tempcookie","",time()+30);
- header("Location:".$_SERVER[PHP_SELF]);
- exit();
- }
- if(isset($_COOKIE["tempcookie"])){
- setcookie("tempcookie","",0);
- echo "您已经提交过表单";
- }
- ?>
方法四,使用session
PHP代码
- <?php
- session_start();
- //根据当前SESSION生成随机数
- $code = mt_rand(0,1000000);
- $_SESSION['code'] = $code;
- ?>
在页面表单上将随机数作为隐藏值进行传递,代码如下:
<input type="hidden" name="originator" value="<?=$code?>">
在接收页面的PHP代码如下:
PHP代码
- <?php
- session_start();
- if(isset($_POST['originator'])) {
- if($_POST['originator'] == $_SESSION['code']){
- // 处理该表单的语句,省略
- }else{
- echo ‘请不要刷新本页面或重复提交表单!’;
- }
- }
- ?>
方法五,使用header转向
PHP代码
- if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
- //处理数据,如插入数据后,立即转向到其他页面
- header('location:submits_success.php');
- }


