我有以下代码使用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>
包括/ 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;
}
}
我试图代码插入每个文件路径作为逗号分隔值的阵列,以使得用户可以上传多个图片中只有一个记录数据库。这很重要!
Tnx提前!
tq为你的建议......以及我试过n再次重新编辑了这个问题......请检查它..bt的东西是,现在虽然文件被移动,oly一个名字被记录在分贝。 .i想要一个数组的所有图像名称与数据库中该post的单个post_id行..! – Vanessa341
@ Vanessa341这很容易。你必须取出$ arraymov = array();声明在foreach()循环之外。它应该放在你开始循环之前。按以下顺序: if(isset($ _ POST ['psubmit'])) { $ arraymov = array(); foreach(($ _ FILES ['pfile'...... –
哇!!!! tnx很多!!! – Vanessa341