PHP5与MYSQL5 web开发技术详解 部分摘录

动态生成一组单选按钮

PHP代码
  1. <?php   
  2.   $options = array("010" => "北京",   
  3.                    "020" => "上海",   
  4.                    "024" => "沈阳",   
  5.                    "0411"=> "大连");   
  6.   $default = "024";   
  7.   $html = generate_radio_group("city_id"$options$default);   
  8.   echo $html;   
  9.   function generate_radio_group($name$options$default="") {   
  10.      $name = htmlentities($name);   
  11.      foreach($options as $value => $label) {   
  12.         $value = htmlentities($value);   
  13.         $html .= "<INPUT TYPE=\"RADIO\" ";   
  14.             if ($value == $default){   
  15.                 $html .= "CHECKED ";   
  16.             }   
  17.         $html .= "NAME=\"$name\" VALUE=\"$value\">";   
  18.         $html .= $label . "<br>";   
  19.      }   
  20.   return($html);   
  21. }   
  22. ?>  

该脚本将生成一列单选按钮组,名称为city_id,默认选项为024-“沈阳”。


动态生成多选下拉列表

PHP代码
  1. <?php   
  2.    function generate_checkboxes($name,$options$default=array()) {   
  3.       if (!is_array($default)){   
  4.       $default = array();   
  5.       }   
  6.   
  7.    foreach($options as $value => $label) {   
  8.       $html .= "<input type=checkbox ";   
  9.       if (in_array($value$default)){   
  10.          $html .= "checked ";   
  11.       }   
  12.   
  13.       $html .= "name=\"{$name}[]\" value=\"$value\">";   
  14.       $html .= $label . "<br>";   
  15.    }   
  16.    return($html);   
  17.    }   
  18.   
  19.    $interests = array("音乐" => "音乐",   
  20.                       "电影" => "电影",   
  21.                       "互联网"=> "互联网",   
  22.                       "旅游" => "旅游");   
  23.    $html = generate_checkboxes("interests",$options$interests);   
  24. ?>   
  25.   
  26.   
  27. 选择您的爱好:   
  28.    <form action="interests.php" method=post>   
  29.    <?php echo $html;?>   
  30.    <input type=submit value="继续">   
  31. </form>  

 

防止站外提交

PHP代码
  1. <?php   
  2.    $action = $_SERVER['PHP_SELF'];   
  3.    if ($_SERVER['REQUEST_METHOD'] == 'POST'){   
  4.       $ref = $_SERVER['HTTP_REFERER'];   
  5.       $srv = "http://{$_SERVER['SERVER_NAME']}$action";
  6.       echo "当前来源为:<br><b>$ref</b><br>服务器地址为:<br><b>$srv</b><hr>";   
  7.       if (strcmp($srv$ref) == 0){   
  8.           echo "匹配";   
  9.       }   
  10.       else{   
  11.           echo "不允许站外提交";   
  12.       }   
  13.    }else{   
  14.       echo '请提交表单';}   
  15. ?>   
  16.   
  17. <form action="<?php echo $action;?>" method="post">   
  18. <input type="submit" value="提交"/>   
  19. </form>  

该例中用到的$_SERVER服务器变量有如下几个:
ØHTTP_REFERER  保存一个完整的来源URL地址。
ØSERVER_NAME
当前的服务器名称。

ØPHP_SELF
当前脚本的完整路径,包括文件名。

我们可以通过“http:// <SERVER_NAME>< PHP_SELF > == <HTTP_REFERER>”来比较,如果相同,则是合法的表单提交,否则不予处理

避免表单重复提交

方法一,客户端,提交后屏蔽按钮方法三,使用cookie

XML/HTML代码
  1. <form method="post" name="register" action="test.php" enctype="multipart/form-data">    
  2.    <input name="text" type="text" id="text" />  
  3.    <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();">    
  4. </form>  

方法二,客户端,js

XML/HTML代码
  1. <script language="javascript">  
  2. <!--   
  3.    var submitcount=0;   
  4.    function submitOnce (form){   
  5.       if (submitcount == 0){   
  6.          submitcount++;   
  7.          return true;   
  8.       } else{   
  9.          alert("正在操作,请不要重复提交,谢谢!");   
  10.          return false;   
  11.       }   
  12.    }   
  13. //-->  
  14. </script>  
  15.   
  16. <form name="the_form" method="post" action="" >    
  17.    <input name="text" type="text" id="text" />  
  18.    <input name="cont" value="提交" type="submit">    
  19. </form>  

 

PHP代码
  1. <?php   
  2.    if(isset($_POST['go'])){   
  3.      setcookie("tempcookie","",time()+30);   
  4.      header("Location:".$_SERVER[PHP_SELF]);   
  5.      exit();   
  6.    }   
  7.    if(isset($_COOKIE["tempcookie"])){   
  8.      setcookie("tempcookie","",0);   
  9.      echo "您已经提交过表单";   
  10.    }   
  11. ?>  

方法四,使用session

PHP代码
  1. <?php   
  2.    session_start();   
  3.    //根据当前SESSION生成随机数   
  4.    $code = mt_rand(0,1000000);   
  5.    $_SESSION['code'] = $code;   
  6. ?>  

在页面表单上将随机数作为隐藏值进行传递,代码如下:

<input type="hidden" name="originator" value="<?=$code?>">

在接收页面的PHP代码如下:

PHP代码
  1. <?php   
  2.    session_start();   
  3.    if(isset($_POST['originator'])) {   
  4.    if($_POST['originator'] == $_SESSION['code']){   
  5.       // 处理该表单的语句,省略   
  6.    }else{   
  7.       echo ‘请不要刷新本页面或重复提交表单!’;   
  8.    }   
  9. }   
  10. ?>  

方法五,使用header转向

PHP代码
  1. if (isset($_POST['action']) && $_POST['action'] == 'submitted') {   
  2.    //处理数据,如插入数据后,立即转向到其他页面   
  3.    header('location:submits_success.php');   
  4. }  

« 上一篇 | 下一篇 »

Trackbacks

点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5

发表评论

评论内容 (必填):