2017-01-17 12 views
0

私はかなりの情報を集めたフォームを持っており、複数のファイルをアップロードする必要があります。複数のファイルをサーバーにアップロードする

このフォーラムのDeviのおかげで、フォームの他のすべての側面が完全に機能しています。私は今、新しいスレッドを開始することに決めました。以前の/古いスレッドを見ることができます。Insert into one Table, while updating another & File Upload

私の問題は、実際にファイルをアップロードすることです。私のフォームは2つの部分で作業しています。第1部は基本的なHTMLレイアウトです。このレイアウトでは、データベーステーブルへの情報の書き込みを処理するPHPファイルを指すメソッドがあります。

フォームは、各ファイルのアップロードのための次のコード(4つのアップロード、異なるファイル参照のために、各、すなわちライセンス文書、リニューアル文書、アイデンティティドキュメント、その他のドキュメントがあります。)しています

<div class="form-group"> 
    <label>Permit Renewal :</label> 
    <div class="input-group"> 
     <label> 
     <input type="radio" class="minimal" value="0" <?php echo ($permit_renewal=='No')?'checked':'' ?> name="permit_renewal"> 
     No 
     </label> 

     <label> 
     <input type="radio" class="minimal" value="1" <?php echo ($permit_renewal=='Yes')?'checked':'' ?> name="permit_renewal"> 
     Yes 
     </label> 
    </div> 
</div> 
<div class="box-body"> 
<div class="form-group">  
    <div class="form-group"> 
     <label for="scanned_permit_renewal">Attach File</label> 
     <input type="file" id="scanned_permit_renewal" name="scanned_permit_renewal"> 
     <p class="help-block">Select a file to link to this outlet, the file name must be prefixed with the Outlet. E.g. 102987 - License 2016</p> 
    </div>     
</div><!-- /.form-group --> 

はまた、関連する処理部分は、私はまた私の腐敗ディレクトリを確認し、/アップロード/フォルダが存在することを保証している

if (isset($_FILES["file"]["name"])) { 
    foreach($_FILES['file']['tmp_name'] as $key => $tmp_name){ 
     $file_name = $key.$_FILES['file']['name'][$key]; 
     $file_size =$_FILES['file']['size'][$key]; 
     $file_tmp =$_FILES['file']['tmp_name'][$key]; 
     $file_type=$_FILES['file']['type'][$key]; 
     $new_file = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . date("Ymd_his") . "_" . $file_name; 
     //echo $new_file; 
     move_uploaded_file($file_tmp,$new_file); 
    } 
} 
if($res1){ 
    echo "Records added/updated successfully."; 
} 

header("refresh:2;url=../outlet_capture.php"); 
// close connection 
$link->close(); 

です。あなたはすべての権利を行っている

+0

JFYIを、このサイトではありませんフォーラムとあなたのコードを修正するように尋ねる質問は話題にはなりません。 –

答えて

0

、あなたは、単に右の入力名を指していません...

$_FILES['file']は存在しません。 $_POSTにアクセスしたときのように、代わりに$_FILES['scanned_permit_renewal']を使用する必要があります。キーはフォームフィールドの名前です。

実際には、file[*something*]という名前の入力が多いかのように、$_FILES['file']をループしています。質問が完了したら、単に使用するべきです

if (isset($_FILES["scanned_permit_renewal"])) { 
    $file_name = $_FILES['scanned_permit_renewal']['name']; 
    $file_size =$_FILES['scanned_permit_renewal']['size']; 
    $file_tmp =$_FILES['scanned_permit_renewal']['tmp_name']; 
    $file_type=$_FILES['scanned_permit_renewal']['type']; 
    $new_file = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . date("Ymd_his") . "_" . $file_name; 
    //echo $new_file; 
    move_uploaded_file($file_tmp,$new_file); 
} 

あなたのコメントに答えるには、効率的なやり方は2通りあります。まず、PHPの変更は必要ありません。入力フィールドの名前をfile[scanned_permit_renewal]に変更すると、これはforeachを意図したとおりに使用できるようになります。 $_FILESアレイを通してだけループする可能性が

