Appearance
新手易错点清单
语法错误
1. 缺少分号
错误示例:
php
<?php
echo "Hello World"
$name = "John" // 缺少分号
?>正确示例:
php
<?php
echo "Hello World";
$name = "John"; // 添加分号
?>2. 括号不匹配
错误示例:
php
<?php
if ($name == "John" {
echo "Hello John";
} // 缺少右括号
?>正确示例:
php
<?php
if ($name == "John") {
echo "Hello John";
} // 添加右括号
?>3. 引号使用错误
错误示例:
php
<?php
echo 'Hello World';
echo 'It's a beautiful day'; // 单引号内使用单引号
?>正确示例:
php
<?php
echo 'Hello World';
echo "It's a beautiful day"; // 使用双引号
// 或
echo 'It\'s a beautiful day'; // 转义单引号
?>变量和类型
1. 变量未定义
错误示例:
php
<?php
echo $name; // 变量未定义
?>正确示例:
php
<?php
$name = "John";
echo $name; // 先定义变量
?>2. 变量作用域错误
错误示例:
php
<?php
function test() {
$name = "John";
}
test();
echo $name; // 无法访问函数内的变量
?>正确示例:
php
<?php
$name = "John";
function test() {
global $name;
echo $name;
}
test();
?>3. 类型转换错误
错误示例:
php
<?php
$num = "123";
$sum = $num + 1; // 字符串与数字相加
?>正确示例:
php
<?php
$num = "123";
$sum = (int)$num + 1; // 显式类型转换
?>表单处理
1. 未检查表单提交
错误示例:
php
<?php
$name = $_POST['name']; // 直接访问 POST 数据
?>正确示例:
php
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = isset($_POST['name']) ? $_POST['name'] : '';
}
?>2. 未验证用户输入
错误示例:
php
<?php
$name = $_POST['name'];
echo "Hello, $name";
?>正确示例:
php
<?php
$name = isset($_POST['name']) ? $_POST['name'] : '';
if (empty($name)) {
echo "请输入姓名";
} else {
echo "Hello, " . htmlspecialchars($name);
}
?>3. 文件上传错误
错误示例:
php
<?php
$file = $_FILES['file'];
move_uploaded_file($file['tmp_name'], 'uploads/' . $file['name']); // 未检查上传错误
?>正确示例:
php
<?php
if (isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) {
$file = $_FILES['file'];
move_uploaded_file($file['tmp_name'], 'uploads/' . $file['name']);
} else {
echo "文件上传失败";
}
?>数据库操作
1. SQL 注入
错误示例:
php
<?php
$name = $_POST['name'];
$sql = "SELECT * FROM users WHERE name = '$name'";
$result = mysqli_query($conn, $sql); // 存在 SQL 注入风险
?>正确示例:
php
<?php
$name = $_POST['name'];
$sql = "SELECT * FROM users WHERE name = ?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "s", $name);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
?>2. 数据库连接错误
错误示例:
php
<?php
$conn = mysqli_connect('localhost', 'root', '', 'myDB'); // 未检查连接错误
?>正确示例:
php
<?php
$conn = mysqli_connect('localhost', 'root', '', 'myDB');
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
?>3. 未关闭数据库连接
错误示例:
php
<?php
$conn = mysqli_connect('localhost', 'root', '', 'myDB');
// 数据库操作
// 未关闭连接
?>正确示例:
php
<?php
$conn = mysqli_connect('localhost', 'root', '', 'myDB');
// 数据库操作
mysqli_close($conn); // 关闭连接
?>会话和 Cookie
1. 未启动会话
错误示例:
php
<?php
$_SESSION['name'] = "John"; // 未启动会话
?>正确示例:
php
<?php
session_start(); // 启动会话
$_SESSION['name'] = "John";
?>2. Cookie 设置错误
错误示例:
php
<?php
setcookie('name', 'John'); // 未设置过期时间
?>正确示例:
php
<?php
setcookie('name', 'John', time() + 3600); // 设置过期时间
?>文件操作
1. 路径错误
错误示例:
php
<?php
$file = fopen('file.txt', 'r'); // 相对路径可能导致错误
?>正确示例:
php
<?php
$file = fopen(__DIR__ . '/file.txt', 'r'); // 使用绝对路径
?>2. 未检查文件是否存在
错误示例:
php
<?php
$content = file_get_contents('file.txt'); // 未检查文件是否存在
?>正确示例:
php
<?php
if (file_exists('file.txt')) {
$content = file_get_contents('file.txt');
} else {
echo "文件不存在";
}
?>3. 未关闭文件指针
错误示例:
php
<?php
$file = fopen('file.txt', 'r');
// 文件操作
// 未关闭文件指针
?>正确示例:
php
<?php
$file = fopen('file.txt', 'r');
// 文件操作
fclose($file); // 关闭文件指针
?>安全问题
1. 密码存储不安全
错误示例:
php
<?php
$password = $_POST['password'];
// 直接存储密码
?>正确示例:
php
<?php
$password = $_POST['password'];
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// 存储哈希后的密码
?>2. XSS 攻击
错误示例:
php
<?php
$name = $_POST['name'];
echo "Hello, $name";
?>正确示例:
php
<?php
$name = $_POST['name'];
echo "Hello, " . htmlspecialchars($name);
?>3. CSRF 攻击
错误示例:
php
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// 直接处理表单数据
}
?>正确示例:
php
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('CSRF 攻击检测');
}
// 处理表单数据
}
?>其他常见错误
1. 大小写敏感
错误示例:
php
<?php
$Name = "John";
echo $name; // 变量名大小写敏感
?>正确示例:
php
<?php
$name = "John";
echo $name; // 变量名保持一致
?>2. 函数名错误
错误示例:
php
<?php
$arr = array(1, 2, 3);
echo lenght($arr); // 函数名错误
?>正确示例:
php
<?php
$arr = array(1, 2, 3);
echo count($arr); // 正确的函数名
?>3. 路径分隔符错误
错误示例:
php
<?php
$path = 'C:\xampp\htdocs\project'; // 路径分隔符错误
?>正确示例:
php
<?php
$path = 'C:/xampp/htdocs/project'; // 使用正斜杠
// 或
$path = 'C:\\xampp\\htdocs\\project'; // 转义反斜杠
?>总结
本文列出了 PHP 新手常见的错误,包括语法错误、变量和类型错误、表单处理错误、数据库操作错误、会话和 Cookie 错误、文件操作错误、安全问题和其他常见错误。通过了解这些错误并学习正确的写法,你可以避免在开发过程中犯同样的错误,提高代码质量和安全性。
在学习 PHP 的过程中,应该注意以下几点:
- 仔细检查语法,确保代码符合 PHP 语法规范
- 正确处理变量和类型,避免类型转换错误
- 对用户输入进行验证和过滤,防止安全问题
- 正确操作数据库,防止 SQL 注入
- 合理使用会话和 Cookie
- 安全处理文件操作
- 遵循最佳实践和编码规范
通过不断学习和实践,你可以逐渐掌握 PHP 开发技巧,减少错误的发生,提高开发效率。
