PHP初级
PHP语法:
PHP脚本以<?php开头,以?>结尾,例如:
<?php
echo hello world!;
?>
PHP语句以分号结尾。PHP代码块的关闭标签也会自动表明分号,所以在PHP代码的最后一行也可以不使用分号。
PHP注释:
``
//单行注释
单行注释
/多行注释/
``
PHP对大小写的敏感分类:
-
在PHP中,所有用户定义的函数、类、关键词(例如if、else、echo等)都对大小写不敏感。
-
PHP中,所有变量都对大小写敏感:
$color="red";和$Color="red";是不同的
PHP变量
PHP变量命名规则:
- 变量必须以“$”开头,“$”后面是变量名
- 变量名要以字母或者下划线开头,不能以数字开头
- 变量名只可以包含字母数字和下划线
- 变量名对大小写敏感
创建PHP变量
变量会在首次赋值的时候被创建,创建的时候不必要声明变量的数据类型,PHP会根据他的值自动把变量转换为正确的数据类型。
<?php
$txt="Hello World!";
$x=5;
$y=10.5;
?>
PHP变量的作用域
PHP有三种不同的变量作用域:
- local(局部)
- global(全局)
- static(静态)
local和global作用域
- 函数之外声明的变量拥有global作用域,只能在函数以外进行访问。
- 函数内部声明的变量拥有local作用域,只能在函数内部进行访问。可以在不同函数中创建相同名称的局部变量。
<?php
$x=5;//全局作用域
function myTest(){
$y=10;//局部作用域
echo "<p>测试函数之内的变量</p>";
echo "x变量是:$x";
echo "<br/>";
echo "y变量是:$y";
}
myTest();
echo "测试函数之外的变量";
echo "x变量是:$x";
echo "<br/>";
echo "y变量是:$y";
?>
运行结果是:
在函数内部测试变量:
变量 x 是:
变量 y 是:10
在函数之外测试变量:
变量 x 是:5
变量 y 是:
PHP global 关键词
global关键词用于访问函数内部的全局变量
<?php
$x=5;
$y=10;
function myTest() {
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 输出 15
?>
运行结果是:15;
PHP 同时在名为 $GLOBALS[index] 的数组中存储了所有的全局变量。
上面函数中$x,$y也可以用$GLOBALS['x'],$GLOBALS['y']代替。
PHP static关键词
通常函数完成/执行之后,会删除所有的变量,在函数内部首次声明变量时使用static,例如static $x=0;
这样函数在多次调用的时候,有关变量x的函数内容都有效。
PHP echo和print语句
PHP echo和print的区别
- echo-能输出一个以上的字符串
- print-只能输出一个字符串,并始终返回1.
提示: echo比print稍快一点,因为没有返回值。
echo语句
echo "study PHP at $txt2";可以字符串和变量一起输出
echo "<br>";可以输出html文件
echo "My car is a {$cars[0]}"; 输出cars数组里面的第一个;
PHP print 语句
用print命令来显示字符串,字符串中可以包含html标记
print "Hello World!<br>";
显示字符串和变量
print "My car is a {$cars[0]}";
PHP 数据类型
** 字符串、逻辑、整数、浮点数、数组、对象、null
var_dump($X);
会返回变量的数据类型和值;
定义字符串:``$car=array("volvo","Bmw","SAAB");
PHP对象
对象是存储数据和有关如何处理数据的信息的数据类型。
- 首先必须声明对象的类,使用 class 关键词。类是包含属性和方法的结构。
- 然后在对象类中定义数据类型,并在该类的实例中使用此数据类型:
例如:
<?php
class Car
{
var $color;
function Car($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
?>
PHP字符串函数
strlen():
返回字符串的长度
strpos():
检索字符串内指定字符或者文本,匹配成功返回首个匹配字符的位
置,不成功返回false。
strpos("Hello World!","World");返回6
查找字符位置函数
strpos($str,search,[int])
:查找search(要匹配的字符串)在str中的第一次位置(区分大小写),从int开始;
stripos($str,search,[int]):
返回search在str中第一次出现的位置(不区分大小写),从int开始。
strrpos($str,search,[int]):
返回search在str中最后一次出现的位置(不区分大小写),从int开始。
提取子字符函数(双字节)
substr(str,start,length):
从start的位置开始从str中截取字符串,length可不写,不规定的话默认截取一直到字符串的结尾。
strstr(str,search,before_search):
查找search在str中第一次出现并返回包括其在内的剩余的部分。before_search可以不设置,默认false,返回剩余的部分,true返回之前的部分。
stristr()
功能同strstr,只是不区分大小写。
strrchr()
从最后一次搜索到的字符处返回;用处:取路径中文件名
替换字符串函数
str_replace(search,replace,$str):
从str中寻找search用replace来替换。
strtr($str,search,replace):
这个函数中replace不能为""
substr_replace($Str,$rep,$start,[length]):
str原始字符串,rep替换后的新
字符串,$start
起始位置,$length
替换的长度,该项可选
字符长度
int strlen($str);
比较字符读函数
int strcmp($str1,$str2):
str1大于等于小于str2分别为正1,0,-1(字符串比较)
strcasecmp()
同上(不分大小写)
strnatcmp("4","14")
按自然排序比较字符串
strnatcasecmp()
同上,(区分大小写)
分割成数组的PHP字符串函数
str_split($str,len):
把$str按len长度进行分割返回数组
split(search,$str[,int]):
把$str按search字符进行分割返回数组int是分割几次,后面的将不分割
加空格函数
chunk_split($str,2):
向$str字符里面按2个字符就加入一个空格;
HTML代码有关函数
nl2br():
使转换为<br>
。
strip_tags($str[,¹<p>¹]):
去除PHP中的html标记
字符大小写转换的PHP字符串函数
strtolower($str)
字符串转换为小写
strtoupper($str)
字符串转换为大写
ucfirst($str)
将函数的第一个字符转换为大写
ucwords($str)
将每个单词的首字母转换为大写
数据库相关的PHP字符串函数
addslashes($str):
使str内单引号(¹)、双引号(")、反斜线()与 NUL
字符串转换为¹,",\
。
magic_quotes_gpc = On
自动对 get post cookie的内容进行转义
get_magic_quotes_gpc()
检测是否打开magic_quotes_gpc
stripslashes()
去除字符串中的反斜杠
设置PHP常量
define("green","this is green",true);
首参定义常量的名称,第二个参数定义常量的值,第三个可选,定义常量的名称是否对大小写敏感,默认false(敏感)。
PHP函数
创建函数:
function functionName(){
被执行的代码;
}
注释:
- 函数名能够以字母或者下划线开头(非数字);
- 函数名对大小写不敏感。
带参数的函数
function familyName($name=50){};
若是在调用的时候没有指定参数值,参数值为默认值50;
function fammilyName($name){};
PHP数组
PHP数组可以分为
- 索引数组——带有数字索引的数组;
- 关联数组——带有指定键的数组
- 多维数组——包含一个或多个数组的数组。
PHP索引数组
创建数组
$cars=array("Volvo","BMW","SAAB");
或者
$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="SAAB";
获取数组的长度-count()函数
<?php
$cars=array("Volvo","BMW","SAAB");
echo count($cars);
?>
遍历索引数组
<?php
$cars=array("Volvo","BMW","SAAB");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++) {
echo $cars[$x];
echo "<br>";
}
?>
PHP关联数组
创建关联数组
$age=array("Mengbi"=>"35","Shabi"=>"27","Erhuo"=>"16");
或者
$age['Mengbi']="35";
$age['Shabi']="27";
$sge['Erhuo']="16";
在脚本中使用指定键:
<?php
$age=array("Mengbi"=>"35","Shabi"=>"27","Erhuo"=>"16");
echo "Erhuo is" .$age['Erhuo']."years old";
?>
遍历关联数组,用foreach循环
<?php
$age=array("Mengbi"=>"35","Shabi"=>"27","Erhuo"=>"16");
foreach($age as $x=>$x_value){
echo "key=" .$x. ",value=".$x_value;
}
?>
PHP数组排序
- sort() - 以升序对数组排序 (索引数组)。例如:
sort($cars);
- rsort() - 以降序对数组排序(索引数组)
- asort() - 根据值,以升序对关联数组进行排序
- ksort() - 根据键,以升序对关联数组进行排序
- arsort() - 根据值,以降序对关联数组进行排序
- krsort() - 根据键,以降序对关联数组进行排序
PHP超全局变量
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
这些超全局变量是:
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
$GLOBALS
— 引用全局作用域中可用的全部变量
PHP 在名为 $GLOBALS[index]
的数组中存储了所有全局变量。变量的名字就是数组的键。
举例:
<?php
$x=30;
$y=60;
function add(){
$GLOBALS['z']=$GLOBALS['x']+$GLOBALS['y'];
}
add();
echo $z;
?>
执行结果是90;
PHP $_SERVER
$_SERVER
这一超全局变量用来保存关于报头、路径、和脚本位置的信息。
例如:
$_SERVER['PHP_SELF']
执行当前脚本的文件名;$_SERVER['SERVER_NAME']
执行所运行脚本在服务器的主机名$_SERVER['HTTP_HOST']
返回来自当前请求的host头部。- 等等
PHP $_REQUEST
$_REQUEST
用来收集HTML表单提交的数据。例如:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<!--当点击提交按钮提交表单数据的时候,表单数据会被发送到<form>标签上午action属性中指定的脚本文件,这里是正在执行的脚本本身-->
Name:<input type="text" name="fname">
<input type="submit">
</form>
<?php
$name=$_REQUEST['fname'];<!--用$_REQUEST来通过input里面的name属性获取input的值-->
echo $name;
?>
</body>
</html>
PHP $_POST
$_POST
是用来收集method=“post”的html表单数据,也常用于传递变量
例如:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_POST['fname']; <!--用$_POST来收集input输入字段的值-->
echo $name;
?>
</body>
</html>
PHP $_GET
$_GET
也用于收集html表单中method=get的表单数据,也可以收集url中的发送数据。
例如:
这里有一个页面,其中含有带参数的超链接:
<html>
<a href="test_get.php?subject=PHP&method=ourselves">测试GET</a>
</body>
</html>
当用户点击a里面的文字之后,参数subject和method被发送到"test_get.php",然后就可以通过$_GET在"test_get.php"页面中访问这两个参数的值了。
下面是"test_get.php"页面:
<html>
<body>
<?php
echo "We learn".GET['subject']. "by" .$GET['method'];
?>
</body>
</html>
PHP表单
主要涉及的是PHP超全局变量$_GET和$_POST。
使用GET和post都创建数组,array("key"=>"value","key"=>"value","key"=>"value")
其中的键是指表单控件的名称如“name”,而值是来自用户的输入。
例如:用post发送数据的代码
html:
<html>
<body>
<form method="XX.php" action="post">
Name:<input type="text" name="name">;
Email:<input type="text" name="email">
<input type="submit">
</form>
</body>
<html>
XX.php
<html>
<body>
Welcome<?php echo $_POST['name'];?>
You email is<?php echo $_POST['name'];?>
</body>
</html>
PHP表单验证
如果设定form表单中的action为PHP中的$_SERVER['PHP_SELF'],单纯的使用$_SERVER['PHP_SELF']这个变量容易会被黑客利用。所以需要进行表单验证安全性。
用到的函数:
- html的specialchars()函数 用来把特殊的字符转化成html实体,例如将“>”转化成“>”将“<”转化成“<”.
- PHP的trim()函数 用来删除用户输入数据中的不必要的字符(多余的空格制表换行等)、
- srripslashes()函数 用来删除用户输入数据中的反斜杠。
最后总结成一个PHP表单验证函数。
html:
<html>
<body>
<form method="post" action="<?php echo htmlspecialshars($_SERVER['PHP_SELF'])";?>
Name:<input type="text" name="name">
E-mail:<<input type="text" name="email">
Website: <input type="text" name="website">
Comment:<textarea rows="50" cols="40" name="comment"></textarea>
<input type="submit">
</form>
</body>
</html>
PHP:
<html>
<body>
<?php
//定义变量为空值
$namo = $email = $gender = $comment = $website = "";
//检查表单是否使用 $_SERVER["REQUEST_METHOD"] 进行提交。如果 REQUEST_METHOD 是 POST,那么表单已被提交 - 并且应该对其进行验证。如果未提交,则跳过验证并显示一个空白表单
if($_SERVER['REQUEST_METHOD']=="post"){
//调用test_input函数将用户的输入内容$_POST['name']赋值给变量
$name = test_input($_POST['name']);
$email= test_input($_POST['name']);
$comment=test_input($_POST['aomment']);
$website = test_input($_POST["website"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data){
$data=trim($data);
$data=stripslashes($data);
$data=htmlspecialchars($data);
return $data;
}
<?php>
</body>
</html>
通过使用 htmlspecialchars() 函数能够避免 $_SERVER["PHP_SELF"] 被利用。
表单代码是这样的:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() 函数把特殊字符转换为 HTML 实体。现在,如果用户试图利用 PHP_SELF 变量,会导致如下输出:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
无法利用,没有危害!
使用 htmlspecialchars() 函数后,如果用户试图在文本字段中提交以下内容:
<script>location.href('http://www.hacked.com')</script>
代码不会执行,因为会被保存为转义代码,就像这样:
<script>location.href('http://www.hacked.com')</script>
利用PHP进行表单验证
<html>
<head>
<style type="text/css">
.error{color:red;}
</style>
</head>
<body>
`
<?php
//定义获得input用户输入方面的变量和判断输入格式是否正确方面的变量并设置其为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
//判断是否是post的方式
if($_SERVER["REQUEST_METHOD"]=="post"){
//首先验证姓名
//empty()是一个PHP函数,用来检测变量的值是否为空值,这里用来检测用户input输入是否是空值。
if(empty($_POST["name"])){
$nameErr="姓名是必填的";
}else{
//不是空值就用$_POST变量来获得name="name"的input的输入的内容,其中test_input是一个封装起来的函数,用来避免 $_SERVER["PHP_SELF"] 被利用
$name=test_input($_POST["name"]);
//用正则表达式来判断输入名字的格式是否正确。preg_match()函数是PHP中用来检索字符串模式的,如果模式正确返回true,不正确返回false。
if(!preg_match("/^[a-zA-Z]*$/"),$name){
$nameErr="只允许字母和空格"
}
}
//验证邮箱
if(empty($_POST['email'])){
$emailErr="邮箱是必填的";
}else{
$email=test_input($_POST['email']);
if(!preg_match("/[\w\-]+\@[\w\-]+\.[\w\-]+/"),$email){
$emailErr="无效的email格式";
}
}
//验证website
if(empty("$_POST['website']")){
$website="";
}else{
$website=test_input($_POST['website'])
if(!preg_match("//"),$website){
$websiteErr="无效的url";
}
}
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
if (empty($_POST["gender"])) {
$genderErr = "性别是必选的";
} else {
$gender = test_input($_POST["gender"]);
}
}
function test_input($data){
$data=trim($data);
$data=stripslashes($data);
$data=htmlspecialchars($data);
return $data;
}
?>
<h2>PHP验证实例</h2>
<p><span class="error">* 必须的字段</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">
姓名:<input type="text" name="name">
<span class="error"><?php echo $nameErr; ?></span>
<br><br>
电邮:<input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
网址:<input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
评论:<textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
性别:
<input type="radio" name="gender" value="female">女性
<input type="radio" name="gender" value="male">男性
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="提交">
</form>
<?php
echo "<h2>您的输入:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>