$file_inputs = array('scanned_permit_renewal','my','other','documents'); 
foreach($file_inputs as $input_name){ 
    if (isset($_FILES[$input_name])) { 
     $file_name = $input_name.$_FILES[$input_name]['name']; 
     $file_size =$_FILES[$input_name]['size']; 
     $file_tmp =$_FILES[$input_name]['tmp_name']; 
     $file_type=$_FILES[$input_name]['type']; 
     $new_file = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . date("Ymd_his") . "_" . $file_name; 
     //echo $new_file; 
     move_uploaded_file($file_tmp,$new_file); 
    } 
} 

第三の方法:

別の方法は、可能な入力のアレイを使用することができました。しかし、そこに何かがあるかもしれないので、私はそれをしません。必要なファイルにフィルタをかけることをお勧めします。

+0

それで、追加したいファイルごとにif($ _ FILES ["file"] ["name"]))){ foreach($ _ FILES ['file'] [ 'tmp_name'] as $ key => $ tmp_name)など...? これを行う方法がより簡単で効率的な方法ではないですか? –

+0

私のデータベーステーブルの4つの別々の列にフィールド値を書き込む必要があるので、これを表示するためにファイル名を後で参照できるように、オプション2の表示が最適です。 入力配列を初めて使用しようとしましたが機能しませんでしたので、それを試してみましょう。 –

+0

名前の衝突があるかもしれないので、元のファイル名を使用したくないかもしれません...ファイルに関連するmysql行のIDを使用し、ファイルの種類を追加したいと思います。この方法では、データベースにファイル名を格納する必要はなく、2人の異なる人が同じファイル名を使用すると、互いに重複しないので、非常に有害になる可能性があります。 – Salketer

0

定義が表示されていないが、それは

$ _FILES変数は、フォームのフィールドの名前で動作するようENCTYPEを持っている必要があります。 あなたの例では、scan_permit_renewalにする必要があります。また、フォームが送信されたときにPHPからアクセスするには、$ _FILES ['scanned_permit_renewal']を使用する必要があります。

あなたは問題があると思われるのforeach

foreach($_FILES['file']['tmp_name'] as $key => $tmp_name) 

に使用しています。

あなたは、この使用する必要があり私見:複数のファイルをアップロードするための

foreach($_FILES as $fieldNameInTheForm => $file) 
{ 
    $file_name = $fieldNameInTheForm .$file['name']; 
    $file_size =$file['size']; 
    $file_tmp =$file['tmp_name']; 
    $file_type=$file['type']; 
    $new_file = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . date("Ymd_his") . "_" . $file_name; 
    //echo $new_file; 
    move_uploaded_file($file_tmp,$new_file); 
} 
0

を、入力フィールドは次のようになります。

<input type="file" id="scanned_permit_renewal" name="scanned_permit_renewal[]" multiple="multiple"> 

処理部:

if (count($_FILES["scanned_permit_renewal"]["name"]) > 0) { 
foreach($_FILES['scanned_permit_renewal']['tmp_name'] as $key => $tmp_name) 
{ 
    $file_name = $key.$_FILES['scanned_permit_renewal']['name'][$key]; 
    $file_size =$_FILES['scanned_permit_renewal']['size'][$key]; 
    $file_tmp =$_FILES['scanned_permit_renewal']['tmp_name'][$key]; 
    $file_type=$_FILES['scanned_permit_renewal']['type'][$key]; 
    $file_to_save = date("Ymd_his") . "_" . $file_name; 
    $new_file = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" .$file_to_save; 
    //echo $new_file; 
    if(move_uploaded_file($file_tmp,$new_file)){ 
     // update database 

     $query = "UPDATE `table` SET `field_name` = '".$file_to_save."' WHERE ..... "; 
    } 
} 
} 
+0

これは私にとって理想的な方法ですが、私の唯一の懸案事項は、テーブルの特定の列、スキャン許可の1つの列、アイデンティティ文書などにもファイル名を書きたいということです。特定のファイルをプルアップして表示するためのデータベース内の参照。 –

関連する問題