前端学习从入门到高级全程记录之39 (PHP基础Ⅱ)

学习目标

本期我们将继续学习php的相关知识,在了解了上一期的PHP的一些基本语法和方法,接下来就是实战做做小例子。如果还不会配置php的运行环境的,可以参考我的上一期内容。如果上一期内容看不懂的,可以在CSDN搜索php配置环境方法。我这里推荐一个写的比较好的:https://blog.csdn.net/qq_36595013/article/details/80560641

注意
如果你的代码输出出现中文乱码,请在<?php后面写入一下代码:header('Content-type: text/html; charset=UTF8');

1 解析文本文件呈现表格案例

经过上期的基础知识学习,本次将运用这些知识,完成一个小例子。

首先,我们需要一个信息的txt文件;

1 | 朱芳 | 18 | b.unyrl@tpwpqt.st | http://XEP.VC
2 | 康丽 | 22 | e.ifmc@fyvutpzio.pro | http://WSURR.PH
3 | 沈平 | 34 | m.vvnjhv@npiqo.tk | http://BGEGFBTEP.KH
4 | 吴平 | 19 | v.rjlo@ljjuit.sc | http://FOQMVET.ST
5 | 邵涛 | 20 | k.pmemrobuq@skt.name | http://JOQQ.TM
6 | 廖磊 | 14 | y.xoxbk@vgdsctz.mz | http://XGDWPM.NET
7 | 文敏 | 12 | o.fwmvfirdm@yfw.mx | http://MUPT.SL
8 | 罗平 | 32 | s.sxohwsf@bpcvf.lk | http://ADEBOQ.BN
9 | 林芳 | 18 | p.vozfcy@ntti.info | http://NQXWELT.LC
10 | 黎超 | 39 | q.decxs@wzotsllfj.cn | http://RFTTUKOK.RW
11 | 于明 | 37 | n.oqxpry@jnc.cl | http://WPEEJDSG.MX
12 | 沈敏 | 25 | h.vyucoiqmnk@itbs.gy | http://PYDWDS.FM
13 | 唐霞 | 34 | p.iwqd@dqqiwqmtjm.kp | http://SKDLMD.DZ
14 | 张芳 | 34 | o.ufprjagx@ucmluvh.cm | http://GUVCWT.AERO
15 | 杨勇 | 40 | m.cetvzsugi@hntqvwjt.lv | http://NGRNYH.DJ
16 | 汪静 | 31 | u.tpry@xgoolb.lb | http://ONTW.PW
17 | 曾丽 | 27 | t.tmlpzccdm@dtksokhzlg.ci | http://EUCECSWSH.MY
18 | 余娜 | 15 | u.ymcbls@xgvidnnw.gp | http://OARGNEYD.CV
19 | 史秀兰 | 33 | k.nlgou@anokn.kg | http://MRGMDVLF.MW
20 | 唐磊 | 17 | d.ezmeqs@rvndkg.sa | http://ZWAV.ID
21 | 邓霞 | 32 | j.vexpc@atijj.cc | http://CUI.VG
22 | 方军 | 30 | t.townlrkq@itqcr.jo | http://JFGD.NL
23 | 易霞 | 28 | w.eptqy@pnuvfvjs.bm | http://EOHKZ.CL
24 | 邹强 | 22 | h.pdqrg@izzn.mo | http://QOJ.TK
25 | 夏丽 | 40 | j.okjkdpe@jvpmnq.tel | http://SGMQ.TK
26 | 赵秀英 | 12 | n.fbmrzzmw@usyiuy.ie | http://KUVFLPTIL.LA
27 | 于秀英 | 11 | u.dsntjcwsnx@ezimc.ee | http://ZSZMRJ.GR
28 | 卢军 | 12 | p.lrlomhuib@veoanlrubu.id | http://DBFQOTTC.FI
29 | 傅勇 | 36 | c.qlhupymkxs@mhne.ch | http://EVHEACI.AM
30 | 梁霞 | 11 | g.anenb@tvbslbjc.om | http://MOHZH.NU
31 | 乔刚 | 23 | u.cnxlvfbec@qqi.mn | http://RQTMP.SK
32 | 常娟 | 13 | n.pgsw@ygfs.mr | http://QGFIX.PK
33 | 汪秀兰 | 30 | l.odjdl@mbry.de | http://RLNTWQTMT.SY
34 | 阎超 | 27 | e.nrsnrg@kwojumaxv.uy | http://SRYGXK.DK
35 | 龙明 | 12 | o.vmmn@dpptq.gw | http://NKVVZYVWP.CH
36 | 顾平 | 28 | n.onb@htrscfsfa.dk | http://FBJBNSKUJ.BV
37 | 乔娟 | 28 | t.wsxhtinh@dwfwabmtj.hn | http://WQOVG.CR
38 | 金静 | 38 | h.nvkteg@pqakll.kr | http://UEFHLDBJ.IL
39 | 易霞 | 30 | g.htcyfvy@torae.lc | http://TLJKRFCRZK.CC
40 | 董秀英 | 38 | k.vcyy@jkigonf.bs | http://WEMVWQU.CZ
41 | 阎娟 | 16 | o.dlzys@wlfdxrxsrc.kh | http://JCDREWTM.BH
42 | 阎军 | 32 | z.gewlapti@ctdeqxk.mz | http://BEXONR.VC
43 | 王娜 | 28 | l.hxekinxel@xxpjfsigj.ve | http://KMTVEFR.CK
44 | 彭娟 | 17 | f.bjddvn@gwgcyidrx.gd | http://OYSXBMN.CH
45 | 钱超 | 28 | h.viffbq@rkdh.sy | http://VPNDQQ.CL
46 | 易明 | 16 | e.iwii@ezvpif.th | http://TTGMHTH.EV
47 | 姚敏 | 33 | q.ykwuqbwu@qssi.de | http://OXSKL.GOV.CN
48 | 林平 | 36 | l.mkvc@qwqwrql.gn | http://SVEMMSQJTP.BS
49 | 邓秀英 | 18 | a.gjkse@ichtl.sr | http://IEZTTDU.JO
50 | 彭磊 | 15 | h.slqxuknah@ksjhht.sc | http://OCIUFDBB.AZ
51 | 何艳 | 25 | t.kvwdtspqn@ocwmzpd.cf | http://ETBFMSSYJ.CL
52 | 陆强 | 14 | n.futv@jxpb.hn | http://WFGISXN.SI
53 | 邱勇 | 38 | p.olmpvzhl@lbruevb.vn | http://NNOZPARES.LA
54 | 陈秀英 | 15 | c.ceihv@utja.sz | http://KMKFSZ.COOP
55 | 武芳 | 17 | v.kifgr@uvktk.in | http://CVCGBVYW.NG
56 | 吕秀兰 | 20 | u.ppm@twwtbqxs.ro | http://BKPHLYBE.VC
57 | 吴芳 | 39 | g.nfnvmlc@wpiuv.bn | http://YIDNJMLLV.AM
58 | 夏霞 | 18 | m.rxvsw@pptgdqh.ms | http://SGWUAR.TV
59 | 魏军 | 32 | p.hsbtleh@huzlxr.tg | http://GDIQIWNP.SZ
60 | 黎磊 | 14 | z.ximeovuv@tffdcqpddi.cr | http://PZHRGMMSJH.RO
61 | 郝平 | 16 | o.igpoukyelk@mbvkgbls.bh | http://LAYCXRQJP.PL
62 | 黄敏 | 15 | q.swzhy@fcsxbwy.my | http://FISBO.AE
63 | 贺涛 | 27 | c.kgmjlbqrpv@dwqg.ru | http://LARREBJI.AI
64 | 袁磊 | 24 | i.lloneposcj@ctjxsa.lv | http://MTJVVKWYZ.RE
65 | 苏静 | 20 | j.sorpwu@ohn.mn | http://QECDXBVY.PM
66 | 薛杰 | 12 | z.jknjfhfw@tqwgee.td | http://LGZKR.SU
67 | 邵敏 | 30 | m.ifpyuw@wmt.edu | http://MHQM.DK
68 | 石平 | 20 | k.xcy@pehjxjzq.bh | http://OEIGOGQ.US
69 | 谢刚 | 28 | b.youo@odj.vc | http://FIJOXQVES.MA
70 | 余娜 | 37 | q.elgjdfg@pqiv.sa | http://HKHEBUI.RO

