2017-05-18 17 views
-2

私は、フォルダに画像をアップロードするPHPスクリプトを持っています。PHP通知:未定義インデックス:ファイルアップロード写真

それはローカルで作業しているが、私はホストしているサーバー上に置いたときに、私は次のようなエラーメッセージが出ます:

を[木曜5月18日21:45:00.833970 2017]:[[fcgid警告] PID 37560 ]クライアント[ 151.229.83.93:44238] mod_fcgid:stderr:PHP Notice:未定義のインデックス: のファイル/home/linnas01/g/domainname.com/user/htdocs/php/uploadphoto.php の9行目referer: http://domainname.com/photoupload.html

これはなぜ起こっているのか、これを修正する方法は誰でも説明できますか?

PHPは私のhtmlファイルがこの

<form enctype="multipart/form-data"> 
    <input id="upload-input" type="file" name="file" multiple="multiple" enctype="multipart/form-data"> 
    <input type="submit"> 
</form> 

ファイルをAjaxで掲載されますように見えます。この

<?php 

if (0 < $_FILES['file']['error']) { 
    echo 'Error: ' . $_FILES['file']['error'] . '<br>'; 
} 
else { 
    move_uploaded_file($_FILES['file']['tmp_name'], 'images/' . $_FILES['file']['name']); 
} 

?> 

のように見えます。

var formData = new FormData(); 

for (var i = 0; i < files.length; i++) { 
    var file = files[i]; 
    fileNames.push(file.name); 

    // add the files to formData object for the data payload 
    formData.append("image", file); 
    } 

$.ajax({ 
    url: 'uploadphoto.php', 
    type: 'POST', 
    data: formData, 
    processData: false, 
    contentType: false, 
    success: function(data){ 
     console.log(data); 
    } 
}); 

I have also configured the directories and files as explained here

+4

[PHP: "注意:未定義の変数"、 "注意:未定義のインデックス"、および "注意:オフセット未定義"]の可能な重複(http://stackoverflow.com/questions/4261133/php-notice -undefined-variable-notice-undefined-index-and-notice-undef) – Bytewave

+0

tl; drあなたは 'name'属性' file'を持つファイルフィールドを 'POST'することは何もありません。あなたのフォームがどのように見えているか分かっていれば、私たちはもっと助けることができました。 – Bytewave

+0

'$ _FILES ['file']'が使用される前に、それが入力されていることを確認してください。 – chris85

答えて

1

$_FILESで使用している名前と、指定した名前がformData.append()で一致しないという問題があります。

また、これは複数ファイルの入力であるため、すべてのファイルを取得するには配列形式の名前を使用する必要があります。したがって、コードは次のようになります。

var formData = new FormData(); 

for (var i = 0; i < files.length; i++) { 
    var file = files[i]; 
    fileNames.push(file.name); 

    // add the files to formData object for the data payload 
    formData.append("file[]", file); 
    } 

PHPコードでは、すべてのアップロードを処理するために配列をループする必要があります。

foreach ($_FILES['file']['tmp_name'] as $i => $tmp_name) { 
    if ($_FILES['file']['error'][$i] != 0) { 
     echo 'Error: ' . $_FILES['file']['error'][$i] . '<br>'; 
    } else { 
     move_uploaded_file($tmp_name, 'images/' . $_FILES['file']['name'][$i]); 
    } 
} 
関連する問題