J'ai le code suivant pour plusieurs téléchargements de fichiers en utilisant php et mysql. Mais pour une raison quelconque, si les fichiers « n » sont sélectionnés, seul le dernier fichier (ou « n-ième) semble être téléchargé ..le téléchargement de fichiers multiples télécharge uniquement un seul article
Voici les fichiers respectifs:
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>
comprend/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;
}
?>
fonction de téléchargement du fichier:
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;
}
}
J'ai essayé de code à insérer chaque chemin de fichier en tant que tableau de valeurs séparées par des virgules de sorte qu'un utilisateur peut télécharger des images multiples pour un seul enregistrement en database.This est important!
Tnx à l'avance!
tq pour votre suggestion ... eh bien j'ai essayé n ont ré-édité la question à nouveau ... veuillez vérifier ..... la chose est, maintenant si les fichiers sont déplacés, oly un nom est en cours d'enregistrement dans la DB. .je veux un tableau de tous les noms d'image sur une seule ligne post_id dans la base de données pour ce post ..! – Vanessa341
@ Vanessa341 c'est facile. Vous devez sortir $ arraymov = array(); déclaration hors de la boucle foreach(). Il devrait être placé juste avant de commencer la boucle.Dans cet ordre: if (isset ($ _ POST ['psubmit'])) { $ arraymov = array(); foreach (($ _ FICHIERS ['pfile' ...... –
wow !!!! tnx beaucoup !!! – Vanessa341