Доброго времени суток! Есть скрипт, который грузит на сервер аватар и отображает его в img. Я уже показывал его здесь и любезные форумчане (в частности Igordata) помогли мне его доработать. Он отлично выполняет свои задачи в IE10 и IE11. Загружает на сайт картинку аватара и показывает её в теге img. Путь сохраняет в БД. Но в Mozilla FF (v. 25.0.1) и в Googel Chrome (v. 31.0.1650.63 m) картинка, при нажатии на кнопку не грузится на сайт и в БД не прописывается путь к ней. Что может быть? Спасибо. Код (Text): <?php if($_SESSION['id']) { $image =''; $id = $_SESSION['id']; $result = mysql_fetch_assoc(mysql_query("SELECT Photo FROM mb_details WHERE id = $id")); if($result['Photo']){ $str = $result['Photo'] . "?" . (string)mt_rand(10,9999) . "=" . (string)mt_rand(10,9999); echo '<img id="avatar" src="'.$str.'" class="UserPhoto" alt="Photo">'; } else{ echo '<img id="avatar" src="./images/NoPhoto.png" class="UserPhoto" alt="Photo">'; } echo '<FORM ENCTYPE="multipart/form-data" ACTION="cabinet.php" METHOD=POST> <INPUT TYPE="file" STYLE="DISPLAY:none" NAME="userfile" > <input type=submit class="send" NAME="open" VALUE="Выбрать" onclick="userfile.click()"> </FORM>'; if(!empty($_FILES)){ $image_size=$_FILES['userfile']['size']; $image_type=$_FILES['userfile']['type']; if ($image_type == 'image/jpeg') { $filename = $id.'.jpg'; } if ($image_type == 'image/gif') { $filename = $id.'.gif'; } if ($image_type == 'image/png') { $filename = $id.'.png'; } if($image_size>1024*1024||$image_size==0) { $ErrorDescription="Каждое изображение не должно привышать 1Мб!"; } else if(!empty($filename)) { $uploaddir = './avatars/'; $uploadfile = $uploaddir.basename($filename); move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile); $id = $_SESSION['id']; echo $uploadfile.(string)$id; mysql_query("UPDATE mb_details SET Photo = '$uploadfile' WHERE id = $id"); header("Location: cabinet.php"); } else $ErrorDescription="Изображение в базу не загружено"; } } ?>
Установленный adblock? Проблема решается просто - открывайте утилиты разработчика в этих браузерах и смотрите, что они принимают с сервера. И сравнивайте с тем, что должно там быть. Если сервак отдает лажу - проблема у вас, если браузеры принимают правильный код, а отображают не так как надо вам, проверяйте причины. В том числе расширения.
автор, очевидно PHP работает не в браузере, а на сервере. твоя ошибка на стороне клиента - то есть в javascript. есть разница в объектной модели IE и остальных браузеров. предположу, что твой код в onclick на кнопке просто не работает или работает не так как ты ожидаешь. смотри сообщения в консоли JavaScript! одним словом: отлаживай! edited: Тут беда в последовательности событий. Большинство браузеров не ждут завершения выбора файла, а отрабатывают submit формы.
Спасибо за ответы. Извиняюсь, долго не мог выйти в инет, конец года, столько проблем на работе . Я подозреваю, что сервер работает правильно, IE абсолютно качественно справляется с задачей. А вот это я думаю в точку. Я почти уверен, что проблема может быть только в ява-скрипте. Другой вопрос: как это исправить? Какую заплатку наложить, чтобы submit ждал окончания работы предыдущего input'а. Или вообще так нельзя делать, а нужно обязательно ставить 2 кнопки, типа "Обзор" и "Загрузить". Но я видел не раз, что дизайнеры обходятся одной.
всё можно. предлагаю такой план: - делать клик не на кнопке submit, а где-то в более нейтральном месте. чтобы точно непроизвольной отправки небыло. у тебя, кроме прочего, сабмит срабатывает всегда, даже если юзер отказался от выбора файла — нехорошо! - на самом <input type=file> повесить событие onchange чтобы отловить событие выбора. вот тут можно делать form.submit(). а можно ограничиться превью, а сабмит пусть сам жмет. Добавлено спустя 1 минуту 27 секунд: попробуй так: Код (PHP): <form enctype="multipart/form-data" method="post" onsubmit="alert('Submitting...');"> <input type="file" name="myfile" id="myfile" style="display:none" onchange="mybutton.click();"> <label for="myfile">Select file</label><br> <input type="submit" name="mybutton" value="Submit" style="display:none"> </form> Добавлено спустя 9 минут 21 секунду: кстати, в form.onsubmit ты можешь проверить что-то про файл и сделать return false если форма НЕ должна отправиться.
artoodetoo Спасибо большое! Не часто люди себя утруждают такой развернутый ответ давать, сейчас буду пробовать, но самое главное я понял свою ошибку . Ну и так, попутно, а как ты вставляешь код, чтобы он правильно раскрашивался? Я имею в виду в сообщение.
Можно нажать на кнопку "Цитата" и посмотреть код сообщения. И обратить внимание на конструкцию code=php в квадратных скобках.