将以上信息复制到txt文件中,命名为names.txt

创建一个01-list.php文件,敲入以下代码:

<?php
//将文本文件中的内容呈现到一个表格中
//1.读取文件内容  //==>包含文本内容的字符串数据
$contents=file_get_contents("names.txt");
//2.按照一个特定的规则解析文件内容//=>数组
//2.1按照换行拆分
$lines=explode("\n",$contents);
//2.2遍历每一行分别解析每一行中的数据
foreach($lines as $item){
	if(!$item)continue;
	
	$cols=explode('|',$item);
	//$cols=>[]
	$data[]=$cols;
	//$data=>[[],[]]
}
//3.通过混编的方式将数据呈现到表格中
//var_dump($data);
?>
<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>全部人员信息表</title>
</head>
<body>
	<h1>全部人员信息表</h1>
	<table>
		<thead>
			<tr>
				<th>编号</th>
				<th>姓名</th>
				<th>年龄</th>
				<th>邮箱</th>
				<th>网址</th>
			</tr>
		</thead>
		<tbody>
			<?php foreach($data as $line):?>
			<tr>
				<?php foreach($line as $col):?>
				<?php $col=trim($col);?>
				<!-- 判断这里的数据是不是一个网址 -->
				<?php if(strpos($col,'http://')===0):?>
				<td><a href="<?php echo strtolower($col);?>"><?php echo substr($col,7);?></a></td>
				<?php else:?>
				<td><?php echo $col;?></td>
				<?php endif?>
				<?php endforeach?>
			</tr>
			<?php endforeach?>
		</tbody>
	</table>
