php基本教程

PHP 是服务器端脚本语言

前言

PHP 是什么?

  • PHP(全称:PHP:Hypertext Preprocessor,即”PHP:超文本预处理器“)是一种通用开源脚本语言
  • PHP 脚本在服务器上执行。
  • PHP 可免费下载使用。

PHP 文件是什么?

  • PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码
  • PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器
  • PHP 文件的默认文件扩展名是 “.php”

PHP 能做什么?

  • PHP 可以生成动态页面内容
  • PHP 可以创建、打开、读取、写入、关闭服务器上的文件
  • PHP 可以收集表单数据
  • PHP 可以发送和接收 cookies
  • PHP 可以添加、删除、修改您的数据库中的数据
  • PHP 可以限制用户访问您的网站上的一些页面
  • PHP 可以加密数据

通过 PHP,不再限于输出 HTML。可以输出图像、PDF 文件,甚至 Flash 电影。还可以输出任意的文本,比如 XHTML 和 XML。

为什么使用 PHP?

  • PHP 可在不同的平台上运行(Windows、Linux、Unix、Mac OS X 等)
  • PHP 与目前几乎所有的正在被使用的服务器相兼容(Apache、IIS 等)
  • PHP 提供了广泛的数据库支持
  • PHP 是免费的,可从官方的 PHP 资源下载它: www.php.net
  • PHP 易于学习,并可高效地运行在服务器端

php语法

基础语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
index.xxx  index是标准的网页首页命名
index.html index.php index.jsp .asp .htm
<?php
echo 'haha nihao';
?>
代码必须用<?php XXXXXXXXXXX ?>包裹起来
echo输出

变量:
$a = 123 ;
$b = 999;
$c = $a + $b;
echo $c;

/*
多行注释
*/

$a="haha";
$b="nihao";
$c=$a.$b; //这里的点叫粘合
echo $c;

php5 echo & print

  • 区别,echo可输出一个或多个字符串,print只能输出一个字符串,返回值总为1
  • echo输出速度比print快,没有返回值
  • echo 或 echo()这两个写法都可以
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
echo "<h2>PHP 很有趣!</h2>"; //php脚本这里直接将结果输给html上
echo "Hello world!<br>";
echo "我要学 PHP!<br>";
echo "这是一个", "字符串,", "使用了", "多个", "参数。";
$cars=array("Volvo","BMW","Toyota");
echo "<br>"; #输出html标签
echo "我车的品牌是 {$cars[0]}"; //用{}包裹,变量数组,索引下标
?>

#输出
PHP 很有趣!
Hello world!
我要学 PHP!
这是一个字符串,使用了多个参数。
我车的品牌是Volvo

php表单

php表单

  • $_GET

  • $_POST

  • 这两个内置变量用于检索表单中的信息,比如用户输入。当处理 HTML 表单时,PHP 能把来自 HTML 页面中的表单元素自动变成可供 PHP 脚本使用。

实例

form.html 文件代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<head>
<meta charset="utf-8">
<title>表单html</title>
</head>
<body>
<form action="welcome.php" method="post">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>

当用户填写完上面的表单并点击提交按钮时,表单的数据会被送往名为 “welcome.php” 的 PHP 文件:

welcome.php 文件代码:

1
2
欢迎<?php echo $_POST["fname"]; ?>!<br>
你的年龄是 <?php echo $_POST["age"]; ?> 岁。

php与get,post

1
2
3
4
5
6
7
<?php
$a=$_GET['name'];
$b=$_GET['age'];
$d=$_POST['namee']
echo $a."----".$b;

?>

一般在url中的是get方法,post多用来用户名密码注册,登录,get常用来取东西

image-20210713180258956

1
2
3
4
5
6
7
8
if($b>18)
{
echo 'chengnian'.$a;
}else
{
echo 'wei cheng nian'.$a;
}

image-20210713180310312

image-20210713180320507

火狐浏览器强行给的post请求,get才能在url中使用

image-20210713180334211

