前言
上一篇文章 PHP学习——【一往无前】中学习了PHP的基本语法,这篇文章先做一个小案例巩固一下上篇文章的知识,接着学习PHP中的流程控制语句。
表单传值问题
在PHP中进行表单传值的方式有两种,post和get;先举几个例子看看两者的区别~
1.post
第一个页面用于展现给用户,收集用户的信息:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="postdo.php" method="post">
用户名:<input type="text" name="id">
密码:<input type="password" name="pas1">
邮箱:<input type="email" name="emai1">
<input type="submit" value="提交">
</form>
</body>
</html>
收集完成后,显示给后台:
<?php
//用于接收从post页面传递过来的用户信息,并显示出来
$name=$_POST['id'];
$pass=$_POST['pas1'];
$email=$_POST['emai1'];
echo $name;
echo "<br>";
echo $pass;
echo "<br>";
echo $email;
?>
2.get
<form action="getdo1.php" method="get">
用户名:<input type="text" name="id">
密码:<input type="password" name="pas1">
邮箱:<input type="email" name="emai1">
<input type="submit" value="提交">
</form>
<?php
$name=$_get['id'];
$pass=$_get['pass'];
$emai=$_get['email'];
echo $name . "<br>";
echo $pass ."<br>";
echo $email ."<br>";
?>
另外利用get进行超链接传输:
<a href="getdo.php? id=1">第一篇文章</a>
<a href="getdo.php? id=2">第二篇文章</a>
<a href="getdo.php? id=3">第三篇文章</a>
<?php
$id=$_GET['id'];
echo "您单击了第".$id."篇文章";
?>
简单总结
从安全性上来讲,get提交的数据在url栏可以看见,而post提交的数据是不可见的,
从提交原理上讲, get提交是参数一个一个的提交,post提交是所有参数作为一个整体一起提交。
从提交数据的大小上来讲, get提交一般不超过255个字节,post提交的大小取决于服务器。
从灵活性上讲,get很灵活,只要有页面的跳转就可以传递参数,post不灵活,post提交需要有表单的参与。
有关问题的解决
在进行表单传值时,发现了有关单选和复选出现的问题:
查找资料后发现原因是:
因为单选框名字都一致,而我们需要获取相应选项的value值,这时需要手动在HTML页面中添加value,用value值的不同来判断所选的选项:
//将单选框的value值继续修改
<input type="radio" name="sex" value="女">女
<input type="radio" name="sex" value="男">男
运行结果:
同样的,对于复选框来说,它可以同时选多个选项,而接收页面使用$_POST接收时只有一个变量(一个变量只有一个值),因此会出现后选的选项会覆盖先选的选项,这个问题可以用数组来解决。
//信息收集页面
<input type="checkbox" name="hobby[]" value="书法">书法
<input type="checkbox" name="hobby[]" value="绘画">绘画
<input type="checkbox" name="hobby[]" value="演讲">演讲
//显示页面
var_dump($hobby)."<br>";
另一种解决方法是利用 isset()函数来输出复选框的选择情况:
<form action="checkdo1.php" method="post">
<h3>复选框的演示</h3>
<input type="checkbox" name="check_a" value="a">摄影<br>//设置不同value值,当被勾选时相应值就会被进行post传递,用于后台收集
<input type="checkbox" name="check_b" value="b">书法<br>
<input type="checkbox" name="check_c" value="c">绘画<br>
<br>
<input type="submit" value="提交">
</form>
<?php
if(isset($_POST))//使用isset函数判断变量被定义的方式
{
if(isset($_POST['check_a']))
{
$check_a = $_POST['check_a'];
}
if(isset($_POST['check_b']))
{
$check_b = $_POST['check_b'];
}
if(isset($_POST['check_c']))
{
$check_c = $_POST['check_c'];
}
echo "<br>";
if(isset($check_a) && $check_a == 'a')
{
echo "摄影<br>";
}
if(isset($check_b) && $check_b == 'b')
{
echo "书法。<br>";
}
if(isset($check_c) && $check_c == 'c')
{
echo "绘画。<br>";
}
}
?>
判断语句
当编写代码时,我们需要为不同的判断执行不同的动作。这时就可以在代码中使用条件语句来完成此任务。在 PHP 中,提供了下列条件语句:
if 语句 - 在条件成立时执行代码
if…else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
if…else if…else 语句 - 在若干条件之一成立时执行一个代码块
switch 语句 - 在若干条件之一成立时执行一个代码块
if语句
//语法:
if (条件)
{
条件成立时要执行的代码;
}
if语句的单项条件:
如果if后面的表达式判断为true,就会执行if后的语句1;如果判断为false,就会绕过语句1,执行后面的语句。
案例
//当前分钟大于或等于30时,返回hello world。
$time=date("i");
if($time>=30){
echo "hello world";
}
if…else语句
//语法
if (条件)
{
条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
案例
//如果分钟大于等于30就返回hello world;反之返回你好,世界
$time=date("i");
if($time>=30){
echo "hello world";
}else {
echo "你好,世界";
}
案例
//if else 语句的嵌套
<form action="if3.php" method="post">
<h3>请选择今天的天气</h3>
<select name="select" size="1">
<option selected value="sunny">sunny</option>
<option value="rain">rain</option>
<option value="cloudy">cloudy</option>
<option value="foggy">foggy</option>
<input type="submit" >
</form>
$select=isset($_POST['select'])?$_POST['select']:"";//进行post传参
if ($select=="sunny"){
echo "可以出去玩!";
}else{
if($select=="rain"){
echo "外面下雨了";
}else if($select=="cloudy"){
echo "外面刮风了";
}else{
echo "外面起雾了";
}
}
补充:
三元运算符
三元运算符的功能与“if…else”流程语句一致,它在一行中书写,适当的运用三元运算符会使我们的代码更加精练、执行效率更高。三元运算符语法:条件 ? 结果1 : 结果2
说明:问号前面的位置是判断的条件,如果满足条件时结果1,不满足时结果2。
$a = 10;
$b = 7;
$a % 2 == 0 ? print '$a 是偶数!<br>' : '';//输出 $a 是偶数!
$b % 2 == 0 ? '' : print '$b 是奇数!';//输出 $b 是奇数!
echo "<br>";
三元运算符可以扩展使用,当设置的条件成立或不成立,执行语句可以不止一句:
(expr1) ? (expr2).(expr3) : (expr4).(expr5);
$a = 10;
$b = 6;
$c = 12;
$x = $a>$b ? ($a<$c ? $c-$a : $a-$c) : ($b<$c ? $c-$b : $b-$c);
echo 'x的值是:'.$x;
//输出 x的值是:2
if…else if…else语句
//语法
if (条件)
{
if 条件成立时执行的代码;
}
else if (条件)
{
else if 条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
案例
HTML页面:
<form action="scoredo.php" method="post" >
<h3>成绩测试器</h3>
<!-- 。placeholder可以用来描述输入字段预期值的简短的提示信息。 -->
<input type="text" name="score1" placeholder="请输入成绩">
<button type="submit" value="查询">提交
</form>
PHP页面:
<?php
$score1=isset($_POST['score1'])?$_POST['score1']:"";
if(!is_numeric($score1)){
echo "请输入正确成绩类型";
}else{
if($score1<0||$score1>100){
echo "错误成绩";
}else if($score1>=90){
echo "您的成绩为优秀";
}else if($score1>=70){
echo "您的成绩为良好";
}else if($score1>=60){
echo "您的成绩为及格";
}else{
echo "您的成绩不合格";
}
}
?>
注意事项:
当条件过多时,可以采用符合if形式;
如果条件比较单一,就可以采用else if的符合方式;
当条件不一致时可以采用if else嵌套语法,如果条件过多就不建议使用嵌套语法,会影响代码的美观性,建议使用接下来的switch…break…语句
switch…break…语句
//语法
switch (n)
{
case term1:
如果 n=term1,此处代码将执行;
break;//执行结束
case term2:
如果 n=term2,此处代码将执行;
break;
default:
如果 n 既不等于 term1 也不等于 term2,此处代码将执行;
}
首先对一个简单的表达式 n(通常是变量)进行一次计算。将表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码。代码执行后,使用 break 来阻止代码跳入下一个 case 中继续执行。default 语句用于不存在匹配(即没有 case 为真)时执行。
案例
//根据用户输入放入的数字来判断显示类型
<?php
$i=2;
switch($i){
case 1:echo "<input type='text' value='{$i}'>";
break;
case 2:echo "<input type='button' value='{$i}'>";
break;
case 3:echo "<input type='checkbox'>";
break;
case 4:echo "<input type='redio'>";
break;
default:echo "错误";
}
//i=2,输出一个按钮
?>
案例
根据用户指定的运算,计算结果:
<!-- placeholder可以用来描述输入字段预期值的简短的提示信息 -->
<form method="post" action="switchcomputer.php">
<input type="text" name="num1" placeholder="num1">
<select name="op" id="">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" name="num2" placeholder="num2">
<input type="submit" value="计算">
</form>
$num1=$_POST['num1'];
$op=isset($_POST['op'])?$_POST['op']:"";//判断op是否被设置,如果设置就是op,没有被设置就是空
$num2=$_POST['num2'];
switch($op){
case "+":$result=$num1+$num2;
echo $result;
break;
case "-":$result=$num1-$num2;
echo $result;
break;
case "*":$result=$num1*$num2;
echo $result;
break;
//除数不能是0,如果是0就返回错误
case "/":if($num2!=0)
{
$result=$num1/$num2;
echo $result;
break;
}else{
echo "错误";
}
}
简单总结:
if语句可以做所有的分支结构
switch语句用于处理条件比较多、单一,并且固定值匹配的分支结构
循环语句
PHP中的循环语句
1、for循环,语法“for(初始值;条件;增加值){循环体}”;
2、do while循环,语法“do{循环体}while(条件)”;
3、while循环,语法“while(条件){循环体}”;
4、foreach循环。
for循环
//语法
for(初始化计数初值;判断条件;增加计数值){
循环体;
}
//当for循环语句中的循环条件没有时,会造成死循环,要避免这种情况出现
案例
for($i=1; $i<=10 ;$i++){
if($i==5)break;//表示打破,输出1 2 3 4 5
// if($i==5)continue;//表示继续,输出1,2,3,4,5,6,7,8,9,10
echo $i."<br>";
}
案例
//打印一个等腰三角形
$n=4;
for($i=0;$i<$n;$i++){
for($j=1;$j<($n-$i);$j++){
echo " ";//第一行是三个空格一个 *
}
for($k=0;$k<(2*$i+1);$k++){
echo "*";
}
echo "<br>";
}
//输出:
*
***
*****
*******
案例
// 九九乘法表
echo "<table border=1px>";
for($i=1; $i<=9;$i++){
echo "<tr>";
for($j=1;$j<=$i;$j++){
echo "<td>"."{$i}".'*'."{$j}".'='.$i*$j."</td>";
}
for($k=0;$k<=(9-$j);$k++){
echo "<td></td>";
}
echo "<tr>";
}
echo "</table>";
while循环
//语法
while(判断条件){
循环体;
}
//while循环先进行循环条件的判断,后进行循环;如果条件不满足,就跳出循环
案例
当条件已知(通常是有规律的数据),我们可以采用for循环;
如果条件不固定,需要采用条件判定,此时我们可以采用while循环,while循环是比较灵活的循环语句
do while循环
//语法
do{
循环体;
}while(判断条件);
//do while 循环先进入循环,再进行条件的饿判断;因此至少会进行一次循环
案例
//打印出1-10的奇数和偶数
$i=1;
do{
if($i % 2 ==0){
echo $i."是偶数 "." ";
}else{
echo $i."是奇数 "." ";
}
//i进行自加
$i++;
}while($i<=10);
foreach循环
//语法
foreach($array as $value){
执行代码;
}
或者是;
foreach($array as $key => $value ){
执行代码;
}
//$key 数组键名 $value 数组键值
//foreach循环属于数组的遍历循环,每进行一次循环,当前的值就会赋给变量$value,并且数组指针是逐一移动的,直到最后一个数组元素
案例
//一维数组的遍历
$stu1=array(
'1001'=> '小明',
'1002'=> '小红',
'1003'=> '晓东'
);
foreach($stu1 as $key=>$value){
echo $key.$value."<br>";
}
//输出
1001小明
1002小红
1003晓东
案例
//二维数组的遍历
$stu2=array(
"人事部"=>array('a','b','c'),
"研发部"=>array('d','e','f'),
);
//打印出人事部有abc,研发部有def;
foreach($stu2 as $key=>$value){
echo $key.":";
foreach($value as $keyin=>$valuein){
echo $valuein." ";
}
echo "<br>";
}
//输出
人事部:a b c
研发部:d e f
案例
//将一个二维数组遍历到表格
$arr1=array(
array('name'=>'lili','sex'=>'famale','age'=>12),
array('name'=>'tom','sex'=>'male','age'=>15),
array('name'=>'join','sex'=>'famale','age'=>10)
);
echo" <table border='1'>";
echo "<tr><th>id</th><th>name</th><th>sex</th><th>age</th></tr>";
foreach($arr1 as $key=>$value){
echo "<tr>";
echo "<td>$key</td>";
foreach($value as $keyin=>$valuein){
echo "<td>$valuein</td>";
}
echo "</tr>";
}
echo "</table>";
echo "<br>";
总结
以上就是对php中的判断语句和流程语句的简单总结了,接下来的文章还会继续更新学习笔记,期待和大家的交流!
如有不足,感谢指正!