</body>
</html>

运行效果如图
在这里插入图片描述
如果还不会配置php的运行环境的,可以参考我的上一期内容。如果上一期内容看不懂的,可以在CSDN搜索php配置环境方法。我这里推荐一个写的比较好的:https://blog.csdn.net/qq_36595013/article/details/80560641

2 php中的API结构和php中配置扩展

02-string.php

<?php
//php所有能力都是函数,内置有1000多个函数
$str="hello";
//获取字符串长度
echo strlen($str);
echo '<br>';
// PHP 中专门为 宽字符集 添加了一套 API
// 这一套 API 不在内置的 1000+ 里面,而是在一个模块(php_mbstring.dll)中
// 模块成员必须通过配置文件载入模块过后再使用
// 所有的API 都是 mb_xxxx
echo strlen('你好');
// PHP 中专门为 宽字符集 添加了一套 API
// 这一套 API 不在内置的 1000+ 里面,而是在一个模块(php_mbstring.dll)中
// 模块成员必须通过配置文件载入模块过后再使用
// 所有的API 都是 mb_xxxx
echo '<br>';
echo mb_strlen('你好');


// 配置 PHP 扩展的步骤
//1.将PHP目录中的 php.ini-development 复制一个 修改为 php.ini
//2.修改扩展文件所在目录 extension_dir 
//3.修改文件中的部分选项(; 是注释符)
//4.在 Apache 配置文件中申明一下 php.ini 的所在目录

注意: 如果以上配置都没问题,但是mb_strlen方法没用的话,请在php.ini文件中加入以下代码:

mbstring.language = Chinese
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
mbstring.http_input = UTF-8
mbstring.http_output = UTF-8
mbstring.detect_order = UTF-8
mbstring.substitute_character = none
————————————————
版权声明:本段代码为CSDN博主「leedaning」的原创文章
原文链接:https://blog.csdn.net/leedaning/article/details/49794587

3 数组处理方法(接口)—isset和empty

<?php
//类型:1.索引数组 2.关联数组
//方式:1.array() 2.[](php5.4中使用)

$dict=array(
	'hello'=>'你好',
	'hello1'=>'你好',
	'hello2'=>'你好',
);

//var_dump(array_keys($dict));
//结果为:['hello','hello1','hello2']

//var_dump(array_values($dict));
//结果为:['你好','你好','你好']

//var_dump(array_key_exists('hello',$dict));
//var_dump(array_key_exists('hello4',$dict));//报错

//只有当php.ini中display_errors=On时候,才会在界面上显示notice错误,开发阶段一定设置为On,生产阶段(上线)设置为Off

//isset也可判断数组中是否有指定的键
//这种类似于JavaScript的方式虽然可以达到效果,但是会有警告
// if($dict['foo']){
// 	echo $dict['foo'];
// }else{
// 	echo '没有';
// }
//==>isset会吞掉Undefined index的警告
if(isset($dict['foo'])){
	echo $dict['foo'];
}else{
	echo '没有'//字符串能用单引号就用单引号,这里在强调一下:因为在单引号中,php直接认为它里头包含的就是个字符串。而双引号时,php会检测里头是否包含变量。这样如果是纯粹的字符串的话,双引号免不了浪费一些检测的资源。
}
//不会报警告