image-20210713180351433

php+html

php是脚本语言,可以插入在html中生成HTML标签,这点与js相似

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<body>
<?php
$servername = "localhost"; //大部分公司的代码与数据库不在一起,所以一般这里先写个远程连接的ip地址
$username="root";
$password="root";
$dbname="haha";

//创建连接
$conn = new mysqli($servername,$username,$password,$dbname);

//检测连接
if($conn->connect_error){
die("连接失败:".$conn->connect_error);
}

//数据库查语句
$sql = "SELECT * FROM table1 WHERE id < 12 ";
$result = $conn->query($sql);
if($result->num_rows>0)
{
//结合html表格输出数据
echo "<table border='1'>";
echo "<tr> <th>id<th> <th>username<th> <th>password<th></tr>";
while($row=$result->fetch_assoc())
{
echo "<tr>";
echo "<td>".$row['id']."</td>";
echo "<td>".$row['username']."</td>";
echo "<td>".$row['password']."</td>";
echo "</tr>";
}

echo "</table>"
}else
{
echo '未查询到数据';
}
$conn->close();//数据库需要关闭,否则有安全隐患

?>



</body>

php高级进阶

php数据库

php+Mysql

创建并检测连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

$servername="localhost"; //定义一个服务器主机名,与win上的127.0.0.1类似
$username="root";
$password="root";//用来连接数据库用户名密码
$dbname="haha";
//创建连接 mysqli自带对象,将连接对象存给变量conn
$conn = new mysqli($servername,$username,$password,$dbname);

//检测连接
if($conn->connect_error){ //如果链接对象中connect_error返回失败
die("连接失败:".$conn->connect_error); //die函数断掉连接同时用.返回错误,php使用点来连接
}
echo("连接成功");

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//数据库的查询(读取数据库)
//参考https://www.runoob.com/php/php-mysql-select.html 代码

//准备一条数据库语句(sql语句)
$sql = "SELECT * FROM table1 WHERE id < 3"; //将数据库中table1表中id项小于3的元素都选出来
$result = $conn->query($sql); //执行建立的conn连接对象中query函数,将sql语句塞给数据库,将执行(query)结果返回给变量$result
//判断result有没有东西
if ($result ->num_rows > 0)
{
//输出数据
while($row = $result->fetch_assoc())//用while循环一条条去读取
{
echo $row['id'].'------'.$row['username'].'------'.$row['password']."<br/>"; //这里返回的row类似于js对象数据,里面有每个条目的信息,包含了name,password等个体属性
//这里输出是sql查询语句的子集关系,所以一般SQL选所有*
}
}else
{
echo "未查询到结果";
}

1
2
3
4
5
6
7
8
9
//数据库的增加数据(插入数据)
//参考 https://www.runoob.com/php/php-mysql-insert.html
$sql = "INSERT INTO table1 (id ,username,password) VALUE (8,'haha123','9999123')";
if($conn->query($sql)===TRUE)//执行语句query是否成功
{
echo '插入成功';
}else{
echo "error:".$conn->error;
}

1
2
3
4
5
6
7
8
9
//数据的删除
//参考 https://www.runoob.com/php/php-mysql-delete.html
$sql = "DELETE FROM table1 WHERE username='haha123' ";
if($conn->query($sql)===TRUE)
{
echo '数据删除成功';
}else{
echo 'Error:'.$conn->error;
}

1
2
3
4
5
6
7
8
9
10
11
12
//数据的修改(update)
//参考https://www.runoob.com/php/php-mysql-update.html

$sql = "UPDATE table1 SET password='nibi123' WHERE username='haha123' ";
if($conn->query($sql)===TRUE)
{
echo '数据修改成功';
}else
{
echo 'ERROR:'.$conn->error;
}

php与Ajax

php参考手册

