2017-04-14 66 views
1

我想創建一個配置文件編輯設置。似乎只有當圖像上傳時才編輯信息。我發現允許錯誤消息是一個條件允許一些更多的操作,所以我現在嘗試它,我的條件聲明不工作,因爲它應該。PHP文件上傳錯誤條件

if($_FILES['files']['error']==0) { 

    print_r($_FILES['files']['error']); 
    echo "if"; 

    foreach($_FILES['files']['name'] as $file => $name) { 
     $filename = $name; 

     try{ 
      if(move_uploaded_file($_FILES['files']['tmp_name'][$file],'uploads/'.$filename)) { 
       $updateInfo = $db->prepare("UPDATE users SET image  = :image, aboutme  = :aboutme WHERE id = :id"); 

       $updateInfo->bindParam(":image", $filename); 
       $updateInfo->bindParam(":id", $_SESSION['user']['id']); 
       $updateInfo->bindParam(':aboutme', $aboutme); 

       $updateInfo->execute(); 
      } 
     } catch(Exception $e) { 
      echo $e; 
     } 
    } 
} elseif($_FILES['files']['error'] == 4) { 
    print_r($_FILES['files']['error']); 
    echo "Elseif"; 

    try{ 
     $updateInfo = $db->prepare(" 
     UPDATE users 
     SET 
      aboutme  = :aboutme 

      WHERE id = :id 
     "); 
     $updateInfo->bindParam(':id', $_SESSION['user']['id']); 
     $updateInfo->bindParam(':aboutme', $aboutme); 


     $updateInfo->execute(); 
    } catch(Exception $e) { 
     echo $e; 
    } 
} else{ 
    print_r($_FILES['files']['error']); 
    echo "else"; 
} 

}

當我檢查正在發送的陣列,其正確的,但錯誤的條件,即:它會運行else語句,不管文件檢查。

我的問題:

有什麼錯我的代碼,任何安全或效率缺陷的異常?

+0

print_r($ _ FILES ['files'])並檢查你得到了什麼。 –

+0

@MubasharIqbal感謝您的評論。如果我嘗試上傳圖像,我得到以下內容: 'Array([name] => Array([0] => image_uploaded_from_ios_720.jpg)[type] => Array([0] => image/jpeg)[tmp_name ] => Array([0] =>/Applications/MAMP/tmp/php/phps23tdT)[error] => Array([0] => 0)[size] => Array([0] => 19635))其他' 並且沒有嘗試上傳圖像: 'Array([name] => Array([0] =>)[type] => Array([0] =>)[tmp_name] => Array [0] =>)[error] => Array([0] => 4)[size] => Array([0] => 0))else' – YABOI

+0

see error is array:[error] => Array [0] => 4)所以你必須檢查:$ _FILES ['files'] ['error'] [0] –

回答

0

$ _FILES ['files'] ['error']與文件數組一起返回錯誤代碼。有不同類型的錯誤代碼,所有的代碼在下面的鏈接中提到,詳情:

請通過

的print_r檢查($ _ FILES [ '文件'])

,看看是什麼你會得到迴應嗎?當你發佈你的數組響應時,你可以通過$ _FILES ['files'] ['error'] [0]獲得錯誤代碼,或者使用下面鏈接中提到的開關情況。

在這裏看到更多的細節: http://php.net/manual/en/features.file-upload.errors.php

另外,關於調試,始終調試代碼步步從上到下。檢查$ _POST,$ _FILES,$ _SERVER等詳細信息,如果您遇到與數據處理有關的特定問題。