//还有一个empty方法,与isset是一样的,但isset用的最多。
// empty($dict['foo']) 相当于 !isset($dict['foo']) || $dict['foo'] == false
if (empty($dict['foo'])) {
  echo '没有';
} else {
  echo $dict['foo'];
}

// empty 的实现
// function empty ($input) {
//   return !isset($input) || $input == false
// }

4 时间和日期函数(注意时区)

<?php
// 1. 通过代码设置时区,更推荐
date_default_timezone_set('PRC');
// 2. 通过配置文件php.ini设置时区
// date.timezone = PRC

//time 获取到的是 秒数为单位的时间戳
 echo time();

 echo '<br>';
// // 格式化一个时间戳
// // 第一个参数是一个时间格式
// // 第二个参数是一个时间戳
// // 默认时间戳获取的就是格林威治时间
echo date('Y-m-d H:i:s', time());

5 时间格式的字符串转时间戳

<?php
header('Content-type: text/html; charset=UTF8');//如果出现乱码使用

// 1. 通过代码设置时区,更推荐
date_default_timezone_set('PRC');
$str = '2020-06-08 21:22:00';
// 对已有时间做格式化
// strtotime 可以用来将一个有格式的时间字符串 转换为一个 时间戳
$timestamp = strtotime($str);

// 注意单引号字符串问题
echo date('Y年m月d日<b\r>H:i:s', $timestamp);
echo '哈哈';

6 常量在php中的使用

<?php
header('Content-type: text/html; charset=UTF8');
// PHP 中可以通过 define 函数定义 一个常量
// 常量的特点就是:定义后不能被修改,也是临时存放数据的容器
// 什么时候用常量:一般程序的配置信息(不会在运行过程中修改)都会在常量中定义
// what why how where when

// 变量或函数都是采用 snake_case (小写字母加下划线)命名规则
// 常量是 SNAKE_CASE 命名规则
// 第一个参数常量名称
// 第二个是常量的值
define('SYSTEM_NAME', '王者荣耀');
// 第三个参数是常量名称是否忽略大小写 默认为false 不忽略
define('SYSTEM_VERSION', '1.0', true);

echo SYSTEM_NAME;
// echo system_name;


echo SYSTEM_VERSION;
echo system_version;

7 require载入文件

config.php:

<?php
defined('SYSTEM_NAME','HELLO');

07-require.php

<?php

// // 类似 CSS 的 import方法 导入文件
// require 'config.php';
// // require 可以用于在当前脚本中载入一个别的脚本文件并且执行他
// // require 在每一次调用时都会载入对应的文件

// echo SYSTEM_NAME;

// require 'config.php';

// echo SYSTEM_NAME;

// require_once ==================================
// require_once 如果之前载入过,不再执行(只执行一次)
// 由于类似于 定义常量 定义函数 这种操作不能执行多次
// 所以 require_once 更加合适载入这种文件

require_once 'config.php';

echo SYSTEM_NAME;

require_once 'config.php';

echo SYSTEM_NAME;

8 include载入文件

require载入文件是有缺点的。

aside.php:

<aside>
  这是侧边栏1111
</aside>

08-include.php:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <!-- require 特点: 一旦被载入的文件不存在就会报一个致命错误,当前文件不再往下执行 -->
  <!-- include 特点: 载入文件不存在不会报错误(会有警告,警告不用管),当前文件继续执行 -->
  <?php include 'aside.php'; ?>
  <main>
    这是主要的区域
  </main>
</body>
</html>

表单处理

表单的概念在生活中很常见,就像是问卷调查表一样,别人先把问卷发给你,你照着问卷的要求填写,完事过后再 将填完的问卷发给别人,从而达到一个将别人需要的信息传递给别人的一种方式。
传统的网页大多数的作用都是展示数据,就是将信息传递给用户。而在现代化的 Web 开发中,非常注重信息交 互,所以表单也随处可见,只是形式上变成网页,性质上还是一模一样的。主要的作用任然是收集指定的用户信 息。

信息交互:例如 简书 这个平台,除了展示文章(展示信息),还可以发布文章(收集信息)

1 表单基本使用

HTML 中有一个专门用于提交数据的标签: ,通过这个标签可以很容易的收集用户输入。

form 标签有两个必要属性:
action:表单提交地址(填完了,交给谁) method:表单以什么方式提交

例如,我们需要在登录界面上收集用户输入的用户名和密码:

