<?php // 连接数据库 $conn = mysqli_connect("localhost", "tms", "123456", "nut"); // 检查连接是否成功 if (!$conn) { die("数据库连接失败: " . mysqli_connect_error()); }echo "111"; // 处理表单提交 if ($_SERVER["REQUEST_METHOD"] == "POST") { // 获取表单数据 $aoiStep = $_POST['aoi_step']; $defectType = $_POST['defect_type']; $layerCode = $_POST['layer_code']; $type = $_POST['type']; $dpet = $_POST['dpet']; $subcode = $_POST['subcode']; $codeDescription = $_POST['code_description']; $determinationRule = $_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); } $stmt->bind_param("sssssssssssss", $aoiStep, $defectType, $layerCode, $type, $dpet, $subcode, $codeDescription, $imagePaths[0], $imagePaths[1], $imagePaths[2], $imagePaths[3], $imagePaths[4], $determinationRule); if ($stmt->execute()) { echo "数据插入成功"; } else { echo "数据插入失败: " . $stmt->error; } // 关闭数据库连接 mysqli_close($conn); } ?>在这个代码中,当我有多行数据时,只上传最后一条,我需要怎么修改,才能将数据都进行上传
时间: 2024-04-07 12:05:44 浏览: 56
php连接mysql之mysql_connect()与mysqli_connect()的区别
根据您提供的代码,您的for循环只保存了最后一行的图片路径,导致只有最后一行的数据被插入数据库。要解决这个问题,您可以在循环内部创建一个新的存储图片路径的数组,并将每次循环得到的图片路径添加到该数组中。然后,在执行插入数据的语句时,可以使用循环遍历新的图片路径数组,将每个路径依次绑定到预处理语句中。
下面是修改后的代码示例:
```php
// 处理上传的图片
$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);
}
// 绑定参数
$stmt->bind_param("sssssssssssss", $aoiStep, $defectType, $layerCode, $type, $dpet, $subcode, $codeDescription, $imagePaths[0], $imagePaths[1], $imagePaths[2], $imagePaths[3], $imagePaths[4], $determinationRule);
// 执行插入数据的语句
for ($i = 0; $i < count($imagePaths); $i++) {
if ($stmt->execute()) {
echo "数据插入成功";
} else {
echo "数据插入失败: " . $stmt->error;
}
}
// 关闭数据库连接
mysqli_close($conn);
```
通过上述修改,循环内部创建了一个新的存储图片路径的数组`$imagePaths`,并在每次循环中将图片路径添加到该数组中。然后,使用循环遍历`$imagePaths`数组,将每个路径依次绑定到预处理语句中,并执行插入数据的语句。
这样,无论有多少行数据,都会将每行的图片路径都插入到数据库中。
请注意,上述代码假设了表格中一共有5个图片字段,并且循环从1到5。如果实际情况不同,请根据需要进行调整。
如果您有任何其他问题,请随时提问。
阅读全文