php - 使用 PHP 将多个文件上传字段 URL 到 SQL 数据库

标签 php mysql

我对 PHP 完全陌生,但必须学习我在工作中可以真正快速完成的事情。我正在尝试创建一个表单,然后将答案保存到数据库中的一行和服务器上的图像。下面的代码来自网络上的教程等,其中有我的添加。我想除了将图像 URL 保存在数据库中之外,我已经完成了 90% 的工作。我猜代码中的“foreach”部分有问题。

我想要实现的是将每个文件上传 URL 保存在数据库的一列中。目前我只创建了 imageurl 字段,但我猜我需要 imageurl2 等。我尝试搜索下一部分但找不到它。我假设我真正需要实现的是代码调用所有多个文件上传 URL(数组)然后执行 SQL 插入的方法?

HTML 代码:

<form action="form.php" method="post" enctype="multipart/form-data">
  <label>Date:</label>
    <br>
    <input name="date" type="date">
    <label>Name:</label>
    <br>
    <select name="visitor">
      <option value="name1">Name One</option>
      <option value="name2">Name Two</option>
    </select>
    <label>Pub:</label>
    <br>
    <select name="pub">
      <option value="pubOne">Pub One</option>
      <option value="pubTwo".Pub Two</option>
    </select>
    <label>Comment:</label>
    <br>
    <textarea cols="30" rows="5" name="comment"></textarea>
    <label>Upload Image:</label>
    <br>
    <input name="fileToUpload[]" type="file" multiple="">
    <input class="formbtn" type="submit" value="Submit">
</form>

PHP 代码 - 我已将数据库连接详细信息替换为“xxx”,但我的代码连接正常

<?php
print_r($_POST);
$servername = 'xxx';
$username = 'xxx';
$password = 'xxx';
$dbname = 'xxx';

// Create connection to server
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "<div><center><h1>Connected successfully</h1></center></div>";

// Get all the values from input
    $date = $_POST['date'];
    $visitor = $_POST["visitor"];
    $pub = $_POST['pub'];
	$comment = $_POST['comment'];

date_default_timezone_set('UTC');
if (!file_exists("uploads/" .date('Y') . '/' .date('m') . '/')) {
    mkdir("uploads/" .date('Y') . '/' .date('m') . '/', 0777, true);
}

require_once('ImageManipulator.php');

foreach($_FILES['fileToUpload']['tmp_name'] as $key => $tmp_name) {
	
	if ($_FILES['fileToUpload']['error'][$key] > 0) {
    // Insert data into table
		$sql = "INSERT INTO visits (date, visitor, pub, comment)
		VALUES ('$date', '$visitor', '$pub', '$comment')";
	} else {

	$image_mime = image_type_to_mime_type(exif_imagetype($_FILES['fileToUpload']['tmp_name'][$key]));
	$allowedFiles = array("image/png","image/jpeg","image/gif");
	echo "File type:" . $image_mime . "<br>";
	if(!in_array($image_mime, $allowedFiles)){
    echo "The picture is not allowed.<br>";
	} else
	{
        $newNamePrefix = time() . '_';
        $manipulator = new ImageManipulator($_FILES['fileToUpload']['tmp_name'][$key]);
        // resizing to 200x200
        $newImage = $manipulator->resample(200, 200);
        // saving file to uploads folder
		$target_dir = "uploads/" .date('Y') . '/' .date('m') . '/';
		$target_file = $target_dir .date('Ymd-his') . '-' . $visitor . '-' . basename($_FILES["fileToUpload"]["name"][$key]);
        $manipulator->save($target_file);
		// Insert data into table
		$sql = "INSERT INTO visits (date, visitor, pub, comment, imageurl) VALUES ('$date', '$visitor', '$pub', '$comment', '$target_file')";
		echo 'Image resized and uploaded!<br>';
    }
}
}

if ($conn->query($sql) === TRUE) {
    echo "<p>New record created successfully</p>";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

?>

最佳答案

已更新

<form method="post" action="upload.php" enctype="multipart/form-data">
  <input name="filesToUpload[]" id="filesToUpload" type="file" multiple="" />
</form>

if(count($_FILES['uploads']['filesToUpload'])) {
    foreach ($_FILES['uploads']['filesToUpload'] as $file) {

        //do your upload stuff here
        echo $file;

    }
}

php 使用给定的 INPUT 名称创建上传的文件数组。该变量在 PHP 中始终是一个数组。

关于php - 使用 PHP 将多个文件上传字段 URL 到 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27267377/

相关文章:

php - 在iphone中加密nsdata并在php中解密

php - 如何在 PHP 中检测不明确和无效的日期时间?

php - Laravel - 防止多个请求同时创建重复记录

php - json_encode() 的问题

php - Laravel,如何添加即时条件以使用查询生成器进行查询

mysql - 来自不同表格的一个月内的每日报告

php - MYSQL/PHP 选择相同的值

mysql - 合并两个数字字符串

mysql - MySQL 语句的 Joda 时间问题

java - 安卓注册登录app报错