PHP面试(二)

1.防止表单重复提交.

 1)使用JS让按钮在点击一次后禁用(disable)

  优点:防止多次点击发生,实现方式较简单。

  缺点:若客户端禁止JavaScript脚本,则失效。

 2) 在提交成功后执行页面重定向转到提交成功信息页面。

  提示:ThinkPHP中Action类的redirect方法可以实现页面的重定向功能.

  特点:避免F5重复提交,消除浏览器前进和后退按导致的同样问题。

 3)表单隐藏域中存放session(表单被请求时生成的标记)

  原理:接收表单数据后,检查此标志值是否存在,先进行删除,然后处理数据; 若不存在,说明已提交过,忽略本次提交。/*

//服务端生成随机数存入session, 分配至表单页
$data['sess_id'] = $_SESSION['sid'] = mt_rand(1000, 9999);
$this->load->view('form', $data);

//表单页隐藏域存放此session值
<input type="hidden" name="sid" value="<?=$sess_id; ?>">

//处理
if($_POST['sid'] != '' && $_POST['sid'] == $_SESSION['sid'])
{
 unset($_SESSION['sid']);

 echo '处理数据';
}
else
{
 echo '已提交过表单';
}

  4. 数据库唯一索引约束(最有效的防止重复数据的方法.

2.数组合并

扫描二维码关注公众号,回复: 6699686 查看本文章

  1.对于相同的字符串索引,
  array_merge则会用后面的值覆盖前面出现的值;
  +会用前面出现过的值覆盖后面相同的key;
  array_merge_recursive则会把相同的索引放到一个数组里面,增加数组的维度;
  2.对于相同的数字索引,
  array_merge则会给重复的值重建索引(索引值从0开始);
  +仍然是用前面出现过的值覆盖后面的值;
  array_merge_recursive和array_merge的处理方法一样。

  具体参考:https://www.cnblogs.com/lcss/p/7757784.html(赖床四少)。

3.PHP中插入Html的方法

php中添加HTML代码,就是php类型的文件中添加html代码~

第一种是在HTML中加PHP。

大段大段的html代码中,在各个需要执行php的地方<?php .... ?>

比如 line7-9:

 1 <head>
 2     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 3     <meta http-equiv="Content-Language" content="zh-CN" />
 4     <title>Hello World</title>
 5 </head>
 6 <body>
 7     <?php
 8     echo "Hello world!这是正文";
 9     ?>
10 </body>
11 </html>

第二种用echo输出HTML。

因为HTML有的元素中有双引号,所以用echo输出的内容用单引号括起来,避免出错,也省了转义这一步。比如这样的代码:

 1 <?php
 2     if(!$_POST){
 3     echo ‘<form action="" method="post">
 4     服务器地址:<input type="text" name="host" value="localhost" /><br />
 5     数据库账号:<input type="text" name="user" value="" /><br />
 6     数据库密码:<input type="password" name="pwd" value="" /><br />
 7     指定数据库:<input type="text" name="db" value="test" /><br />
 8     <input type="submit" value="确定"/>
 9     </form>‘;
10     }
11 ?>

或者这种加了转义符号的:

1 <?php
2     echo "<input type=\"submit\" value=\"确定\"/>" ;
3 ?>

第三种就是用(<<<)标记符了,这是在PHP168的模板代码中首次见到的。

 1 <?php
 2     print <<<EOT
 3     <div class="slidecont">{$label[deepblue_mainslide]}</div>
 4     <div class="newcontainter">
 5         <div class="head">{$label[deepblue_mainh1]}</div>
 6         <div class="cont" id="Tab1">{$label[deepblue_maint1]}</div>
 7         <div class="cont" id="Tab2">{$label[deepblue_maint2]}</div>
 8     </div>
 9     <a href="$rs[url]" title="$rs[descrip]" target="_blank">$rs[name]</a>
10 EOT; 
11 ?>

“<<<EOT”和“EOT;”中间的文档直接输出,一个比较好理解的说法是“一个多行的echo ”。 
优点是输出大段HTML方便,不需要转义,而且可以引用变量。

但是在使用(<<<EOT) 标记符还有一点需要注意:标识符结束字符串既EOT;要独占一行,前后都不许再有内容,否则这个php文件就相当于废了。

这里的EOT标记可以替换成 任意标记 比如 print <<<END

猜你喜欢

转载自www.cnblogs.com/jizi/p/11117779.html
今日推荐