За последние 24 часа нас посетили 15477 программистов и 1606 роботов. Сейчас ищут 869 программистов ...

Проверка данных формы

Тема в разделе "PHP для новичков", создана пользователем Alexoid, 16 июн 2016.

  1. Alexoid

    Alexoid Новичок

    С нами с:
    16 июн 2016
    Сообщения:
    16
    Симпатии:
    1
    Добрый день!

    Пишу свой MVC фреймворк. Никак не могу организовать проверку загружаемого файла на сервере после того как поместил форму в div для создания эффектов при появлении.
    На данный момент - открыл нужный view - по ссылке открыл div - ссылка на форму для выбора файла - открываем - редактируем - далее идет подтверждение и отправка на сервер, то есть форма и div закрываются. Как организовать проверку на сервере и возврат к форме без ее закрытия?

    PHP:
    1. <?php
    2. if (isset($_POST['crop'])) {
    3.     $data = $_POST['crop'];
    4.     list($type, $data) = explode(';', $data);
    5.     list(, $data) = explode(',', $data);
    6.     $data = base64_decode($data);
    7.  
    8.     $filename = SITE_PATH . DS . 'users' . DS . $_SESSION['id_user'] . '.png';
    9.     file_put_contents($filename, $data);
    10.  
    11.     $model = new Model_Users();
    12.     $model->id = $_SESSION['id_user'];
    13.     $model->image = $_SESSION['id_user'] . '.png';
    14.     $model->update();
    15.  
    16.     unset($_POST['crop']);
    17. }
    18. ?>
    HTML:
    1.     <head>
    2.         <title>Настройки пользователя</title>
    3.         <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
    4.         <link rel="stylesheet" type="text/css" href="/php/css/style.css"/>
    5.         <link rel="stylesheet" type="text/css" href="/php/css/main.css"/>
    6.         <link rel="stylesheet" type="text/css" href="/php/js/croppie/croppie.css" />
    7.     </head>
    8.  
    9.     <script type="text/javascript"
    10.            src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">
    11.     </script>
    12.  
    13.     <script src="/php/js/croppie/croppie.js"></script>
    14.  
    15.     <script>
    16.                 function OpenFileDialog() {
    17.                     $('#userfile').click();
    18. }
    19.  
    20.     $(document).ready(function () {
    21.         var basic = $('.demo').croppie({
    22.             boundary: {
    23.                 width: 200,
    24.                 height: 200
    25.             },
    26.             viewport: {
    27.                 width: 80,
    28.                 height: 80,
    29.                 type: 'circle'
    30.             },
    31.         });
    32.  
    33.         $('#userfile').on('change', function () {
    34.             readFile(this);
    35.         });
    36.  
    37.         function readFile(input) {
    38.             if (input.files && input.files[0]) {
    39.                $('.demo').show();
    40.                 var reader = new FileReader();
    41.                 reader.onload = function (event) {
    42.                     basic.croppie('bind', {
    43.                         url: event.target.result
    44.                     });
    45.                 }
    46.                 reader.readAsDataURL(input.files[0]);
    47.                 $('#send').show();
    48.             }
    49.         }
    50.  
    51.         $('#send').on('click', function () {
    52.             basic.croppie('result', {
    53.                 type: 'canvas',
    54.                 size: 'viewport'
    55.             }).then(function (response) {
    56.                 $('#crop').val(response);
    57.                 $('#form').submit();
    58.             });
    59.         });
    60.     });
    61.  
    62.     $(document).ready(function () {
    63.         $('a[name=modal]').click(function (e) {
    64.             e.preventDefault();
    65.             var id = $(this).attr('rel');
    66.             var maskHeight = $(document).height();
    67.             var maskWidth = $(window).width();
    68.             $('#mask').css({'width': maskWidth, 'height': maskHeight});
    69.             $('#mask').fadeIn(1000);
    70.             $('#mask').fadeTo("slow", 0.8);
    71.             var winH = $(window).height();
    72.             var winW = $(window).width();
    73.             $(id).css('top', winH / 2 - $(id).height() / 2);
    74.             $(id).css('left', winW / 2 - $(id).width() / 2);
    75.             $(id).fadeIn(2000);
    76.         });
    77.         $('.window .close').click(function (e) {
    78.             e.preventDefault();
    79.             $('#mask, .window').hide();
    80.             $('.demo').hide();
    81.             $('#send').hide();
    82.         });
    83.         $('#mask').click(function () {
    84.             $(this).hide();
    85.             $('.window').hide();
    86.             $('.demo').hide();
    87.             $('#send').hide();
    88.         });
    89.     });
    90.  
    91.     <p id="personal-user-image" style="background-image: url(/php/users/<?= $_SESSION['id_user'] ?>.png)">
    92.         <a href="javascript:void(0)" rel="#dialog" name="modal" >Изменить</a>
    93.     </p>
    94.  
    95.     <div id="boxes">
    96.         <div id="dialog" class="window">
    97.             <div class="top"><a href="javascript:void(0)" class="link close"/>Закрыть</a></div>
    98.             <div class="content">
    99.                 <div class="demo" style="display:none"></div>
    100.                 <form id="form" enctype="multipart/form-data" method="post">
    101.                     <input id="userfile" name="userfile" type="file" accept="image/*" style="display:none">
    102.                     <input id="crop" name="crop" type="hidden">
    103.                     <p style="text-align: center">
    104.                         <input type="button" onclick="OpenFileDialog()" value="Выбрать">
    105.                         <input type="submit" id="send" name="send" value="Сохранить" style="display:none">
    106.                     </p>
    107.                 </form>
    108.             </div>
    109.         </div>
    110.     </div>
    111.     <div id="mask"></div>
    112. </body>
    113. </html>
     
  2. denis01

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

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

    Alexoid Новичок

    С нами с:
    16 июн 2016
    Сообщения:
    16
    Симпатии:
    1
    Забыл предупредить, что PHP начал заниматься недавно. А если не закрывать, то как отправить для проверки? $_POST появляется только после отправки формы. Или я не прав?
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Обычно делают две проверки, на javascript, и ещё на PHP.
    Попробуй рассказать какие действия делает пользователь и что получает в результате.
     
  5. Alexoid

    Alexoid Новичок

    С нами с:
    16 июн 2016
    Сообщения:
    16
    Симпатии:
    1
    1. Заходит на страницу со своими личными данными.
    2. Нажимает на пустой аватар и переходит на форму со ссылкой Выбрать файл.
    3. Выбирает файл с диска после чего файл попадает в Croppier.
    4. Редактирует фото и сохраняет с записью самого файла на сервер и имени файла в базу.

    Как сделать первую проверку с помощью JS я уже примерно знаю.
     
    #5 Alexoid, 16 июн 2016
    Последнее редактирование: 16 июн 2016
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Как это может сочетаться?
     
  7. Alexoid

    Alexoid Новичок

    С нами с:
    16 июн 2016
    Сообщения:
    16
    Симпатии:
    1
    Тяжело, но процесс идет.
     
  8. Alexoid

    Alexoid Новичок

    С нами с:
    16 июн 2016
    Сообщения:
    16
    Симпатии:
    1
    Скорее всего, проще будет помочь, если знать чего я добиваюсь. Как отправить и проверить форму и на сервере и на клиенте я разобрался когда сама форма на отдельной странице. На многих сайтах, например, окно регистрация открывается не на отдельной странице, а в отдельном модальном окне поверх основного. Интересует именно такая реализация. Когда ошибка в форме на отдельной страницы, просто возвращаюсь на эту страницу с указанием ошибок. Как вернуться к форме, которая находится в модальном окне и вызывается по нажатию на ссылку пользователем? Укажите правильное направление!
     
  9. denis01

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

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

    Что значит вернуться? Пользователь что делает? Нажимает назад? Или нажимает в форме сохранить?
    Если ты можешь показать форму по нажатию ссылки, значит она скрыта, и если пользователь вернулся, то не скрывай форму и показывай.
     
  10. Alexoid

    Alexoid Новичок

    С нами с:
    16 июн 2016
    Сообщения:
    16
    Симпатии:
    1
    denis01, а можно для тех кто совсем в танке по порядку? Есть скрытая форма - пользователь нажал, заполнил, подтвердил, форма ушла на сервер на проверку и закрылась/скрылась. По submit она всегда закрывается или можно на это повлиять? Или мне ее снова программно показать в случае ошибок? В этом месте я застрял.
     
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Речь про AJAX, видимо. На стороне php всё как обычно, на клиенте - javascript-код
    --- Добавлено ---
    Повлиять на клиенте можно на многое, если есть javascript. Без него всплывающие формы невозможны
     
  12. Alexoid

    Alexoid Новичок

    С нами с:
    16 июн 2016
    Сообщения:
    16
    Симпатии:
    1
    До AJAX я еще, к сожалению, не дошел. Еще впереди. denis01, по-моему, на мысль все-таки навел по поводу скрытой формы. Буду копать.
    --- Добавлено ---
    Мысль, по-моему, уловил. Спасибо!!!
     
  13. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Без AJAX будет перезагрузка страницы, скрытая или не скрытая...