文章目录
资源
Hello World!
测试服务器环境
<?php
echo 'Hello World';
?>
打开报错提示
找不到php.ini的话可以查看phpinfo
<?php
phpinfo();
?>
访问后在页面中找Loaded Configuration File
即php.ini的路径
然后参照此博客
写个代码测试一下
<?php
echo $a;
?>
访问时会报Undefined variable
注意:生产环境下千万不要开报错提示!!!
基本语法
1.起始和结束标记
起始 <?php
结束 ?>
php解析器识别两标记之间的代码作出解析
2.注释
单行注释 // 或#
多行注释 /* */
注意:多行注释时遇到第一个 */ 就会结束,这可能导致错误
数据类型简介
四种标量类型:
boolean(布尔型)
integer(整型)
float(浮点型,也称作 double)
string(字符串)
三种复合类型:
array(数组)
object(对象)
callable(可调用)
两种特殊类型:
resource(资源)
NULL(无类型)
类型查看函数:gettype($变量名)
类型和值查看函数:var_dump($变量名)
类型检验函数:is_type($变量名) 使用时具体为is_string()、is_int()、is_bool()等
echo和print
echo可以输出一个或多个字符串,没有返回值
<?php
echo "this","is","a","test";
?>
输出结果
print输出一个字符串,返回值为1
EOF
作用:按照原格式输出其内部的所有内容
结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,会解释内嵌的变量和转义符号
带单引号则不解释内嵌的变量和转义符号。
<?php
$a=<<<EOF
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
echo $a;
?>
运行结果
Boolean
<?php
$foo = True; // 设置 $foo 为 True,不区分大小写
?>
Integer
<?php
$a = 1234; // 十进制数
$a = -123; // 负数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0x1A; // 十六进制数 (等于十进制 26)
$a = 0b11111111; // 二进制数字 (等于十进制 255)
?>
Float
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
String
一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode
<?php
echo 'this is a simple string';
// 可以录入多行
echo 'You can also have embedded newlines in
strings this way as it is
okay to do';
// 输出: Arnold once said: "I'll be back"
echo 'Arnold once said: "I\'ll be back"';
// 输出: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';
// 输出: You deleted C:\*.*?
echo 'You deleted C:\*.*?';
// 输出: This will not expand: \n a newline
echo 'This will not expand: \n a newline';
// 输出: Variables do not $expand $either
echo 'Variables do not $expand $either';
?>
单引号定义法
表达单引号或反斜线时需要在前面加 \ 进行转义
不对其中的变量名作解析
<?php
$a="hello";
echo '$a';
//输出$a而不是$a的值hello
?>
双引号定义法
会对其中的变量名作解析
<?php
$a='hello';
echo "this will print $a";
//输出 this will print hello
?>
双引号中的单引号只是单纯的单引号,仍会对变量名作解析
<?php
$a = "1";
$var = "this is a test about'$a'";
echo $var;
?>
字符串长度strlen($变量名)
<?php
$a="hello";
echo strlen($a);
//输出5
?>
字符串拼接运算符 .
<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>
字符串查找strpos(字符串,被查找字符串),如果找到就返回第一个匹配字符的下标索引
<?php
echo strpos("Hello world!","world");
//返回 6
?>
类型比较
== 只比较值不比较类型
=== 既比较值也比较类型
常量
define(“常量名”,常量值)
<?php
// 区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING; // 输出 "欢迎访问 Runoob.com"
echo '<br>';
echo greeting; // 输出 "greeting"
?>
数组
使用array()函数创建数组
使用count($数组名)获取数组长度
<?php
$MyArray=array("a","b","c");
echo $MyArray[2];
//显示 c
echo count($MyArray);
//显示 3
?>
超级全局变量
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
函数
<?php
function PrintHW($name){
echo $name."Hello World";
return 1;
}
PrintHW("jack");
?>
魔术常量
PHP的命名还真是因吹斯听,一会超级一会魔术的
_LINE_
_FILE_
_FUNCTION_
_DIR_
等等等等
表单
1. $_GET变量
用于收集来自GET方法的键值对
使用$_GET[键名]获取值
示例
用GET方法提交键值对的GETTest.html
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="GETTest.php" method="get">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>
接收键值对的GETTest.php
欢迎 <?php echo $_GET["fname"]; ?>!<br>
你的年龄是 <?php echo $_GET["age"]; ?> 岁。
访问GETTest.html,输入信息,点击提交
URL栏变为
F12查看
响应页面
2. $_POST变量
用于收集来自GET方法的键值对
使用$_POST[键名]获取值
示例
POSTTest.html
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="POSTTest.php" method="post">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>
POSTTest.php
欢迎 <?php echo $_POST["fname"]; ?>!<br>
你的年龄是 <?php echo $_POST["age"]; ?> 岁。
访问POSTTest.html,输入信息,点击提交
URL变为POSTTest.php,但其后没有参数
F12查看
响应页面
3. $_REQUEST变量
预定义的 $_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容
也就是说上面的两个php文件中的$_GET和$_POST可以全部用$_REQUEST替代,效果一样
PHP连接MySQL
首先用phpinfo()检查一下有没有安装MySQLi
面向对象的连接方式
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// 创建连接
$conn = new mysqli($servername, $username, $password);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
?>
面向过程的连接方式
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "连接成功";
?>
连接在脚本执行完后会自动关闭
或者你可以使用以下代码手动关闭
$conn->close();
//面向对象
mysqli_close($conn);
//面向过程
我比较喜欢面向对象,所以以下省略掉面向过程的方式
MySQL建库建表
我偏好使用MySQL的shell
不作详解
假设已创建好数据库phptest和其中的表userpass
向表中插入数据
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "phptest";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "INSERT INTO userpass (username,password)
VALUES ('John', '123qwerty')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
访问此php文件后再进入MySQL检查一下
一个注册页面的示例
regist.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Regist Page</title>
</head>
<body>
<form action="regist.php" method="post">
<label for="username">用户名:</label><input type="text" id="username" name="yonghuming">
//向服务器提交的是name:value键值对
<label for="pass">密码:</label><input type="text" id="pass" name="mima">
<input type="submit" id="btn" value="注册">
//在页面上显示的文字是“注册”
</form>
</body>
</html>
regist.php
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "phptest";
$name=$_REQUEST["yonghuming"];
$pass=$_REQUEST["mima"];
//接收传入的键值对
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "INSERT INTO userpass (username,password)
VALUES ('$name','$pass')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
访问regist.html,输入信息,注册
查看MySQL