Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 包括多个文件上载的注释_Php_Html_File Upload - Fatal编程技术网

Php 包括多个文件上载的注释

Php 包括多个文件上载的注释,php,html,file-upload,Php,Html,File Upload,我上传多个文件时遇到问题。我有一个类别下拉列表和一个注释框,我需要将其与文件详细信息一起插入数据库。我有五个上传框显示在屏幕上 如果我上传一个文件,则注释为空(即使不应该为空),并且类别始终设置为第一个值。经过一些测试后,最终的上传评论和分类框似乎覆盖了所有的内容。通过上传五个不同类别和评论的文件进行测试,所有文件都显示了最后的评论和类别 我可以看到脚本中的问题,但我不知道如何为上传的每个特定实例分配类别或注释 感谢您的帮助 <?php $upload_dir =

我上传多个文件时遇到问题。我有一个类别下拉列表和一个注释框,我需要将其与文件详细信息一起插入数据库。我有五个上传框显示在屏幕上

如果我上传一个文件,则注释为空(即使不应该为空),并且类别始终设置为第一个值。经过一些测试后,最终的上传评论和分类框似乎覆盖了所有的内容。通过上传五个不同类别和评论的文件进行测试,所有文件都显示了最后的评论和类别

我可以看到脚本中的问题,但我不知道如何为上传的每个特定实例分配类别或注释

感谢您的帮助

     <?php



    $upload_dir = "training/trainingDocuments/";
    $maxUploads = 5;

    $msg    = "Please select file(s) for uploading";
    $errors = array();

    if ( $files = convert_files( $_FILES["myTrainingFile"] ) ) {
        foreach( $files as $i => $file ) {
            $fileName = $file["name"];
            $tempName = $file["tmp_name"];
            $fileSize = $file["size"];
            $fileExt  = strtolower( pathinfo( $fileName, PATHINFO_EXTENSION ) );
            $blacklist  = array( 'exe','php','jsp','js','bat','asp','aspx','com','dmg' );

//                $newPath = $upload_dir .$fileName;
            $dateUploaded = time() . microtime();

            if ( in_array( $fileExt, $blacklist ) ) {
                $errors[$i] = "File type not allowed";
            }

            if ( !is_uploaded_file( $tempName ) ) {
                //$errors[$i] = "Uploading ".$fileName." failed.";
            }else{
                echo '<h4>Uploading of :'.$fileName.' was a success.</h4>';
            }

            //if(file_exists($newPath)){

                $name = pathinfo($fileName, PATHINFO_FILENAME);
                $fileName = $name . '__' .uniqid().  '.' .$fileExt;
                $newPath = $upload_dir .$fileName;
//                }else{
//
//                }

            if ( isset( $errors[$i] ) ) {
                continue;
            }


            if ( !move_uploaded_file( $tempName, $newPath ) ) {
                //$errors[$i] = "Uploading ".$fileName." failed.";
            }else{
                //echo 'File moved';
            }

            $comments = htmlentities( trim( $_POST['comments'] ) );
            $category = htmlentities( trim( $_POST['category'] ) );

            if($file['name'] != ""){
                $training->uploadDocument( $fileName, $category, $comments );
            }
        }
    }
    ?>

    <?php
    function convert_files( $files ) {
        if ( is_array( $files ) && !empty( $files["name"] ) ) {
            if ( is_array( $files["name"] ) ) {
                $merged = array();
                foreach( $files["name"] as $i => $name ) {
                    $merged[] = array(
                        "name"  =>  $name,
                        "type"  =>  $files["type"][$i],
                        "size"  =>  $files["size"][$i],
                        "error" =>  $files["error"][$i],
                        "tmp_name"  =>  $files["tmp_name"][$i]
                    );
                }
                return $merged;
            }
            return array( $files );
        }
        return false;
    }
    ?>

编辑:添加HTML

 <div id="uploadFormContainer">
    <form id="uploadForm" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post" enctype="multipart/form-data">

        <?php
        $num = 0;
        while($num < $maxUploads)
        {?>
            <div class="uploadFormE">
                <label>File Category: </label>
                <select name="category">
                    <option value="doc">Documents (pages, word, PDF etc)</option>
                    <option value="sheet">Spreadsheet</option>
                    <option value="vid">Video</option>
                    <option value="pres">Presentations</option>
                    <option value="img">Image</option>
                    <option value="quiz">Quiz</option>
                    <option value="other">Other</option>
                </select>
             </div>
             <div class="uploadFormE">
                 <label>File Location: </label>
                 <input type="file" name="myTrainingFile[]" />
             </div>
             <div class="uploadFormE">
                <label>Comments: </label>
                <textarea class="GAH" name="comments"> </textarea>
             </div>
            <hr/>
            <br />
        <?php $num++;
        }
        ?>

        <input type="submit" value="Upload File(s)">
    </form>
    </div>


看看这是否有效。这适用于只有一个注释和类别的情况:

以这一部分为例:

$comments = htmlentities( trim( $_POST['comments'] ) );
$category = htmlentities( trim( $_POST['category'] ) );
在foreach循环之外:

if ( $files = convert_files( $_FILES["myTrainingFile"] ) ) {
    foreach( $files as $i => $file ) {
因为您从上一页只获得一个注释和类别值,所以在foreach循环中不需要这个值。此外,如果要上载每个文件的注释和类别,则需要更改将值传递到此页面的上一个页面。如果您想要这样,那么您需要添加更多的代码

以下是OP添加更多代码后的更新:

更改此项:

<select name="category">
$comments = htmlentities( trim( $_POST['comments'] ) );
$category = htmlentities( trim( $_POST['category'] ) );
为此:

<select name="category[]">
<textarea class="GAH" name="comments[]"> </textarea>
$comments = htmlentities( trim( $_POST['comments'][$i] ) );
$category = htmlentities( trim( $_POST['category'][$i] ) );
这是基于假设$i是索引变量,其值在迭代文件数组时从0到4。如果不是这样,则需要添加另一个索引变量,如$count,如下所示:

$count = 0;
foreach( $files as $i => $file ) {
    // your other code goes here
    $comments = htmlentities( trim( $_POST['comments'][$count] ) );
    $category = htmlentities( trim( $_POST['category'][$count] ) );

    $count ++;
}

您是否需要对上传的每个文件进行评论和分类?@Maximus2012-最好是。好吧,分类是绝对必须的,评论不是一个巨大的考验,但最好是一个单页脚本Maximus,不确定这是否会产生巨大的差异,所有HTML和PHP代码都在这一页上。我需要做哪些更改才能对每个上传的文件进行评论和分类?我可以把它们附加到名称数组中吗?这是从哪里来的:$\u POST['comments']?如果它是一个单页脚本,那么你能发布该页面的全部代码吗?我会用额外的HTML更新这个问题。而且,我需要他们在循环中。training->uploadDocument函数调用将它们作为参数,需要在forEach中运行。非常感谢!!!最好的事情是现在知道我可以以这种方式使用数组。明亮的谢谢当然没问题。很高兴我能帮忙。
$count = 0;
foreach( $files as $i => $file ) {
    // your other code goes here
    $comments = htmlentities( trim( $_POST['comments'][$count] ) );
    $category = htmlentities( trim( $_POST['category'][$count] ) );

    $count ++;
}