Я пытаюсь загрузить несколько файлов в каталог. код, который я «написал», работает для одного файла, однако, когда я пытаюсь загрузить несколько файлов, он не работает. я попытался определить, где ошибка, и я считаю, что она имеет какое-то отношение к счету. хотя, когда я пытаюсь подсказать, сколько файлов подсчитывается, я всегда получаю «1» независимо от того, сколько файлов я выбрал. Я знаю, что это будет работать только для одного файла, так как переменная, которую я возвращаю, всегда «1», и поэтому будет работать только для одного файла.PHP count() неправильно подсчитывается
собрать файлы, которые я использую HTML форму с помощью метода поста HTML:
<form id="upload" action="upload.php" method="POST" enctype="multipart/form-data">
<fieldset>
<legend>HTML File Upload</legend>
<input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" />
<div>
<label for="fileselect">Files to upload:</label>
<input type="file" id="fileselect" name="fileselect[]" multiple="multiple" />
<div id="filedrag">or drop files here</div>
</div>
<div id="submit">
<button type="submit">Upload Files</button>
</div>
</fieldset>
</form>
Javascript я использую позволяет функции перетаскивания и был получен от: http://www.sitepoint.com/html5-file-drag-and-drop/
виновника PHP:
if(isset($_FILES['fileselect']['tmp_name'])) {
// Number of uploaded files
$num_files = count($_FILES['fileselect']['tmp_name']);
echo $num_files;
/** loop through the array of files ***/
for($i=0; $i <= $num_files;$i++) {
// check if there is a file in the array
if(!is_uploaded_file($_FILES['fileselect']['tmp_name'][$i])) {
$messages[] = 'No file uploaded';
}
else {
$unique = substr(number_format(time() * rand(),0,'',''),0,10);
$newImg = "img".$unique;
$filename = basename($_FILES['file']['name'][$i]);
$extension = pathinfo($filename, PATHINFO_EXTENSION);
//$new = md5($filename).'.'.$extension;
$the_file_type = $_FILES['fileselect']['type'][$i];
$the_file_size = $_FILES['fileselect']['size'][$i]/1024;
$the_file_name = $_FILES['fileselect']['name'][$i];
$ok=1;
//This is our size condition
if ($uploaded_size > 350000) {
$messages[] = "Your file is too large.<br>";
$ok=0;
}
//This is our limit file type condition
if ($uploaded_type =="text/php") {
$messages[] = "No PHP files<br>";
$ok=0;
}
//Here we check that $ok was not set to 0 by an error
if ($ok==0) {
$messages[] = "Sorry your file was not uploaded";
}
//If everything is ok we try to upload it
else {
if(move_uploaded_file($_FILES['fileselect']['tmp_name'][$i], "uploads/{$newImg}")) {
echo "The file ". basename($_FILES['uploadedfile']['name'][$i]). " has been uploaded";
echo "<br />";
//echo $the_file_type;
//echo "<br />";
//echo $unique;
//echo "<span>schmeckle!</span>";
//echo "<br />";
//echo $the_file_size;
//echo "<br />";
//echo $the_file_name;
$insertSQL = "INSERT INTO interviews_media_images SET ";
$insertSQL .= "fileType='$the_file_type', ";
$insertSQL .= "fileRef='$newImg', ";
$insertSQL .= "fileSize='$the_file_size', ";
$insertSQL .= "fileName='$the_file_name' ";
echo $insertSQL;
//mysql_query($insertSQL);
//echo mysql_error();
} else {
$messages[] = "Sorry, there was a problem uploading your file.";
}
}
}
}
}
Вы даже 'print_r ($ _ FILES)', чтобы увидеть, что он на самом деле содержит? Я считаю, что это '$ _FILES ['fileselect'] [$ i] ['attribute']' not '$ _FILES ['fileselect'] ['attribute'] [$ i]' – Twisted1919
все выше: "for ($ i = 0; $ i <= $ num_files; $ i ++) {... blah} else {", ссылается на другой пост в стеке, который, по-видимому, работает. ссылка: http://stackoverflow.com/questions/2233816/how-to-handle-multiple-file-upload-using-php все ниже работает. моя проблема в том, что «$ num_files = count ($ _ FILES ['fileselect'] ['tmp_name']); всегда возвращает «1». –
Моя первая догадка заключается в том, что в функции PHP 'count() нет ошибки – chrislondon