<?php // 连接数据库 $conn = mysqli_connect("localhost", "tms", "123456", "nut"); // 检查连接是否成功 if (!$conn) { die("数据库连接失败: " . mysqli_connect_error()); } // 处理表单提交 if ($_SERVER["REQUEST_METHOD"] == "POST") { // 获取表单数据 $aoiSteps = $_POST['aoi_step']; $defectTypes = $_POST['defect_type']; $layerCodes = $_POST['layer_code']; $types = $_POST['type']; $dpets = $_POST['dpet']; $subcodes = $_POST['subcode']; $codeDescriptions = $_POST['code_description']; $determinationRules = $_POST['determination_rule']; $imagePaths = []; // 存储图片路径的数组 // 处理上传的图片 for ($i = 1; $i <= 5; $i++) { $imageField = "image" . $i; $targetDir = "D:/phpstudy_pro/WWW/192.168.1.16/images"; // 设置上传目录的路径 $fileName = uniqid() . '_' . $_FILES[$imageField]["name"]; // 生成唯一文件名 $targetFile = $targetDir . '/' . basename($fileName); // 将反斜杠替换为正斜杠 $targetFile = str_replace('\\', '/', $targetFile); if (isset($_FILES[$imageField]) && $_FILES[$imageField]["error"] == UPLOAD_ERR_OK && move_uploaded_file($_FILES[$imageField]["tmp_name"], $targetFile)) { $imagePath = $targetFile; } else { $imagePath = ""; } $imagePaths[] = $imagePath; } // 插入数据 $stmt = $conn->prepare("INSERT INTO tms (aoi_step, defect_type, layer_code, type, dpet, subcode, code_description, image1_path, image2_path, image3_path, image4_path, image5_path, determination_rule) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); if (!$stmt) { die("预处理失败: " . $conn->error); } foreach ($aoiSteps as $key => $aoiStep) { // 绑定参数 $stmt->bind_param("sssssssssssss", $aoiStep, $defectTypes[$key], $layerCodes[$key], $types[$key], $dpets[$key], $subcodes[$key], $codeDescriptions[$key], $imagePaths[0], $imagePaths[1], $imagePaths[2], $imagePaths[3], $imagePaths[4], $determinationRules[$key]); if ($stmt->execute()) { echo "数据插入成功"; } else { echo "数据插入失败: " . $stmt->error; } } // 关闭数据库连接 mysqli_close($conn); } ?>在这个代码中还存在一个问题,就是当我插入两行图片不同的数据时,在image1_path字段下是相同的图片,并非我数据对应是图片
时间: 2024-04-23 19:28:14 浏览: 145
在你的代码中,每次循环都使用相同的图片路径数组 `$imagePaths` 的元素来绑定到数据库的 `image1_path` 字段上,导致多行数据的 `image1_path` 字段值都相同。为了解决这个问题,你需要在循环中使用当前循环索引 `$i` 来获取正确的图片路径。
以下是修改后的代码示例:
```php
// 连接数据库
$conn = mysqli_connect("localhost", "tms", "123456", "nut");
// 检查连接是否成功
if (!$conn) {
die("数据库连接失败: " . mysqli_connect_error());
}
// 处理表单提交
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 获取表单数据
$aoiSteps = $_POST['aoi_step'];
$defectTypes = $_POST['defect_type'];
$layerCodes = $_POST['layer_code'];
$types = $_POST['type'];
$dpets = $_POST['dpet'];
$subcodes = $_POST['subcode'];
$codeDescriptions = $_POST['code_description'];
$determinationRules = $_POST['determination_rule'];
// 插入数据
$stmt = $conn->prepare("INSERT INTO tms (aoi_step, defect_type, layer_code, type, dpet, subcode, code_description, image1_path, image2_path, image3_path, image4_path, image5_path, determination_rule) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
if (!$stmt) {
die("预处理失败: " . $conn->error);
}
for ($i = 0; $i < count($aoiSteps); $i++) {
// 处理上传的图片
$imagePaths = []; // 存储图片路径的数组
for ($j = 1; $j <= 5; $j++) {
$imageField = "image" . $j;
$targetDir = "D:/phpstudy_pro/WWW/192.168.1.16/images"; // 设置上传目录的路径
$fileName = uniqid() . '_' . $_FILES[$imageField]["name"]; // 生成唯一文件名
$targetFile = $targetDir . '/' . basename($fileName);
// 将反斜杠替换为正斜杠
$targetFile = str_replace('\\', '/', $targetFile);
if (isset($_FILES[$imageField][$i]) && $_FILES[$imageField][$i]["error"] == UPLOAD_ERR_OK && move_uploaded_file($_FILES[$imageField][$i]["tmp_name"], $targetFile)) {
$imagePath = $targetFile;
} else {
$imagePath = "";
}
$imagePaths[] = $imagePath;
}
// 绑定参数
$stmt->bind_param("sssssssssssss", $aoiSteps[$i], $defectTypes[$i], $layerCodes[$i], $types[$i], $dpets[$i], $subcodes[$i], $codeDescriptions[$i], $imagePaths[0], $imagePaths[1], $imagePaths[2], $imagePaths[3], $imagePaths[4], $determinationRules[$i]);
if ($stmt->execute()) {
echo "数据插入成功";
} else {
echo "数据插入失败: " . $stmt->error;
}
}
// 关闭数据库连接
mysqli_close($conn);
}
```
在上述代码中,我们在循环中重新处理了每行数据的图片上传,并将每行数据对应的图片路径存储到 `$imagePaths` 数组中。然后,我们使用正确的图片路径来绑定到数据库的 `image1_path` 到 `image5_path` 字段上。这样,每行数据的图片路径就会正确地插入到数据库中。
阅读全文