Добрый день! Пишу свой MVC фреймворк. Никак не могу организовать проверку загружаемого файла на сервере после того как поместил форму в div для создания эффектов при появлении. На данный момент - открыл нужный view - по ссылке открыл div - ссылка на форму для выбора файла - открываем - редактируем - далее идет подтверждение и отправка на сервер, то есть форма и div закрываются. Как организовать проверку на сервере и возврат к форме без ее закрытия? PHP: <?php if (isset($_POST['crop'])) { $data = $_POST['crop']; list($type, $data) = explode(';', $data); list(, $data) = explode(',', $data); $data = base64_decode($data); $filename = SITE_PATH . DS . 'users' . DS . $_SESSION['id_user'] . '.png'; file_put_contents($filename, $data); $model = new Model_Users(); $model->id = $_SESSION['id_user']; $model->image = $_SESSION['id_user'] . '.png'; $model->update(); unset($_POST['crop']); } ?> HTML: <html> <head> <title>Настройки пользователя</title> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <link rel="stylesheet" type="text/css" href="/php/css/style.css"/> <link rel="stylesheet" type="text/css" href="/php/css/main.css"/> <link rel="stylesheet" type="text/css" href="/php/js/croppie/croppie.css" /> </head> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"> </script> <script src="/php/js/croppie/croppie.js"></script> <script> function OpenFileDialog() { $('#userfile').click(); } </script> <script> $(document).ready(function () { var basic = $('.demo').croppie({ boundary: { width: 200, height: 200 }, viewport: { width: 80, height: 80, type: 'circle' }, }); $('#userfile').on('change', function () { readFile(this); }); function readFile(input) { if (input.files && input.files[0]) { $('.demo').show(); var reader = new FileReader(); reader.onload = function (event) { basic.croppie('bind', { url: event.target.result }); } reader.readAsDataURL(input.files[0]); $('#send').show(); } } $('#send').on('click', function () { basic.croppie('result', { type: 'canvas', size: 'viewport' }).then(function (response) { $('#crop').val(response); $('#form').submit(); }); }); }); </script> <script> $(document).ready(function () { $('a[name=modal]').click(function (e) { e.preventDefault(); var id = $(this).attr('rel'); var maskHeight = $(document).height(); var maskWidth = $(window).width(); $('#mask').css({'width': maskWidth, 'height': maskHeight}); $('#mask').fadeIn(1000); $('#mask').fadeTo("slow", 0.8); var winH = $(window).height(); var winW = $(window).width(); $(id).css('top', winH / 2 - $(id).height() / 2); $(id).css('left', winW / 2 - $(id).width() / 2); $(id).fadeIn(2000); }); $('.window .close').click(function (e) { e.preventDefault(); $('#mask, .window').hide(); $('.demo').hide(); $('#send').hide(); }); $('#mask').click(function () { $(this).hide(); $('.window').hide(); $('.demo').hide(); $('#send').hide(); }); }); </script> <body> <p id="personal-user-image" style="background-image: url(/php/users/<?= $_SESSION['id_user'] ?>.png)"> <a href="javascript:void(0)" rel="#dialog" name="modal" >Изменить</a> </p> <div id="boxes"> <div id="dialog" class="window"> <div class="top"><a href="javascript:void(0)" class="link close"/>Закрыть</a></div> <div class="content"> <div class="demo" style="display:none"></div> <form id="form" enctype="multipart/form-data" method="post"> <input id="userfile" name="userfile" type="file" accept="image/*" style="display:none"> <input id="crop" name="crop" type="hidden"> <p style="text-align: center"> <input type="button" onclick="OpenFileDialog()" value="Выбрать"> <input type="submit" id="send" name="send" value="Сохранить" style="display:none"> </p> </form> </div> </div> </div> <div id="mask"></div> </body> </html>
ни чего не понятно. у тебя одна форма, в чём проблема её отправить и принять? не закрывай форму если не нужно.
Забыл предупредить, что PHP начал заниматься недавно. А если не закрывать, то как отправить для проверки? $_POST появляется только после отправки формы. Или я не прав?
Обычно делают две проверки, на javascript, и ещё на PHP. Попробуй рассказать какие действия делает пользователь и что получает в результате.
1. Заходит на страницу со своими личными данными. 2. Нажимает на пустой аватар и переходит на форму со ссылкой Выбрать файл. 3. Выбирает файл с диска после чего файл попадает в Croppier. 4. Редактирует фото и сохраняет с записью самого файла на сервер и имени файла в базу. Как сделать первую проверку с помощью JS я уже примерно знаю.
Скорее всего, проще будет помочь, если знать чего я добиваюсь. Как отправить и проверить форму и на сервере и на клиенте я разобрался когда сама форма на отдельной странице. На многих сайтах, например, окно регистрация открывается не на отдельной странице, а в отдельном модальном окне поверх основного. Интересует именно такая реализация. Когда ошибка в форме на отдельной страницы, просто возвращаюсь на эту страницу с указанием ошибок. Как вернуться к форме, которая находится в модальном окне и вызывается по нажатию на ссылку пользователем? Укажите правильное направление!
Просто нужно учитывать все варианты Что значит вернуться? Пользователь что делает? Нажимает назад? Или нажимает в форме сохранить? Если ты можешь показать форму по нажатию ссылки, значит она скрыта, и если пользователь вернулся, то не скрывай форму и показывай.
denis01, а можно для тех кто совсем в танке по порядку? Есть скрытая форма - пользователь нажал, заполнил, подтвердил, форма ушла на сервер на проверку и закрылась/скрылась. По submit она всегда закрывается или можно на это повлиять? Или мне ее снова программно показать в случае ошибок? В этом месте я застрял.
Речь про AJAX, видимо. На стороне php всё как обычно, на клиенте - javascript-код --- Добавлено --- Повлиять на клиенте можно на многое, если есть javascript. Без него всплывающие формы невозможны
До AJAX я еще, к сожалению, не дошел. Еще впереди. denis01, по-моему, на мысль все-таки навел по поводу скрытой формы. Буду копать. --- Добавлено --- Мысль, по-моему, уловил. Спасибо!!!