Давайте по другому:
1) if(!empty($_POST['upload'])) - массив $_POST к приему файлов отношения не имеет, если только форма не содержит поля я именем 'upload'.
2) Проверку загруженного файла нужно начинать с проверки ошибок загрузки - if(!$_FILES['field_name']['error']) { действия }
Выполните у себя вот этот код отдельно. С передачей проблем не будет.
<form method="post" enctype="multipart/form-data">
<input type="file" name="upload" onchange="this.form.submit()">
<input name="data" value="test">
</form>
<?
echo '<pre>';
print_r($_POST);
print_r($_FILES);
Это к "о не способности отправить скриптом". Не отправляться будет только при наличие ошибок в коде вашем.