第一部分:PHP开发环境与基础语法
1.1 什么是PHP?
PHP(Hypertext Preprocessor)是一种开源的服务器端脚本语言,专门用于Web开发。PHP代码在服务器上执行,然后将结果以HTML形式发送到浏览器。
主要特点:
- 开源免费
- 跨平台(Windows/Linux/macOS)
- 与HTML完美融合
- 强大的数据库支持
- 丰富的内置函数库
1.2 搭建开发环境
使用XAMPP一站式解决方案:
- 下载XAMPP(https://www.apachefriends.org)
- 安装并启动Apache和MySQL服务
- 创建项目文件夹:
C:\xampp\htdocs\php_project
- 创建第一个PHP文件:
index.php
<?php
// 第一个PHP程序
echo "Hello, PHP World!";
?>
访问:http://localhost/php_project/index.php
第二部分:PHP核心语法
2.1 变量与数据类型
<?php
// 变量声明(以$开头)
$name = "John Doe";
$age = 30;
$height = 1.85;
$isStudent = true;
$skills = array("HTML", "CSS", "JavaScript");
// 输出变量
echo "<h2>用户信息</h2>";
echo "姓名: $name <br>";
echo "年龄: $age <br>";
echo "身高: $height 米 <br>";
echo "是否学生: " . ($isStudent ? "是" : "否") . "<br>";
// 遍历数组
echo "技能: ";
foreach($skills as $skill) {
echo $skill . ", ";
}
?>
2.2 运算符与表达式
<?php
$a = 15;
$b = 4;
// 算术运算符
$sum = $a + $b; // 19
$difference = $a - $b; // 11
$product = $a * $b; // 60
$quotient = $a / $b; // 3.75
$remainder = $a % $b; // 3
// 比较运算符
$isEqual = ($a == $b); // false
$isGreater = ($a > $b); // true
$isIdentical = ($a === $b); // false(值与类型都相同)
// 逻辑运算符
$andResult = ($a > 10 && $b < 5); // true
$orResult = ($a < 10 || $b > 3); // true
$notResult = !($a == $b); // true
?>
2.3 控制结构
条件语句
<?php
$score = 85;
// if-elseif-else
if ($score >= 90) {
$grade = "A";
} elseif ($score >= 80) {
$grade = "B";
} elseif ($score >= 70) {
$grade = "C";
} else {
$grade = "D";
}
echo "分数: $score, 等级: $grade<br>";
// switch语句
$day = date("N"); // 获取当前星期几(1-7)
switch ($day) {
case 1:
echo "今天是周一";
break;
case 2:
echo "今天是周二";
break;
// ...
default:
echo "今天是周末";
break;
}
?>
循环语句
<?php
// while循环
$i = 1;
echo "<h3>乘法表 (while)</h3>";
while ($i <= 10) {
echo "5 × $i = " . (5 * $i) . "<br>";
$i++;
}
// for循环
echo "<h3>斐波那契数列 (for)</h3>";
$num1 = 0;
$num2 = 1;
for ($j = 1; $j <= 10; $j++) {
// 计算下一个数
$next = $num1 + $num2;
echo "$num1, ";
// 更新数字
$num1 = $num2;
$num2 = $next;
}
?>
第三部分:PHP函数与表单处理
3.1 自定义函数
<?php
// 函数定义
function calculateCircle($radius) {
$area = pi() * pow($radius, 2);
$circumference = 2 * pi() * $radius;
return array(
'area' => round($area, 2),
'circumference' => round($circumference, 2)
);
}
// 函数调用
$radius = 7.5;
$results = calculateCircle($radius);
echo "<h3>圆的计算结果</h3>";
echo "半径: $radius<br>";
echo "面积: {$results['area']}<br>";
echo "周长: {$results['circumference']}";
?>
3.2 PHP与HTML表单交互
<!-- form.html -->
<!DOCTYPE html>
<html>
<head>
<title>用户注册</title>
</head>
<body>
<form action="process_form.php" method="POST">
<label>用户名: <input type="text" name="username" required></label><br>
<label>邮箱: <input type="email" name="email" required></label><br>
<label>密码: <input type="password" name="password" required></label><br>
<label>性别:</label>
<input type="radio" name="gender" value="male"> 男
<input type="radio" name="gender" value="female"> 女<br>
<input type="submit" value="注册">
</form>
</body>
</html>
<?php
// process_form.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 获取表单数据
$username = htmlspecialchars($_POST['username']);
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$password = $_POST['password'];
$gender = isset($_POST['gender']) ? $_POST['gender'] : '未知';
// 简单验证
$errors = array();
if (empty($username)) {
$errors[] = "用户名不能为空";
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "邮箱格式无效";
}
if (strlen($password) < 6) {
$errors[] = "密码至少需要6个字符";
}
// 显示结果
if (empty($errors)) {
echo "<h2>注册成功!</h2>";
echo "用户名: $username<br>";
echo "邮箱: $email<br>";
echo "性别: $gender";
// 在实际应用中,这里会存储到数据库
} else {
echo "<h2>发生错误:</h2>";
foreach ($errors as $error) {
echo "<p>$error</p>";
}
echo '<p><a href="form.html" rel="external nofollow" >返回表单</a></p>';
}
} else {
// 不是POST请求时重定向
header("Location: form.html");
exit();
}
?>
第四部分:文件操作与数据库基础
4.1 文件读写操作
<?php
// 写入文件
$logFile = "visits.log";
// 当前日期时间
$timestamp = date("Y-m-d H:i:s");
// 文件内容
$data = "$timestamp - 用户访问\n";
// 追加写入
file_put_contents($logFile, $data, FILE_APPEND);
echo "访问已记录到 $logFile<br>";
// 读取文件
if (file_exists($logFile)) {
echo "<h3>访问记录:</h3>";
echo "<pre>" . file_get_contents($logFile) . "</pre>";
} else {
echo "没有找到访问记录文件";
}
?>
4.2 MySQL数据库操作
<?php
// 数据库连接信息
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "php_demo";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 创建表(如果不存在)
$sql = "CREATE TABLE IF NOT EXISTS users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL,
email VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";
if ($conn->query($sql) !== TRUE) {
echo "创建表错误: " . $conn->error;
}
// 插入数据
$sql = "INSERT INTO users (username, email)
VALUES ('Alice', 'alice@example.com')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功<br>";
} else {
echo "错误: " . $sql . "<br>" . $conn->error;
}
// 查询数据
$sql = "SELECT id, username, email, created_at FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<h3>用户列表</h3>";
echo "<table border='1'>";
echo "<tr><th>ID</th><th>用户名</th><th>邮箱</th><th>注册时间</th></tr>";
while($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $row["id"] . "</td>";
echo "<td>" . $row["username"] . "</td>";
echo "<td>" . $row["email"] . "</td>";
echo "<td>" . $row["created_at"] . "</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "没有找到用户记录";
}
// 关闭连接
$conn->close();
?>
第五部分:完整案例 – 简易留言板
<?php
// 配置信息
$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "guestbook";
$table_name = "messages";
// 连接数据库
$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
if ($conn->connect_error) {
die("数据库连接失败: " . $conn->connect_error);
}
// 创建表(如果不存在)
$create_table = "CREATE TABLE IF NOT EXISTS $table_name (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100),
message TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";
if ($conn->query($create_table) !== TRUE) {
die("创建表失败: " . $conn->error);
}
// 处理表单提交
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['submit'])) {
$name = $conn->real_escape_string($_POST['name']);
$email = $conn->real_escape_string($_POST['email']);
$message = $conn->real_escape_string($_POST['message']);
if (!empty($name) && !empty($message)) {
$insert_sql = "INSERT INTO $table_name (name, email, message)
VALUES ('$name', '$email', '$message')";
if ($conn->query($insert_sql) !== TRUE) {
echo "留言提交失败: " . $conn->error;
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>简易留言板</title>
<style>
body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
.message { background: #f9f9f9; border: 1px solid #ddd; padding: 15px; margin: 10px 0; }
.message .meta { color: #666; font-size: 0.9em; margin-bottom: 10px; }
form { margin: 30px 0; padding: 20px; background: #f0f8ff; }
label { display: block; margin: 10px 0; }
input, textarea { width: 100%; padding: 8px; }
</style>
</head>
<body>
<h1>简易留言板</h1>
<!-- 留言表单 -->
<form method="POST" action="">
<label>姓名:
<input type="text" name="name" required>
</label>
<label>邮箱:
<input type="email" name="email">
</label>
<label>留言内容:
<textarea name="message" rows="5" required></textarea>
</label>
<input type="submit" name="submit" value="提交留言">
</form>
<h2>所有留言</h2>
<?php
// 查询留言
$select_sql = "SELECT name, email, message, created_at
FROM $table_name
ORDER BY created_at DESC";
$result = $conn->query($select_sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo '<div class="message">';
echo '<div class="meta">';
echo "来自: " . htmlspecialchars($row["name"]);
if (!empty($row["email"])) {
echo " (" . htmlspecialchars($row["email"]) . ")";
}
echo " - " . $row["created_at"];
echo '</div>';
echo '<p>' . nl2br(htmlspecialchars($row["message"])) . '</p>';
echo '</div>';
}
} else {
echo "<p>还没有留言,赶快留下第一条吧!</p>";
}
// 关闭数据库连接
$conn->close();
?>
</body>
</html>
学习建议
- 每日编码:PHP需要通过大量练习掌握
- 小步前进:从简单功能开始逐步复杂化
- 阅读文档:PHP官方手册是最好参考资料
- 参与项目:尝试开发小型实用工具或网站
- 加入社区:Stack Overflow、GitHub等平台获得帮助
PHP作为服务器端语言,配合MySQL数据库,是构建动态网站的强力组合。通过本教程的基础学习,您可以继续深入掌握面向对象编程、框架使用(Laravel等)、API开发等高级主题。