chore: 删除测试和调试相关文件

移除不再需要的测试脚本、调试页面和解决方案文档,包括:
- 各种测试PHP文件(test.php, test_filters.php等)
- VIP功能测试和调试页面(test_vip*.php, vip_debug_page.html等)
- 数据库连接测试脚本(test_db_connection.php)
- 解决方案文档(SOLUTIONS.md, VIP_*_Report.md)
This commit is contained in:
2025-12-05 01:38:06 +08:00
parent ef9510c453
commit 0eb0cf12fb
24 changed files with 459 additions and 4 deletions
+1 -4
View File
@@ -1,10 +1,7 @@
# 数据库配置文件
config.php
# 测试文件
test/
test*.php
test*.html
# 日志文件
*.log
View File
+54
View File
@@ -0,0 +1,54 @@
<?php
// 简化版VIP客户测试
header('Content-Type: text/plain; charset=utf-8');
echo "=== VIP客户搜索问题诊断 ===\n\n";
// 1. 检查数据库连接
echo "1. 测试数据库连接...\n";
try {
require_once 'db_connect.php';
echo "✅ 数据库连接成功\n";
// 2. 检查VIP客户表
echo "\n2. 检查VIP客户表...\n";
$stmt = $pdo->query("SELECT COUNT(*) as count FROM vip_customers");
$result = $stmt->fetch();
echo "VIP客户表记录总数: {$result['count']}\n";
// 3. 检查活跃状态
echo "\n3. 检查活跃VIP客户...\n";
$stmt = $pdo->query("SELECT COUNT(*) as count FROM vip_customers WHERE is_active = 1");
$result = $stmt->fetch();
echo "活跃VIP客户数: {$result['count']}\n";
// 4. 显示所有VIP客户详情
echo "\n4. 所有VIP客户详情:\n";
$stmt = $pdo->query("SELECT * FROM vip_customers ORDER BY created_at DESC");
$customers = $stmt->fetchAll();
foreach ($customers as $customer) {
echo " - ID: {$customer['id']}\n";
echo " 姓名: {$customer['customer_name']}\n";
echo " 手机: {$customer['phone']}\n";
echo " 活跃: " . ($customer['is_active'] ? '是' : '否') . "\n";
echo " 创建时间: {$customer['created_at']}\n";
echo " ---\n";
}
// 5. 测试API接口
echo "\n5. 测试VIP客户API...\n";
$response = @file_get_contents('http://localhost/get_vip_customers.php');
if ($response === false) {
echo "❌ 无法访问API接口,请检查PHP服务器是否运行\n";
} else {
echo "API返回数据:\n";
echo $response . "\n";
}
} catch (Exception $e) {
echo "❌ 错误: " . $e->getMessage() . "\n";
}
echo "\n=== 诊断完成 ===\n";
?>
+159
View File
@@ -0,0 +1,159 @@
<?php
// 调试脚本:验证数据库连接和VIP客户数据
header('Content-Type: text/html; charset=utf-8');
// 引入配置文件
require_once 'config.php';
// 确保配置变量存在
if (!isset($host) || !isset($username) || !isset($password) || !isset($database)) {
die('配置文件加载失败:无法读取数据库配置信息');
}
echo '<h2>VIP客户数据库调试</h2>';
echo '<h3>1. 配置信息</h3>';
echo '主机: ' . htmlspecialchars($host) . '<br>';
echo '数据库: ' . htmlspecialchars($database) . '<br>';
echo '用户名: ' . htmlspecialchars($username) . '<br>';
echo '<h3>2. 数据库连接测试</h3>';
try {
$pdo = new PDO("mysql:host=$host;dbname=$database;charset=utf8mb4", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo '<span style="color: green;">✅ 数据库连接成功</span><br>';
// 查询表是否存在
echo '<h3>3. 检查VIP表是否存在</h3>';
$checkTable = $pdo->query("SHOW TABLES LIKE 'vip_customers'");
if ($checkTable->rowCount() > 0) {
echo '<span style="color: green;">✅ 表 vip_customers 存在</span><br>';
// 查询表结构
echo '<h3>4. VIP表结构</h3>';
$describeTable = $pdo->query("DESCRIBE vip_customers");
echo '<table border="1" cellpadding="5" cellspacing="0"><tr><th>字段名</th><th>类型</th><th>空值</th><th>键</th><th>默认值</th><th>额外</th></tr>';
while ($row = $describeTable->fetch(PDO::FETCH_ASSOC)) {
echo '<tr>';
echo '<td>' . htmlspecialchars($row['Field']) . '</td>';
echo '<td>' . htmlspecialchars($row['Type']) . '</td>';
echo '<td>' . htmlspecialchars($row['Null']) . '</td>';
echo '<td>' . htmlspecialchars($row['Key']) . '</td>';
echo '<td>' . htmlspecialchars($row['Default'] ?? '') . '</td>';
echo '<td>' . htmlspecialchars($row['Extra'] ?? '') . '</td>';
echo '</tr>';
}
echo '</table>';
// 查询VIP客户数据 - 活跃状态
echo '<h3>5. 活跃VIP客户数据 (is_active=1)</h3>';
$activeVips = $pdo->query("SELECT id, customer_name, phone, car_model, car_number, email, birthday, is_active FROM vip_customers WHERE is_active = 1 ORDER BY created_at DESC");
$activeVipCount = $activeVips->rowCount();
echo '活跃VIP客户数量: ' . $activeVipCount . '<br>';
if ($activeVipCount > 0) {
echo '<table border="1" cellpadding="5" cellspacing="0"><tr><th>ID</th><th>姓名</th><th>手机号</th><th>车型</th><th>车牌号</th><th>邮箱</th><th>生日</th><th>状态</th></tr>';
while ($vip = $activeVips->fetch(PDO::FETCH_ASSOC)) {
echo '<tr>';
echo '<td>' . htmlspecialchars($vip['id']) . '</td>';
echo '<td>' . htmlspecialchars($vip['customer_name']) . '</td>';
echo '<td>' . htmlspecialchars($vip['phone']) . '</td>';
echo '<td>' . htmlspecialchars($vip['car_model']) . '</td>';
echo '<td>' . htmlspecialchars($vip['car_number']) . '</td>';
echo '<td>' . htmlspecialchars($vip['email']) . '</td>';
echo '<td>' . htmlspecialchars($vip['birthday']) . '</td>';
echo '<td>' . ($vip['is_active'] ? '活跃' : '非活跃') . '</td>';
echo '</tr>';
}
echo '</table>';
}
// 查询所有VIP客户数据(包括非活跃)
echo '<h3>6. 所有VIP客户数据(包括非活跃)</h3>';
$allVips = $pdo->query("SELECT id, customer_name, phone, car_model, car_number, email, birthday, is_active FROM vip_customers ORDER BY created_at DESC");
$allVipCount = $allVips->rowCount();
echo '总VIP客户数量: ' . $allVipCount . '<br>';
if ($allVipCount > 0) {
echo '<table border="1" cellpadding="5" cellspacing="0"><tr><th>ID</th><th>姓名</th><th>手机号</th><th>车型</th><th>车牌号</th><th>邮箱</th><th>生日</th><th>状态</th></tr>';
while ($vip = $allVips->fetch(PDO::FETCH_ASSOC)) {
echo '<tr>';
echo '<td>' . htmlspecialchars($vip['id']) . '</td>';
echo '<td>' . htmlspecialchars($vip['customer_name']) . '</td>';
echo '<td>' . htmlspecialchars($vip['phone']) . '</td>';
echo '<td>' . htmlspecialchars($vip['car_model']) . '</td>';
echo '<td>' . htmlspecialchars($vip['car_number']) . '</td>';
echo '<td>' . htmlspecialchars($vip['email']) . '</td>';
echo '<td>' . htmlspecialchars($vip['birthday']) . '</td>';
echo '<td>' . ($vip['is_active'] ? '活跃' : '非活跃') . '</td>';
echo '</tr>';
}
echo '</table>';
}
// 尝试查询用户提供的手机号
$userPhone = '18699627661';
echo '<h3>7. 查询特定手机号: ' . htmlspecialchars($userPhone) . '</h3>';
$stmt = $pdo->prepare("SELECT id, customer_name, phone, car_model, car_number, is_active FROM vip_customers WHERE phone = :phone");
$stmt->execute(['phone' => $userPhone]);
$specificVip = $stmt->fetch(PDO::FETCH_ASSOC);
if ($specificVip) {
echo '<span style="color: green;">✅ 找到匹配的VIP客户</span><br>';
echo '姓名: ' . htmlspecialchars($specificVip['customer_name']) . '<br>';
echo '手机号: ' . htmlspecialchars($specificVip['phone']) . '<br>';
echo '车型: ' . htmlspecialchars($specificVip['car_model']) . '<br>';
echo '车牌号: ' . htmlspecialchars($specificVip['car_number']) . '<br>';
echo '状态: ' . ($specificVip['is_active'] ? '活跃' : '非活跃') . '<br>';
} else {
echo '<span style="color: red;">❌ 未找到该手机号的VIP客户</span><br>';
}
// 模拟get_vip_customers.php的JSON响应
echo '<h3>8. 模拟get_vip_customers.php的JSON响应</h3>';
$vipCustomers = $pdo->query("SELECT id, customer_name, phone, car_model, car_number, email, birthday, is_active FROM vip_customers WHERE is_active = 1 ORDER BY created_at DESC")->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
echo htmlspecialchars(json_encode($vipCustomers, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
echo '</pre>';
} else {
echo '<span style="color: red;">❌ 表 vip_customers 不存在</span><br>';
// 列出所有表
echo '数据库中的所有表:<br>';
$tables = $pdo->query("SHOW TABLES");
while ($table = $tables->fetch(PDO::FETCH_NUM)) {
echo '- ' . htmlspecialchars($table[0]) . '<br>';
}
}
} catch(PDOException $e) {
echo '<span style="color: red;">❌ 数据库连接失败</span><br>';
echo '错误信息: ' . htmlspecialchars($e->getMessage()) . '<br>';
}
// 添加插入测试数据的功能
echo '<h3>9. 插入测试VIP数据</h3>';
echo '<form method="post" action="">';
echo '<input type="hidden" name="insert_test_data" value="1">';
echo '<button type="submit">插入测试VIP数据</button>';
echo '</form>';
if (isset($_POST['insert_test_data'])) {
try {
$pdo = new PDO("mysql:host=$host;dbname=$database;charset=utf8mb4", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 插入用户提到的手机号作为测试数据
$stmt = $pdo->prepare("INSERT INTO vip_customers (customer_name, phone, car_model, car_number, email, birthday, notes, is_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->execute(['测试用户', '18699627661', '测试车型', '测试车牌', 'test@example.com', '1990-01-01', '测试数据,用于验证搜索功能', 1]);
echo '<span style="color: green;">✅ 测试数据插入成功</span><br>';
echo '已插入VIP客户: 测试用户 (18699627661)<br>';
} catch(PDOException $e) {
echo '<span style="color: red;">❌ 数据插入失败</span><br>';
echo '错误信息: ' . htmlspecialchars($e->getMessage()) . '<br>';
}
}
// 输出脚本结束
?>
View File
View File
+245
View File
@@ -0,0 +1,245 @@
<?php
// VIP客户数据验证脚本
header('Content-Type: text/html; charset=utf-8');
// 数据库连接
function connectDatabase() {
$servername = "localhost";
$username = "root";
$password = "";
$database = "carwash_booking";
try {
$pdo = new PDO("mysql:host=$servername;dbname=$database;charset=utf8", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
} catch(PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
}
$pdo = connectDatabase();
echo "<!DOCTYPE html>
<html lang='zh-CN'>
<head>
<meta charset='UTF-8'>
<title>VIP客户数据验证</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; background: #f5f5f5; }
.container { max-width: 1200px; margin: 0 auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
h1, h2 { color: #333; }
.table { width: 100%; border-collapse: collapse; margin: 20px 0; }
.table th, .table td { border: 1px solid #ddd; padding: 12px; text-align: left; }
.table th { background-color: #f2f2f2; font-weight: bold; }
.table tr:nth-child(even) { background-color: #f9f9f9; }
.success { color: #28a745; font-weight: bold; }
.error { color: #dc3545; font-weight: bold; }
.warning { color: #ffc107; font-weight: bold; }
.info { color: #17a2b8; }
.query-box { background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 4px; padding: 15px; margin: 10px 0; }
.count-box { background: #e9ecef; border-radius: 4px; padding: 15px; margin: 10px 0; text-align: center; }
.count-number { font-size: 24px; font-weight: bold; color: #007bff; }
</style>
</head>
<body>
<div class='container'>
<h1>🔍 VIP客户数据验证报告</h1>";
// 1. 检查VIP客户表是否存在
echo "<h2>1. 数据库表检查</h2>";
try {
$stmt = $pdo->query("SHOW TABLES LIKE 'vip_customers'");
$tableExists = $stmt->rowCount() > 0;
if ($tableExists) {
echo "<p class='success'>✅ vip_customers 表存在</p>";
// 获取表结构
$stmt = $pdo->query("DESCRIBE vip_customers");
$columns = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<h3>表结构:</h3>";
echo "<table class='table'>";
echo "<tr><th>字段名</th><th>类型</th><th>是否为空</th><th>键</th><th>默认值</th><th>额外</th></tr>";
foreach ($columns as $column) {
echo "<tr>";
echo "<td>{$column['Field']}</td>";
echo "<td>{$column['Type']}</td>";
echo "<td>{$column['Null']}</td>";
echo "<td>{$column['Key']}</td>";
echo "<td>{$column['Default']}</td>";
echo "<td>{$column['Extra']}</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "<p class='error'>❌ vip_customers 表不存在</p>";
}
} catch (Exception $e) {
echo "<p class='error'>❌ 表检查失败: " . $e->getMessage() . "</p>";
}
// 2. VIP客户总数统计
echo "<h2>2. VIP客户统计</h2>";
try {
// 总数
$stmt = $pdo->query("SELECT COUNT(*) as total FROM vip_customers");
$totalResult = $stmt->fetch(PDO::FETCH_ASSOC);
$totalCount = $totalResult['total'];
echo "<div class='count-box'>";
echo "<p>VIP客户总数</p>";
echo "<div class='count-number'>$totalCount</div>";
echo "</div>";
// 活跃状态统计
$stmt = $pdo->query("SELECT is_active, COUNT(*) as count FROM vip_customers GROUP BY is_active");
$activeStats = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<h3>按状态统计:</h3>";
echo "<table class='table'>";
echo "<tr><th>状态</th><th>数量</th><th>说明</th></tr>";
foreach ($activeStats as $stat) {
$status = $stat['is_active'] ? '活跃' : '非活跃';
$class = $stat['is_active'] ? 'success' : 'warning';
echo "<tr class='$class'>";
echo "<td>$status</td>";
echo "<td>{$stat['count']}</td>";
echo "<td>" . ($stat['is_active'] ? '可搜索' : '不可搜索') . "</td>";
echo "</tr>";
}
echo "</table>";
} catch (Exception $e) {
echo "<p class='error'>❌ 统计查询失败: " . $e->getMessage() . "</p>";
}
// 3. 活跃VIP客户详细数据
echo "<h2>3. 活跃VIP客户详细数据</h2>";
try {
$stmt = $pdo->query("SELECT * FROM vip_customers WHERE is_active = 1 ORDER BY created_at DESC");
$vipCustomers = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (count($vipCustomers) > 0) {
echo "<p class='success'>✅ 找到 " . count($vipCustomers) . " 个活跃VIP客户</p>";
echo "<table class='table'>";
echo "<tr>";
echo "<th>ID</th>";
echo "<th>客户姓名</th>";
echo "<th>手机号</th>";
echo "<th>邮箱</th>";
echo "<th>车型</th>";
echo "<th>车牌号</th>";
echo "<th>注册时间</th>";
echo "</tr>";
foreach ($vipCustomers as $customer) {
echo "<tr>";
echo "<td>{$customer['id']}</td>";
echo "<td><strong>{$customer['customer_name']}</strong></td>";
echo "<td>{$customer['phone']}</td>";
echo "<td>{$customer['email']}</td>";
echo "<td>{$customer['car_model']}</td>";
echo "<td>{$customer['car_number']}</td>";
echo "<td>{$customer['created_at']}</td>";
echo "</tr>";
}
echo "</table>";
// 显示原始JSON数据
echo "<h3>原始JSON数据 (API返回格式):</h3>";
echo "<div class='query-box'>";
echo "<pre>" . json_encode($vipCustomers, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "</pre>";
echo "</div>";
} else {
echo "<p class='warning'>⚠️ 没有找到活跃的VIP客户</p>";
}
} catch (Exception $e) {
echo "<p class='error'>❌ 查询VIP客户失败: " . $e->getMessage() . "</p>";
}
// 4. 搜索功能测试
echo "<h2>4. 搜索功能测试</h2>";
if (isset($vipCustomers) && count($vipCustomers) > 0) {
echo "<p>基于实际数据进行搜索测试:</p>";
// 测试各种搜索词
$testQueries = [
'姓名首字' => substr($vipCustomers[0]['customer_name'], 0, 1),
'姓名中字' => mb_substr($vipCustomers[0]['customer_name'], 1, 1, 'UTF-8'),
'手机前3位' => substr($vipCustomers[0]['phone'], 0, 3),
'手机后4位' => substr($vipCustomers[0]['phone'], -4),
'姓氏' => '张',
'号段' => '139'
];
foreach ($testQueries as $description => $query) {
echo "<div class='query-box'>";
echo "<strong>测试: $description (搜索词: '$query')</strong><br>";
$results = [];
foreach ($vipCustomers as $customer) {
$nameMatch = mb_stripos($customer['customer_name'], $query, 0, 'UTF-8') !== false;
$phoneMatch = stripos($customer['phone'], $query) !== false;
if ($nameMatch || $phoneMatch) {
$results[] = $customer['customer_name'] . ' (' . $customer['phone'] . ')';
}
}
if (count($results) > 0) {
echo "<span class='success'>✅ 找到 " . count($results) . " 个结果:</span><br>";
foreach ($results as $result) {
echo "$result<br>";
}
} else {
echo "<span class='warning'>⚠️ 未找到匹配结果</span>";
}
echo "</div>";
}
} else {
echo "<p class='warning'>⚠️ 没有VIP客户数据可供测试</p>";
}
// 5. API端点测试
echo "<h2>5. API端点测试</h2>";
echo "<p>测试 get_vip_customers.php 接口:</p>";
if (file_exists('get_vip_customers.php')) {
echo "<p class='success'>✅ get_vip_customers.php 文件存在</p>";
// 模拟API调用
ob_start();
include 'get_vip_customers.php';
$apiOutput = ob_get_clean();
echo "<div class='query-box'>";
echo "<strong>API输出:</strong><br>";
echo "<pre>" . htmlspecialchars($apiOutput) . "</pre>";
echo "</div>";
// 尝试解析JSON
try {
$apiData = json_decode($apiOutput, true);
if (json_last_error() === JSON_ERROR_NONE) {
echo "<p class='success'>✅ API返回有效JSON数据</p>";
echo "<p>数据记录数: " . (is_array($apiData) ? count($apiData) : 'N/A') . "</p>";
} else {
echo "<p class='error'>❌ API返回无效JSON: " . json_last_error_msg() . "</p>";
}
} catch (Exception $e) {
echo "<p class='error'>❌ JSON解析失败: " . $e->getMessage() . "</p>";
}
} else {
echo "<p class='error'>❌ get_vip_customers.php 文件不存在</p>";
}
echo "</div></body></html>";
?>