我正在构建一个动态表单,允许用户为每个条目创建可变数量的行。该表格包含图片上传功能。我能够使图片上传工作,但不完全如我所愿 - 问题是我似乎被迫使用文件的'tmp_name',并且无法获取原始文件名。PHP - 从动态表单上传图像 - 文件命名问题
首先,这里是我的PHP(标题到MySQL)...
require '../credentials.php';
$servername = "localhost";
$dbname = "dynamic_test";
$target_dir = "uploads/";
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = '';
$name = $_POST['name'];
$route = $_POST['route'];
$site_array = $_POST['site'];
foreach($site_array as $siteNumber => $value){
$species_array[$siteNumber] = $_POST['species'.$siteNumber.''];
$deadinjured_array[$siteNumber] = $_POST['deadinjured'.$siteNumber.''];
$image_array[$siteNumber] = $_FILES['image'.$siteNumber.'']['tmp_name'];
foreach($species_array[$siteNumber] as $key => $species){
if($image_array[$siteNumber][$key]){
$target_file = ($target_dir . rand(1, 9999999) . strtolower(basename($image_array[$siteNumber][$key])));
if(move_uploaded_file($image_array[$siteNumber][$key], $target_file)){
$image_url = $target_file;
}
};
$deadinjured = $deadinjured_array[$siteNumber][$key];
$sql .= "INSERT INTO test (volunteer, route, site, species, deadinjured, image_url)
VALUES ('$name', '$route', '$siteNumber', '$species', '$deadinjured', '$image_url');";
};
};
if ($conn->multi_query($sql) === TRUE) {
echo "MySQL thanks you";
$conn->close();
};
声明本线 -
$image_array[$siteNumber] = $_FILES['image'.$siteNumber.'']['tmp_name'];
为了获得图像转换成$ image_array,他们要求无论是['name']或['tmp_name']后缀 - 在此处使用['name']会导致move_uploaded_file
函数失败 - 这会生成错误Undefined variable: image_url
。但是,我发现通过将['tmp_name']构建到$ image_array变量中,我能够使move_uploaded_file
函数正常工作,因为该函数期望在第一个参数中使用['tmp_name']后缀。
所以我的问题是这样的 - 有没有办法使用实际文件名而不是临时名称将图像存入图像数组?这并不是什么大问题 - 上面的代码确实有效,我不需要保留这个特定项目的实际文件名 - 但我仍然想知道这样做的正确方法。
谢谢。
这是返回了一些错误 - '未定义抵消:1 '和'未定义变量:image_url'。 – skwidbreth
是的,值得注意的是,这仍在开发中,所以目前还没有内建验证或SQL注入防护功能。正在努力让流量下降...... – skwidbreth