当字典用,
[runoob上的参考手册]: (https://www.runoob.com/php/php-ref-array.html)

stristr()

  • 搜索字符串在另一字符串中的第一次出现。
  • 该函数是二进制安全的。
  • 该函数是不区分大小写的。如需进行区分大小写的搜索,使用 strstr() 函数。
1
stristr(string,search,before_search) 
参数 描述
string 必需。规定被搜索的字符串。
search 必需。规定所搜索的字符串。如果该参数是数字,则搜索匹配该数字对应的 ASCII 值的字符。
before_search 可选。一个默认值为 “false” 的布尔值。如果设置为 “true”,它将返回 search 参数第一次出现之前的字符串部分。

explode()

  • 把字符串打散为数组
1
2
3
4
5
6

<?php
$str = "www.runoob.com";
print_r (explode(".",$str)); //以点为分隔符
?>

mysqli_real_escape_string()

  • 转义在 SQL 语句中使用的字符串中的特殊字符,起到小的防火墙效果
1
mysqli_real_escape_string(connection,escapestring);
参数 描述
connection 必需。规定要使用的 MySQL 连接。
escapestring 必需。要转义的字符串。编码的字符是 NUL(ASCII 0)、\n、\r、\、’、” 和 Control-Z。

补充知识

变量

$_REQUEST

https://www.php.net/manual/zh/reserved.variables.request.php

函数

exec()

  • 执行一个外部程序
1
exec(string $command, array &$output = ?, int &$return_var = ?): string  //exec执行command参数所指定的命令

参数

  • command

    要执行的命令。

  • output

    如果提供了output 参数,那么会用命令执行的输出填充此数组,每行输出填充数组中的一个元素数组中的数据不包含行尾的空白字符,例如 \n 字符

    注意,如果数组中已经包含了部分元素,exec() 函数会在数组末尾追加内容。如果你不想在数组末尾进行追加,请在传入 exec() 函数之前对数组使用 unset() 函数进行重置。

  • return_var

    如果同时提供output 和 return_var` 参数,命令执行后的返回状态会被写入到此变量。

详细学习见:https://www.php.net/manual/zh/function.exec.php

system()

  • 执行外部程序,并且显示输出
  • 这些函数存在的意义,就是让用户通过php语言去执行系统的命令
1
system(string $command, int &$return_var = ?): string

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<?php
echo '<pre>';

// 输出 shell 命令 "ls" 的返回结果
// 并且将输出的最后一样内容返回到 $last_line。
// 将命令的返回值保存到 $retval。
$last_line = system('ls', $retval);

// 打印更多信息
echo '
</pre>
<hr />Last line of the output: ' . $last_line . '
<hr />Return value: ' . $retval;
?>

更多参照官方文档:https://www.php.net/manual/zh/function.system.php

isset()

  • 检测变量是否已设置并且非 null
1
isset(mixed $var, mixed $... = ?): bool

https://www.php.net/manual/zh/function.isset.php

php_uname()

  • 返回运行 PHP 的系统的有关信息
  • php_uname() 返回了运行 PHP 的操作系统的描述。 这和 phpinfo() 最顶端上输出的是同一个字符串。 如果仅仅要获取操作系统的名称。可以考虑使用常量 **PHP_OS*,不过要注意该常量会包含 PHP 构建(built*)时的操作系统名。
  • 在一些旧的 UNIX 平台,它有可能无法检测到当前系统的信息,然后会还原显示成构建 PHP 时的系统信息。这仅仅在你的 uname() 函数库不存在或无法运行时发生。
1
php_uname(string $mode = "a"): string

mode 是单个字符,用于定义要返回什么信息:

  • 'a':此为默认。包含序列 "s n r v m" 里的所有模式。
  • 's':操作系统名称。例如:FreeBSD`。
  • 'n':主机名。例如:localhost.example.com`。
  • 'r':版本名称,例如:5.1.2-RELEASE`。
  • 'v':版本信息。操作系统之间有很大的不同。
  • 'm':机器类型。例如:i386

https://www.php.net/manual/zh/function.php-uname.php

addslashes()

  • 使用反斜线引用字符串
1
addslashes(string $str): string