<?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 = 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"][$i]; // 生成唯一文件名 $targetFile = $targetDir . '/' . basename($fileName); // 将反斜杠替换为正斜杠 $targetFile = str_replace('\\', '/', $targetFile); if (isset($_FILES[$imageField]["tmp_name"][$i]) && $_FILES[$imageField]["error"][$i] == UPLOAD_ERR_OK && move_uploaded_file($_FILES[$imageField]["tmp_name"][$i], $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); } ?>无法正常上传
时间: 2024-02-12 18:27:02 浏览: 60
php连接mysql之mysql_connect()与mysqli_connect()的区别
在你提供的代码中,我注意到你没有创建预处理语句 `$stmt` 对象。请确保在执行绑定参数之前创建预处理语句对象。
以下是修改后的代码示例:
```php
<?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 = 0; $i < count($aoiSteps); $i++) {
// 创建预处理语句对象
$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 ($j = 1; $j <= 5; $j++) {
$imageField = "image" . $j;
$targetDir = "D:/phpstudy_pro/WWW/192.168.1.16/images"; // 设置上传目录的路径
$fileName = uniqid() . '_' . $_FILES[$imageField]["name"][$i]; // 生成唯一文件名
$targetFile = $targetDir . '/' . basename($fileName);
// 将反斜杠替换为正斜杠
$targetFile = str_replace('\\', '/', $targetFile);
if (isset($_FILES[$imageField]["tmp_name"][$i]) && $_FILES[$imageField]["error"][$i] == UPLOAD_ERR_OK && move_uploaded_file($_FILES[$imageField]["tmp_name"][$i], $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;
}
// 关闭预处理语句
$stmt->close();
}
// 关闭数据库连接
mysqli_close($conn);
}
?>
```
在上述代码中,我们在循环内部创建了预处理语句对象 `$stmt`,并在循环结束后关闭了预处理语句。
请确保你的 HTML 表单中的图片字段在多行数据时也使用了数组形式,并且你的上传目录路径 `D:/phpstudy_pro/WWW/192.168.1.16/images` 是正确的。
如果问题仍然存在,请提供详细的错误信息,以便我可以更好地帮助你解决问题。
阅读全文