-6ren">
gpt4 book ai didi

php - 多个文件上传 仅上传一个帖子

转载 作者:行者123 更新时间:2023-11-30 22:04:27 25 4
gpt4 key购买 nike

我有以下使用 php 和 mysql 上传多个文件的代码。但出于某种原因,如果选择了“n”个文件,似乎只上传了最后一个(或“第 n”个)文件。

以下是相应的文件:

HTML

    <form enctype="multipart/form-data" method="post" action="<?php echo htmlentities($_SERVER["PHP_SELF"]);?>">
<div class="form-group">
<textarea class="form-control" name="postbox" id="pbox"></textarea>
</div>
<h5><strong>Add media:</strong></h5>
<input type="file" name="pfile[]" multiple="multiple" accept="image/*,audio/*,video/*"><br/>
<button type="submit" class="btn btn-success" name="psubmit">Post!</button>
</form>
<div class="posts">
<?php
if(isset($_POST['postbox'])){
$ps = escape($_POST['postbox']);
}
include_once('includes/uploadfile.php'); ?>
</div>

includes/uploadfile.php

     <?php ob_start();
require_once 'core/init.php';

if(isset($_POST['psubmit']))
{
foreach ($_FILES['pfile']['tmp_name'] as $key=>$value)
{
$pfname = $_FILES["pfile"]['name'][$key];
$pftype = $_FILES['pfile']['type'][$key];
$pfsize = $_FILES['pfile']['size'][$key];
$pftmploc = $_FILES['pfile']['tmp_name'][$key];
$pferror = $_FILES['pfile']['error'][$key];
$blast = explode(".", $pfname);
$pfextn = end($blast);
if (!empty($ps) && empty($pfname))
{

$dbfname = NULL;
$abc = $get->addPost($a, $ps, $pfname);
header('location:'.escape($_SERVER['PHP_SELF'])); exit;

}

else if (!empty($pfname) && !empty($ps))
{
//list($width, $height) = getimagesize($pftmploc);

if($pfsize > 20971520)
{
echo "ERROR: Your file was larger than 20 Megabytes in size.";
unlink($pftmploc);
exit();
}
else if(!preg_match("/.(gif|jpg|png|mp3|mp4|avi)$/i", $pfname) )
{
echo "ERROR: Restricted file format!Kindly stick to these formats alone:gif,jpg,png,mp3,mp4,avi";
unlink($pftmploc);
exit();
}
else if($pferror == 1)
{ // if file upload error key is equal to 1
echo "ERROR: An error occured while processing the file. Try again.";
exit();
}
}

$dbfname = rand(100000000000,999999999999).$pfname;
$updir = "ups/posts/";
$arraymov = array();
array_push($arraymov, $dbfname);
$movrslt = move_uploaded_file($pftmploc,$updir.$dbfname);
if($movrslt != true)
{
echo 'ERROR: File upload failed. Try again!';
exit();
}
}
$abc = $get->addPost($a, $ps, implode(',',$arraymov));
header('location:'.escape($_SERVER['PHP_SELF'])); exit;
}
?>

文件上传功能:

public function addPost($user_id,$status,$file_path){
$query = $this->_db->prepare("INSERT INTO postsinitial (puid, pstatus, postimg) VALUES (:k, :l, :m)");
$query->bindValue(':k',$user_id);
$query->bindValue(':l', nl2br(htmlentities($status, ENT_QUOTES, 'UTF-8')));
$query->bindValue(':m',$file_path);
$query->execute();
$rsizes = $query->rowCount();

if ($rsizes > 0) {
return true;
}
else
{
return false;
}
}

我尝试编写代码以将每个文件路径作为逗号分隔的值数组插入,以便用户可以为数据库中的一条记录上传多张图像。这很重要!

提前发送!

最佳答案

看来你的逻辑是错误的。您必须在遍历 $_FILES 数组的同一个 foreach() 中执行 move_uploaded_file() 。

...
echo "ERROR: An error occured while processing the file. Try again.";
exit();
}
}

move_uploaded_file(...
}

您所做的是尝试使用 $pftmploc 变量作为临时文件路径在单独的 foreach block 中执行 move_uploaded_file()。但由于该变量是在前面的 foreach() 循环中分配的,它代表上传文件数组的最后一个元素。这就是为什么您没有上传所有文件的原因。

关于php - 多个文件上传 仅上传一个帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42212398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com