php - 尝试在单独的行中上传 2 个文件时数据库没有插入数据,文件也没有上传到设置的目录中,有什么可能的解决方法吗?
问题描述
我得出的结论是我的最后一个问题不是很清楚。我正在尝试将两个文件上传到我的 MYSQL 数据库中的 2 个不同的行中,但是当我执行代码时,文件不会被上传,它们的路径也不会被注册。该查询根本不执行,它甚至不插入不是文件路径的数据。无论如何,这里是变量、数组和查询的代码:
if (isset($_POST['bsw'])) {
$name1 = str_replace("<","<",$_POST['name']);
$name = mysqli_real_escape_string($conn, $name1);
$powers1 = str_replace("<","<",$_POST['powers']);
$powers = mysqli_real_escape_string($conn, $powers1);
$weaknesses1 = str_replace("<","<",$_POST['weaknesses']);
$weaknesses = mysqli_real_escape_string($conn, $weaknesses1);
$about1 = str_replace("<","<",$_POST['about']);
$about = mysqli_real_escape_string($conn, $about1);
$available1 = str_replace("<","<",$_POST['available']);
$available = mysqli_real_escape_string($conn, $available1);
$demoFiletype1 = str_replace("<","<",$_POST['filetype']);
$demoFiletype = mysqli_real_escape_string($conn, $demoFiletype1);
$iconDir = "files/uploads/bsw/icons/";
$iconName = basename($_FILES['icon']['name']);
$iconTemp = $_FILES['icon']['tmp_name'];
$iconError = $_FILES['icon']['error'];
$iconType = explode('.', $iconName);
$iconActualType = strtolower(end($iconType));
$iconAllowed = array('png', 'jpeg', 'jpg', 'gif');
$owner = $user->data['username'];
$ownerId = $user->data['user_id'];
$allowTypes = array('jpg','png','jpeg','gif');
$demoDir = "files/uploads/bsw/demos/";
$demoName = basename($_FILES['demo']['name']);
$demoTemp = $_FILES['demo']['tmp_name'];
$demoError = $_FILES['demo']['error'];
$demoType = explode('.', $demoName);
$demoActualType = strtolower(end($demoType));
$demoAllowed = array('swf', 'mp4');
if (empty($name) || empty($powers) || empty($weaknesses) || empty($about) || empty($iconName)){
echo '<p style="color: red; margin-left: 10px; margin-top: 5px;">Please Fill in All Fields</p>';
} else {
if(!in_array($iconActualType, $iconAllowed)) {
if($iconError === 1) {
echo '<p style="color: red; margin-left: 10px; margin-top: 5px;">Invalid filetype, only PNG, JPEG, JPG and GIF are allowed.</p>';
} else {
$iconNameNew = uniqid('', true).".".$iconActualType;
$iconDestination = __DIR__ . "files/uploads/bsw/icons/" . $iconNameNew;
$iconUpload = move_uploaded_file($iconTemp, $iconDestination);
if(!in_array($demoActualType, $demoAllowed)) {
if($demoError === 1) {
echo '<p style="color: red; margin-left: 10px; margin-top: 5px;">Invalid filetype, only SWF and MP4 are allowed.</p>';
} else {
$demoNameNew = uniqid('', true).".".$demoActualType;
$demoDestination = __DIR__ . "files/uploads/bsw/demos/" . $demoNameNew;
$demoUpload = move_uploaded_file($demoTemp, $demoDestination);
$fileUpload = mysqli_real_escape_string($iconUpload, $demoUpload);
if ($fileUpload) {
$sql = ("INSERT INTO
bsw
(`bsw_name`, `bsw_about`, `bsw_points`, `bsw_demo_location`, `bsw_power`, `bsw_weaknesses`, `bsw_icon_location`, `bsw_availability`, `bsw_owner`, `bsw_owner_id`, `bsw_type`)
VALUES
('$name', '$about', '0', '$demoDestination', '$powers', '$weaknesses', '$iconDestination', '$available', '$owner', '$ownerId', '$demoFiletype')");
mysqli_query($conn, $sql) or die("Error : ".mysqli_error($conn));
print_r($_FILES);
} else {
echo "Error uploading files, please try again later.";
}
}
}
}
}
}
}
这是表格:
<form action="" method="post" enctype="multipart/form-data">
<input style="margin-left: 10px; margin-top: 5px;" type="text" name="name" placeholder="BSW Name"><br>
<textarea style="margin-left: 10px; margin-top: 5px; width: 200px; height: 80px;" type="text" name="powers" placeholder="BSW Powers (seprated by commas)"></textarea>
<br>
<textarea style="margin-left: 10px; margin-top: 5px; width: 200px; height: 80px;" type="text" name="weaknesses" placeholder="BSW Weaknesses (seprated by commas)"></textarea>
<br>
<textarea style="margin-left: 10px; margin-top: 5px; width: 250px; height: 80px;" type="text" name="about" placeholder="BSW About (seprated by commas)"></textarea>
<br>
<strong>Are you currently available?</strong>
<select name="available">
<option name="yes">yes</option>
<option name="no">no</option>
</select>
<br><br>
<strong>Icons bigger than 100x100 will be rescaled</strong><br>
<input style="margin-left: 10px; margin-top: 5px;" type="file" name="icon"><br>
<strong>Demonstration (Only supports swf and mp4 filetypes): </strong><br>
<input style="margin-left: 10px; margin-top: 5px;" type="file" name="demo"><br><br>
<strong>Demo Filetype (Select none if you do not have a demo)</strong><br>
<select name="filetype">
<option name="mp4">mp4</option>
<option name="swf">swf</option>
<option name="none">none</option>
</select>
<br><br>
<button style="margin-left: 10px; margin-top: 5px;" type="submit" name="bsw">Submit BSW</button><br>
</form>
任何和所有的帮助表示赞赏!
编辑: 虽然对准备好的语句的帮助很大,我真的很感激,但由于文件上传脚本没有首先执行,查询仍然没有被执行,所以我仍然需要帮助,因为我对此感到非常傻眼。
解决方案
就像 JNevill 所说,由于您使用的是 mysqli,因此您可能应该使用绑定参数:
$sql = $connection->prepare("INSERT INTO bsw (bsw_name, bsw_about, bsw_points, bsw_demo_location, bsw_power, bsw_weaknesses, bsw_icon_location, bsw_availability, bsw_owner, bsw_owner_id, bsw_type) VALUES(?,?,?,?,?,?, ?,?,?,?,?)");
$sql->bind_param("sssssssssis", $name, $about, '0', $demoDestination, $powers, $weaknesses, $iconDestination, $available, $owner, $ownerId, $demoFiletype);
$sql->执行();
// bind_param中的“s”代表“字符串类型”,“i”代表“整数类型”。通过查看您的变量,即我假设它们按该顺序排列的类型。注意引号或缺少引号。
推荐阅读
- signalr - 无法在浏览器中连接到 Azure signalR
- c# - C# OleDB,从 Excel 导入,格式错误
- spring-boot - Spring Boot Actuator - Metrics process.start.time 不正确的 unix 纪元值
- sql - 如何使用 TypeORM 为 Oracle SQL 查询输入日期格式?
- python - 如果我的条件不正确,我怎么能忽略我的代码中的这个错误?
- android - 在 AOSP healthd 中使用 -std=C++17
- angular - 如何定义一个需要在一个位置进入多个 ngFor 循环以便不重复代码的 Angular 模板?
- snowflake-cloud-data-platform - 如何通过自定义 OAuth 集成连接到 Snowflake Web UI
- android - “字符串”类型不是“时间戳”类型的子类型
- python - Windows 上的 python 输入优化?(和Xbox指南按钮可能检测到?)