Submit Формы после выбора файла
Есть код на js, отправить форму после выбора файла. Когда выбираю файл обновляет страничку и все, а на базу не записывает. А без js т.е вручную работает. Может кто знает в чем проблема?
jQuery(document).ready(function(){ form = $("#formid"), upload = $("#select"); upload.change(function(){ form.submit(); }); }); <form method="POST" action="" id="formid" enctype="multipart/form-data"> <input type="file" name="uploadfile" id="select"> <input type="submit" name="uploadfile" style="display: none;"> </div> </form> |
Цитата:
И кнопку не скрывай, а засунь ее в <noscript> |
обновляет страничку и все, а на базу не записывает
Что за файл, как получаете файл и записываете? |
При нажатии $_POST['uploadfile']
Загруженный файл $file = $_FILES['uploadfile']['name'] mySQL запрос UPDATE users SET photo=$file |
Цитата:
|
Ну так это не запись файла в базу, это имя файла в базе. Прежде чем писать в базу, вы проверку делаете того что получаете?
PS. И так нельзя записывать даже имя. |
Ну да, делаю проверку, ну тут же дело не втом что я получаю, а мне просто надо записать имя полученного файла. А как можно записать имя ?
Когда сам нажимаю на кнопку записывает, обновляет. Все работает как надо. |
Имя нужно записывать как минимум так basename($_FILES['uploadfile']['name']), естественно после того как удостоверившись, что все соответствует ожиданиям.
А получает ли сервер файл можно проверить, что показывает массив принятый? |
Да, да да , я знаю что такое base name. Но вопрос то не в этом.
Массив показывает ошибку если отправить форму вручную. Тут дело в js |
В показанном коде ошибки нет, я не могу продемонстрировать здесь, но это код будет работать, могу снимки с экрана только показать.
А вот ошибки в массиве $_FILES на сервере говорят о том, что файл передается, иначе бы массив был пуст. По номеру ошибки можно судить что происходит. Знаете что такое basename(), так почему не используете. |
То что говорите вы абсолютно правильно. Но они не касаются моей проблемы.
Давайте посмотрим по другому. Есть js код, который должен отправить форму когда пользователь выбрал файл и вывести на экран слово test jQuery(document).ready(function(){ form = $("#formid"), upload = $("#formid #select"); upload.change(function(){ form.submit(); }); }); js код должен нажать кнопку $_POST['upload'] if(!empty($_POST['upload'])) { echo 'test'; } когда js отправляет форму то нечего не выводит, а если убрать if(!empty($_POST['upload'])) или вручную отправить, то выводит ''test" Почему когда форму отправляет js не выводит "test"??? |
Давайте по другому:
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); Это к "о не способности отправить скриптом". Не отправляться будет только при наличие ошибок в коде вашем. |
форма отправился
Array ( [data] => test ) Array ( [upload] => Array ( [name] => 1HO-u9lMQXc.jpg [type] => image/jpeg [tmp_name] => /tmp/php2hO4nd [error] => 0 [size] => 35316 ) ) |
Когда жмешь кнопку, то отправляется ее имя, тоесть на сервере ты получаешь $_POST['uploadfile'].
А когда кнопку не жмешь, то есть когда сабмитишь через .submit() кнопка не отправляется. Вот в чем твоя ошибка - ты на сервере проверяешь $_POST['uploadfile'], а нужно проверять файл. |
Как я понял мне надо проверить на php загружен ли файл?
|
Ну если ваш серверный скрипт, это РНР, на чем же еще вы будете проверять? Вот только проверять и получать информацию о загрузке нужно не в массиве $_POST, а в массиве $_FILES. Если его ключ error равен 0, значит файл загружен успешно и его надо переместить из временной папки /tmp/php2hO4nd в необходимый каталог.
Массив $_POST при этом будет содержать данные формы, если они передавались наряду с файлом, иначе пустой. |
Спасибо, помогли разобраться.
|
Часовой пояс GMT +3, время: 08:45. |