1	<!DOCTYPE html>
2	<html lang="en">
3	<head>
4	<meta charset="UTF‐8">
5	<title>登录</title>
6	</head>
7	<body>
8	<form action="login.php" method="post">
9	<div>
10	<label for="username">用户名</label>
11	<input type="text" id="username" name="username">
12	</div>
13	<div>
14	<label for="password">密码</label>
15	<input type="password" id="password" name="password">
16	</div>
17	<button type="submit">登录</button>
18	</form>
19	</body>
20	</html>

按照目前的情况,用户第一次请求得到这个表单页面,填写完表单内容,点击登录,表单会自动发送到 login.php ,剩下的问题就是要考虑如何在 login.php 中获取到用户提交过来的内容。

PHP 中有三个超全局变量专门用来获取表单提交内容:
$_GET :用于获取以 GET 方式提交的内容 
$_POST :用于获取以 POST 方式提交的内容 
$_REQUEST :用于获取 GET 或 POST 方式提交的内容

借助 $_POST 或者 $_REQUEST 就可以获取到表单提交的内容:

<?php 
// 获取表单提交的用户名和密码 
echo '用户名:' . $_REQUEST['username']; 
echo '密码:' . $_REQUEST['password'];

1.1 提交地址

action 提交地址指的是这个表单填写完成过后点击提交,发送请求的请求地址是什么。
从便于维护的角度考虑,一般我们最常见的都是提交给当前文件,然后在当前文件中判断是否是表单提交请求:

1	<?php
2	if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
3	// 表单提交请求
4	}

另外,建议使用 $_SERVER[‘PHP_SELF’] 动态获取当前页面访问路径,这样就不用因为文件重命名或者网站目录结 构调整而修改代码了:

<!‐‐ 这样写死 action 地址,当文件重命名就需要修改代码 ‐‐> 
<form action="/foo/login.php">   
<!‐‐ ... ‐‐> </form> 
<!‐‐ 通过 `$_SERVER['PHP_SELF']` 获取路径,可以轻松避免这个问题 ‐‐> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>">   
<!‐‐ ... ‐‐> 
                                                                                 v</form>

鲁棒性:指的是我们的程序应对变化的能力

1.2 提交方式

method 可以用于设置表单提交的方式,目前我们所认识的就是最常见两种表单提交方式: GET 和 POST 。

从效果上来看,两者都可以将数据提交到服务端,但是从实现提交的原理上两者有很大的不同:

GET
表单数据是通过 URL 中的 ? 参数传递到服务端的 可以在地址栏中看到提交的内容 数据长度有限制,因为 URL 地址长度有限(2000个字符)

POST
表单数据是通过请求体传递到服务端的,我们在界面上看不到 可以提交任何类型的数据,包括文件 由于界面上看不见,浏览器也不储存,所以更安全

至于什么情况下应该选用哪种方式,这个需要结合业务场景和这两种方式各自的特点来决定,没有绝对的答案,只 能给出一些原则:

1. 绝不能使用 GET 来发送密码或其他敏感信息!!!
2. 应该想清楚这次请求到底主要是去拿东西,还是去送东西

login.php:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>用户登录</title>
</head>
<body>
  <!--
    1. 必须有 form 标签
    2. form 必须指定 action 和 method
        不设置 action 默认是当前页面 (必须设置,因为兼容)
        不设置 method 默认是 get
    3. 表单元素(表单域)必须有 name (如果希望被提交的情况)
    4. 表单中必须有一个提交按钮
  -->
  <form action="11-foo.php" method="post"><!-- action表示找到表单提交给某个页面 -->
    <table border="1">
      <tr>
        <td>用户名</td>
        <td><input type="text" name="username"></td>
      </tr>
      <tr>
        <td>密码</td>
        <td><input type="text" name="password"></td>
      </tr>
      <tr>
        <td></td>
        <!-- input: submit image -->
        <!-- button -->
        <td><button>登录</button></td>
      </tr>
    </table>
  </form>
</body>
</html>


服务端请求参数foo.php:

<?php

var_dump($_GET);
// $_GET 用于接收 URL 地址中的提交数据(一般是 GET 参数)

var_dump($_POST);
// $_POST 用于接收 请求体 中提交的数据(一般是 POST 提交的数据)

var_dump($_REQUEST);
// $_REQUEST = $_GET + $_POST

在这里插入图片描述

总结

本期学习到此结束,下期继续学习php知识,还是以案例为主,边练习边学习新知识。同时php第一期的基础内容很重要,一定要认真看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值