За последние 24 часа нас посетили 56099 программистов и 1682 робота. Сейчас ищут 1104 программиста ...

PHP скрипт работает в IE, но не работает в FF и GC

Тема в разделе "PHP для новичков", создана пользователем Alex870, 17 дек 2013.

  1. Alex870

    Alex870 Новичок

    С нами с:
    8 дек 2013
    Сообщения:
    121
    Симпатии:
    2
    Доброго времени суток!
    Есть скрипт, который грузит на сервер аватар и отображает его в img.
    Я уже показывал его здесь и любезные форумчане (в частности Igordata) помогли мне его доработать. Он отлично выполняет свои задачи в IE10 и IE11. Загружает на сайт картинку аватара и показывает её в теге img. Путь сохраняет в БД. Но в Mozilla FF (v. 25.0.1) и в Googel Chrome (v. 31.0.1650.63 m) картинка, при нажатии на кнопку не грузится на сайт и в БД не прописывается путь к ней. Что может быть?
    Спасибо.
    Код (Text):
    1.  
    2.  <?php
    3.     if($_SESSION['id'])
    4.     {
    5.      $image ='';
    6.       $id = $_SESSION['id'];
    7.       $result = mysql_fetch_assoc(mysql_query("SELECT Photo FROM mb_details WHERE id = $id"));
    8.       if($result['Photo']){
    9.         $str = $result['Photo'] . "?" . (string)mt_rand(10,9999) . "=" . (string)mt_rand(10,9999);
    10.         echo '<img id="avatar" src="'.$str.'" class="UserPhoto" alt="Photo">';
    11.       } else{
    12.          echo '<img id="avatar" src="./images/NoPhoto.png" class="UserPhoto" alt="Photo">';
    13.          }
    14.      
    15.       echo '<FORM ENCTYPE="multipart/form-data" ACTION="cabinet.php" METHOD=POST>
    16.             <INPUT TYPE="file" STYLE="DISPLAY:none" NAME="userfile" >
    17.             <input type=submit class="send" NAME="open" VALUE="Выбрать" onclick="userfile.click()">
    18.             </FORM>';
    19.            
    20.         if(!empty($_FILES)){
    21.           $image_size=$_FILES['userfile']['size'];
    22.           $image_type=$_FILES['userfile']['type'];
    23.           if ($image_type == 'image/jpeg') {
    24.             $filename = $id.'.jpg';
    25.           }
    26.           if ($image_type == 'image/gif') {
    27.             $filename = $id.'.gif';
    28.           }
    29.           if ($image_type == 'image/png') {
    30.             $filename = $id.'.png';
    31.           }
    32.         if($image_size>1024*1024||$image_size==0)
    33.           {
    34.               $ErrorDescription="Каждое изображение не должно привышать 1Мб!";
    35.            } else
    36.             if(!empty($filename))
    37.             {
    38.              $uploaddir = './avatars/';
    39.              $uploadfile = $uploaddir.basename($filename);
    40.              move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);
    41.              $id = $_SESSION['id'];
    42.              echo $uploadfile.(string)$id;
    43.              mysql_query("UPDATE mb_details SET Photo = '$uploadfile' WHERE id = $id");
    44.              header("Location: cabinet.php");
    45.             } else $ErrorDescription="Изображение в базу не загружено";
    46.           }        
    47.           }
    48.           ?>
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Установленный adblock? :)
    Проблема решается просто - открывайте утилиты разработчика в этих браузерах и смотрите, что они принимают с сервера. И сравнивайте с тем, что должно там быть. Если сервак отдает лажу - проблема у вас, если браузеры принимают правильный код, а отображают не так как надо вам, проверяйте причины. В том числе расширения.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    автор, очевидно PHP работает не в браузере, а на сервере. твоя ошибка на стороне клиента - то есть в javascript.
    есть разница в объектной модели IE и остальных браузеров. предположу, что твой код в onclick на кнопке просто не работает или работает не так как ты ожидаешь. смотри сообщения в консоли JavaScript!

    одним словом: отлаживай!

    edited: Тут беда в последовательности событий. Большинство браузеров не ждут завершения выбора файла, а отрабатывают submit формы.
     
  4. Alex870

    Alex870 Новичок

    С нами с:
    8 дек 2013
    Сообщения:
    121
    Симпатии:
    2
    Спасибо за ответы.
    Извиняюсь, долго не мог выйти в инет, конец года, столько проблем на работе :).
    Я подозреваю, что сервер работает правильно, IE абсолютно качественно справляется с задачей.
    А вот это я думаю в точку. Я почти уверен, что проблема может быть только в ява-скрипте. Другой вопрос: как это исправить? Какую заплатку наложить, чтобы submit ждал окончания работы предыдущего input'а. Или вообще так нельзя делать, а нужно обязательно ставить 2 кнопки, типа "Обзор" и "Загрузить". Но я видел не раз, что дизайнеры обходятся одной.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    всё можно. предлагаю такой план:
    - делать клик не на кнопке submit, а где-то в более нейтральном месте. чтобы точно непроизвольной отправки небыло.
    у тебя, кроме прочего, сабмит срабатывает всегда, даже если юзер отказался от выбора файла — нехорошо!
    - на самом <input type=file> повесить событие onchange чтобы отловить событие выбора. вот тут можно делать form.submit(). а можно ограничиться превью, а сабмит пусть сам жмет.

    Добавлено спустя 1 минуту 27 секунд:
    попробуй так:
    Код (PHP):
    1. <form enctype="multipart/form-data" method="post" onsubmit="alert('Submitting...');">
    2.   
    3.   <input type="file" name="myfile" id="myfile" style="display:none" onchange="mybutton.click();"> 
    4.   
    5.   <label for="myfile">Select file</label><br> 
    6.   <input type="submit" name="mybutton" value="Submit" style="display:none">
    7. </form>
    Добавлено спустя 9 минут 21 секунду:
    кстати, в form.onsubmit ты можешь проверить что-то про файл и сделать return false если форма НЕ должна отправиться.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Что-то ни разу такой проблемы не возникало
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    что мешает проверить? возьми из первого поста форму, повесь алерт на онсабмит…
     
  8. Alex870

    Alex870 Новичок

    С нами с:
    8 дек 2013
    Сообщения:
    121
    Симпатии:
    2
    artoodetoo
    Спасибо большое! Не часто люди себя утруждают такой развернутый ответ давать, сейчас буду пробовать, но самое главное я понял свою ошибку :).
    Ну и так, попутно, а как ты вставляешь код, чтобы он правильно раскрашивался? Я имею в виду в сообщение.
     
  9. semnt

    semnt Новичок

    С нами с:
    25 дек 2013
    Сообщения:
    93
    Симпатии:
    0
    Можно нажать на кнопку "Цитата" и посмотреть код сообщения.
    И обратить внимание на конструкцию code=php в квадратных скобках.