Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:用着php中文网的鼠标垫, 上着php中文网的课程, 还写着咱们的作业, 沉浸式学习体验
因为对于html而言,所有的内容都是作为字符进行解析显示的,所以对于字符的控制和操作也就变得异常重要。而对字符的截取和删除也就更有利于显示的储存的规范性了;
其次,很多时候我们都将数据变成一个数组,便于进行比较和存储,因此对于数组指针的控制以及理解也就十分重要了,而且一定要记得用完的指针记得复位哦!
运行效果
代码
<?php
/*
* 本例代码中将会使用到的常见函数
* count(),计算数组中,元素的数量,或者对象中的存在属性的数量;
* strlen(),获取字符串的长度;
* trim(),去掉字符串 “首尾两端”的字符,默认为空白字符(空格符、制表符、换行符、回车符、空字节以及垂直制表符),也可以通过第二个参数指定;
* rtrim(), ltrim(),与trim()功能一致,不同的是 “明确了”针对的方向,也就是删除左侧还是右侧;
* mt_rand(min, max): 产生指定范围的随机数,min最小值,max最大值;
* */
//示例公用变量;
$array_type = ['html', 'css', 'js', 'php', 'laravel'];
$trim_str=' AntSports ';
//常见函数,count() 示例
echo 'Array_type 变量的元素数量是:'.count($array_type).'个'.'<br><br>';
//常见函数,strlen() 示例
echo 'trim_str 变量的字符长度是:'.strlen($trim_str).'<br><br>';
//常见函数,trim() 示例
$str_all=trim($trim_str);
echo '截取后的trim_str : '.$str_all.',他的字符长度是:'.strlen($str_all).'<br><br>';
//常见函数,ltrim() 示例
$str_left=ltrim($trim_str);
echo '截取后的trim_str : '.$str_left.',他的字符长度是:'.strlen($str_left).'<br><br>';
//常见函数,rtrim() 示例
$str_right=rtrim($trim_str);
echo '截取后的trim_str : '.$str_right.',他的字符长度是:'.strlen($str_right).'<br><br>';
//常见函数,rtrim() ,使用其第二个参数,去掉 ‘s’示例
$str_right2=rtrim($str_all,'s');
echo '截取后的trim_str : '.$str_right2.',他的字符长度是:'.strlen($str_right2).'<br><br>';
//常见函数,mt_rand(min, max) 示例
function rand_discount(){
return(mt_rand(68,95)/100)*10;
}
$discount=rand_discount();
echo "当前抽取的折扣是: {$discount} 折<br><br>";
echo '-----<br>';
/*
* for循环,也成之为计数式
* for(循环变量的初始化; 循环条件; 更新循环条件) {...}
* 使用内置函数,key(), current(): 分别返回当前数组元素的键和值;
* 使用内置函数 next(): 将指针指向数组当前元素的下一个元素的位置;
* 使用内置函数 prev(): 将指针指向数组当前元素的上一个元素的位置;
* 使用内置函数 reset():将指针复位到数组的第一个元素;
* 使用内置函数 end():将指针移动到数组的最后一个元素,并且返回他的值;
**/
for ($i=0;$i<5;$i++){
$discounts=rand_discount();
//将函数返回的折扣之存储在数组中;
if ($i<4){
$array_discounts[$i]=$discounts;
next($array_discounts);
}else{
$array_discounts[$i]=$discounts;
reset($array_discounts);
}
}
//使用array_search()函数,获取抽取折扣中最大的折扣率,所对应的键值;
$discount_key = array_search(min($array_discounts), $array_discounts);
//foreach()遍历折扣数组中的值;
foreach ($array_discounts as $value){
echo '本次活动抽取的折扣有:'.$value.'折,'.'<br>';
}
//将键值对应的值取出来;
$max_discount= $array_discounts[$discount_key];
echo '在5次随机折扣抽取中,您获得的最大折扣为:'.$max_discount.'折!<br><br>';
/*
* while循环,是根据条件判断是否符合,若符合则进入循环体内,也被成为 “当循环”;
* while循环的变量必须写在 while 的前面;
* 根据判断条件的位置,while循环又分为 “ while循环--入口判断”和 “do while--出口判断”
* */
//while 循环--入口判断;
$w=0;
while ($w<count($array_type)){
echo $array_type[$w].',<br>';
$w++;
}
echo '-----<br>';
//do while---出口判断,若条件不满足也至少执行一次;
$w=0;
do{
echo $array_type[$w].',<br>';
$w++;
}
while ($w>count($array_type));
运行效果
代码-页面部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
}
body{
width: 100%;
height: 100%;
display: flex;
flex-flow: column nowrap;
align-items: center;
}
.register{
width: 380px;
height: 300px;
background-color: lightblue;
border-radius: 5px;
margin-top: 80px;
display: grid;
grid-template-rows: 65px 200px 35px ;
grid-template-columns: 80px 1fr 80px ;
place-items: center;
}
.register>h2{
grid-row: 1/2;
grid-column: 1/4;
}
.register>form{
width: 100%;
height: 100%;
grid-row: 2/4;
grid-column: 2/3;
display: flex;
flex-flow: column nowrap;
}
.register>form>.item{
height: 26px;
margin: 5px 0;
display: flex;
flex-flow: row nowrap;
justify-content: space-between;
}
.register>form>.item:last-of-type{
margin-top: 5px;
justify-content: center;
}
.register>form>.item:last-of-type>button{
width: 80px;
height: 28px;
color: white;
background-color: forestgreen;
border: none;
border-radius: 4px;
}
.register>form>.item:last-of-type>button:hover{
cursor: pointer;
box-shadow: 0 0 10px #ccc;
}
</style>
</head>
<body>
<div class="register">
<h2>用户注册</h2>
<form action="formpost.php" method="post">
<div class="item">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" placeholder="不超过20个字符" required>
</div>
<div class="item">
<label for="password1">密码:</label>
<input type="password" id="password1" name="password1" placeholder="不能为空" required>
</div>
<div class="item">
<label for="password2">重复密码:</label>
<input type="password" id="password2" name="password2" placeholder="必须与上面一致" required>
</div>
<div class="item">
<label for="email">邮箱:</label>
<input type="text" id="email" name="email" placeholder="不能为空" required>
</div>
<div class="item">
<label for="phone">电话:</label>
<input type="text" id="phone" name="phone" placeholder="不能为空" required>
</div>
<div class="item">
<button>提交注册</button>
</div>
</form>
</div>
</body>
</html>
代码-验证部分
<?php
/*
* $_REQUEST 用于接收表单数据的 “超全局变量”,包含get , post , cookie
* $_SERVER['REQUEST_METHOD'],获取表单提交模式;
* isset(),检查变量是否存在,并且其值不能为 “NULL”;
* empty(),检查一个变量是否为空,若要返回“假”,则变量必须存在,且其值不能为以下内容:
* "" (空字符串)/
* 0 (作为整数的0)
* 0.0 (作为浮点数的0)
* "0" (作为字符串的0)
* NULL
* FALSE
* array() (一个空数组)
* $var; (一个声明了,但是没有值的变量)
* ======
* 使用 三元运算符(格式: 条件 ? true : false ),将判断简化;
* ======
* md5():生成字符串的,32位MD5随机字符串;
* sha1():生成字符串的,40位随机字符串;
* */
//输出用户提交的信息
echo '<pre>'.print_r($_REQUEST,true).'</pre><br>';
echo '邮箱地址:'.$_POST['email'].'<br>';
//判断用户的请求类型
if ($_SERVER['REQUEST_METHOD']=='POST'){
echo '<h3>请求类型正确!</h3><br><br>';
//empty()
if(!empty($_POST['username'])){
echo '有值';
}else{
echo '无值';
}
echo '<br>';
//三元运算符,简化双分支
(!empty($_POST['username']))==true ? $status= '有值': $status='无值';
echo $status.'<br>';
if (!empty($_POST['username'])) $username = $_POST['username'];
if (!empty($_POST['password1'])) $password1 = $_POST['password1'];
if (!empty($_POST['password2'])) $password2 = $_POST['password2'];
if (!empty($_POST['email'])) $email = $_POST['email'];
if (!empty($_POST['phone'])) $phone = $_POST['phone'];
//判断二次的密码是否一致,并且进行md5加密
if ($password1 === $password2) {
// md5():32位随机字符串, sha1():40位随机字符串
$password = md5(sha1($password1));
} else {
exit('<script>alert("二次密码不一致");history.back();</script>');
}
$data = compact('username', 'password', 'email', 'phone');
echo '<pre>' . print_r($data, true) . '</pre>';
}else{
exit('<h3>请求类型错误!</h3>');
}