За последние 24 часа нас посетили 30368 программистов и 1753 робота. Сейчас ищут 850 программистов ...

Передача файла на сервер

Тема в разделе "PHP для новичков", создана пользователем smartCreate, 13 янв 2017.

  1. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Добрый день! Пытаюсь написать обработчик формы через которую пользователь оставляет отзыв и может прикрепить фотографию.

    Все отлично работает кроме загрузки фотографии, она попросту не загружается, а почему я не понимаю, все делаю правильно вроде бы, а она не грузиться хоть ты убей, при этом консоль нечего не говорит, успешно возвращается success, и network в консоли говорит что все "ок, информация передана".

    Может быть причина в php, может в клиенте, я уже не знаю, прошу взглянуть на мои скрипты, может вы поймете где у меня ошибка:

    Разметка формы:
    HTML:
    1.  
    2. <form id="contact-form" enctype="multipart/form-data" method="post" action="comments/add_comments">
    3.     <input type="name" placeholder="Ваше имя" name="comments_name">
    4.     <input type="text" placeholder="Город/поселок" name="comments_city">
    5.     <input type="email" placeholder="Ваш e-mail адрес" name="comments_email">
    6.     <input type="tel" placeholder="Ваш номер телефона" name="comments_phone">
    7.     <textarea placeholder="Пожалуйста напишите Ваш отзыв, здесь" name="comments_message" rows="3"></textarea><br>
    8.     <br>
    9.     <label class="control-label">Вы можете поделиться фотографиями с отдыха:</label><br>
    10.     <br>
    11.     <input type="file" name="img">
    12.     <br>
    13.     <button type="submit" class="button--8">ОСТАВИТЬ ОТЗЫВ</button>
    14. </form>
    15.  
    JS обработчик формы:
    Код (Javascript):
    1. $("form#contact-form").submit(function(e){
    2.     e.preventDefault();
    3.     var f = this,
    4.           data = $(f.elements).slice(0, -1),
    5.         s = $(f.elements).last(),
    6.         e = s.end().slice(0, -2).removeClass('input-error').filter(function() {
    7.             return !$.trim(this.value)
    8.         });
    9.     if(e.length) e.addClass('input-error');
    10.     else {
    11.         s.prop('disabled', 1);
    12.         s.end().not(s);
    13.         $.ajax({
    14.             url: f.action,
    15.             type: 'POST',
    16.             data: data,
    17.             dataType: 'json',
    18.             success: function(data) {
    19.                 thx('open');
    20.                 create_comments(data);
    21.                 f.reset();
    22.                 s.prop('disabled', 0);
    23.                 e.removeClass('input-error');
    24.                 $('body').animate(
    25.                     {
    26.                         scrollTop:$('.row.comment:first').offset().top - $('.navbar').outerHeight()
    27.                     },
    28.                     500
    29.                 );
    30.             }
    31.         });
    32.     }
    33. });
    Обработчик на сервере:
    PHP:
    1. //КОНТРОЛЛЕР
    2. function add_comments() {
    3.     $config['upload_path'] = './photo/';
    4.     $config['allowed_types'] = 'gif|jpg|png|jpeg';
    5.     $config['max_size']    = '3000';
    6.     $config['encrypt_name']    = TRUE;
    7.     $config['remove_spaces'] = TRUE;
    8.     $this->load->library('upload', $config);
    9.     $this->upload->do_upload();
    10.          
    11.     $image_data = $this->upload->data();
    12.          
    13.     $comments['name']  = $_POST['comments_name'];
    14.     $comments['city'] = $_POST['comments_city'];
    15.     $comments['email'] = $_POST['comments_email'];
    16.     $comments['phone'] = $_POST['comments_phone'];
    17.     $comments['comment'] = $_POST['comments_message'];
    18.     $comments['img'] = $image_data['file_name'];
    19.          
    20.     $comment_id = $this->main_model->new_comments($comments);
    21.          
    22.     $comment = array();
    23.     if ($comment_id)
    24.     {
    25.         $comment = $this->main_model->get_comments_limit(0,1);
    26.     }
    27.          
    28.     echo json_encode($comment);
    29. }
    30. // МОДЕЛЬ
    31. function new_comments($comments){
    32.     $array = array(
    33.         'date' => date("Y-m-d H:i:s", time()),
    34.         'name' => $comments['name'],
    35.         'city' => $comments['city'],
    36.         'email' => $comments['email'],
    37.         'phone' => $comments['phone'],
    38.         'comment' => $comments['comment'],
    39.         'img' => $comments['img']
    40.     );
    41.     $this->db->insert('comments', $array);
    42.     return $this->db->insert_id();
    43. }
    Заранее благодарен за любую помощь!

    P.S. Серверная часть написана на php-фреймворке Codignaiter
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    там ещё можно посмотреть какие данные были отправлены. смотри "инструменты разработчика" в google chrome

    отладка/debug
    http://phpfaq.ru/debug
    https://netbeans.org/kb/docs/php/debugging_ru.html
    https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
     
  3. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Только сегодня сам бился об ajax в jquery. Если у вас стоит dataType:"json" то даже при возвращении корректного json c правильными заголовками в jquery не будет срабатывать событие success. Вообщем уберите dataType:"json" и всё должно заработать.
     
  4. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Спасибо за участие, разобрался уже, причина была в том что этой формой я передаю в $.ajax не только текст но и файл, а информацию с файлом нужно обрабатывать в $.ajax по другому, с помощью вот такого метода: form = new FormData(this),
     
  5. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Код (Text):
    1. input type="name"

    Шта????