нужна помощь по PHP |
Здравствуйте, гость ( Вход | Регистрация )
нужна помощь по PHP |
28 Nov 2016, 18:35
Сообщение
#1
|
|
Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз |
Помогите реализовать следующее:
1. Запускаешь скрипт index.php 2. На экран выводятся картин из папки на сервере /img, имена у картинок такого вида 01_001.png (две цифры_три цифры) под которыми стоит checkbox (возможность поставки галочки) и кнопка Отправить 3. Чел выделяет нужные картинки и нажимает кнопку и мне на e-mail приходит файл/список выбранных файлов в столбик и с другим расширение 01_222.jpg 05_549.jpg .... Нашел вывод из папки Код <?php $dir = 'img/'; // Папка с изображениями $cols = 3; // Количество столбцов в будущей таблице с картинками $files = scandir($dir); // Берём всё содержимое директории echo "<table>"; // Начинаем таблицу $k = 0; // Вспомогательный счётчик для перехода на новые строки for ($i = 0; $i < count($files); $i++) { // Перебираем все файлы if (($files[$i] != ".") && ($files[$i] != "..")) { // Текущий каталог и родительский пропускаем if ($k % $cols == 0) echo "<tr>"; // Добавляем новую строку echo "<td>"; // Начинаем столбец $path = $dir.$files[$i]; // Получаем путь к картинке echo "<a href='$path'>"; // Делаем ссылку на картинку echo "<img src='$path' alt='' width='100' />"; // Вывод превью картинки echo "</a>"; // Закрываем ссылку echo "</td>"; // Закрываем столбец /* Закрываем строку, если необходимое количество было выведено, либо данная итерация последняя */ if ((($k + 1) % $cols == 0) || (($i + 1) == count($files))) echo "</tr>"; $k++; // Увеличиваем вспомогательный счётчик } } echo "</table>"; // Закрываем таблицу ?> Догадываюсь, что это все нужно обернуть в форму и добавить элемент checkbox А вот как дальше сформировать файл/список из выбранных не знаю... |
|
|
28 Nov 2016, 18:50
Сообщение
#2
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Цитата А вот как дальше сформировать файл/список из выбранных не знаю... Думаю наверно надо делать на jQuiry как вот здесь http://styopdev.github.io/multiPicker/ru.html -------------------- |
|
|
29 Nov 2016, 12:50
(Сообщение отредактировал Shurup - 29 Nov 2016, 12:54)
Причина редактирования: T9
Сообщение
#3
|
|
Щирий українець Сообщений: 1 456 Спасибо сказали: 3023 раза |
Вся магия в поле name у чекбоксов.
Даёшь им имя с ключом и в запросе они придут в виде масива После файла 00_001.png чекбокс с name="sel_files[00_001]", аналогично по всем остальным файлам. В результате отправки формы, на скрипт в экшне формы придёт масив $sel_files, в котором выбранные файлы будут ключами (без расширений). Ключи можно выбрать array_keys и с помощью array_map получить массив полных путей с нужным расширением. Ну или по старинке - foreach. Саму отправку не описываю, зависит от мейлера. |
|
|
29 Nov 2016, 14:47
Сообщение
#4
|
|
Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз |
вроде работает.
вот так вывожу картинки с чекбоксами Код <script> function send_form() { var msg = $("#contact-form").serialize(); $.ajax({ type: "POST", url: "send_form.php", data: msg, success: function(data) { alert("Сообщение отправлено"); setTimeout(function () { $(".feedback_form_bg").fadeOut();}, 1000); }, error: function(xhr, str){ alert("Возникла ошибка!"); setTimeout(function () {$(".feedback_form_bg").fadeOut();}, 1000); } }); } </script> <?php $dir = 'img/'; // Папка с изображениями $files = scandir($dir); // Берём всё содержимое директории echo "<div class='wrapper'>"; echo "<form action='send_form.php' method='post' id='contact-form'>"; for ($i = 0; $i < count($files); $i++) { // Перебираем все файлы if (($files[$i] != ".") && ($files[$i] != "..")) { // Текущий каталог и родительский пропускаем echo "<div class='img'>"; // Начинаем столбец $path = $dir.$files[$i]; // Получаем путь к картинке echo "<img src='$path' alt='' width='200px' height='280px'/>"; // Вывод превью картинки echo "<br><input type='checkbox' name='image[]' value='$files[$i]'/>"; echo "</div>"; // Закрываем столбец } } echo "<br><button type='submit'>Отправить</button>"; echo "</form>"; echo "</div>"; ?> Вот обработчик Код <?php $images= is_array($_POST['image']) ? $_POST['image'] : array(); $images= implode (', ', $images); $name= $_POST['name']; $subject= $_POST['subject']; $email= $_POST['email']; $message= $_POST['message']; $emailTo = 'woggrad@yandex.ru'; //Сюда введите Ваш email $body = "$name \n\n$subject\n\n$email \n\n$message \n\n$images"; $headers = "Content-Type: text/plain; charset=utf-8\r\n".'From: MySite <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $emailTo; mail($emailTo, $name, $body, $headers); $emailSent = true; ?> Вот только скрипт в начале - никаких сообщений не выдает... |
|
|
29 Nov 2016, 15:44
Сообщение
#5
|
|
Зануда Сообщений: 2 236 Спасибо сказали: 2894 раза |
Цитата Вот только скрипт в начале - никаких сообщений не выдает... Какой скрипт? JS? Консоль ошибок в браузере что-нибудь выдаёт? Каков результат запроса к серверу (вкладка network рядом с консолью)? |
|
|
29 Nov 2016, 16:19
(Сообщение отредактировал t800 - 29 Nov 2016, 16:31)
Сообщение
#6
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Цитата Вот только скрипт в начале - никаких сообщений не выдает... Какой скрипт? JS? Консоль ошибок в браузере что-нибудь выдаёт? Каков результат запроса к серверу (вкладка network рядом с консолью)? Хммм.. Ну меня тоже никаких уведомлений не выдает... Вот он этот скрипт http://wiki.kvkozyrev.org/php/ PS Короче он и не должен выводить сообщений, потому что код который Код <script> function send_form() { var msg = $("#contact-form").serialize(); $.ajax({ type: "POST", url: "send_form.php", data: msg, success: function(data) { alert("Сообщение отправлено"); setTimeout(function () { $(".feedback_form_bg").fadeOut();}, 1000); }, error: function(xhr, str){ alert("Возникла ошибка!"); setTimeout(function () {$(".feedback_form_bg").fadeOut();}, 1000); } }); } </script> При нажатии кнопки не выполняется, потому что если его совсем убрать. Все точно также и без него отправляется одной формой, Вот так: Код <html lang="ru">
<head> <meta charset="utf-8" /> <title>Тестируем скрип от IZVRUKVRUKI</title> <meta name="generator" content="T800"/> </head> <?php $dir = 'img/'; // Папка с изображениями $files = scandir($dir); // Берём всё содержимое директории echo "<p>ТЕСТИРУЕМ скрипт IZVRUKVRUKI!</p>"; echo "<div class='wrapper'>"; echo "<form action='send_form.php' method='post' id='contact-form'>"; for ($i = 0; $i < count($files); $i++) { // Перебираем все файлы if (($files[$i] != ".") && ($files[$i] != "..")) { // Текущий каталог и родительский пропускаем echo "<div class='img'>"; // Начинаем столбец $path = $dir.$files[$i]; // Получаем путь к картинке echo "<img src='$path' alt='' width='60px' height=''/>"; // Вывод превью картинки echo "<br><input type='checkbox' name='image[]' value='$files[$i]'/>"; echo "</div>"; // Закрываем столбец } } echo "<br><button type='submit'>Отправить</button>"; echo "</form>"; echo "</div>"; ?> -------------------- |
|
|
29 Nov 2016, 16:36
(Сообщение отредактировал Эроласт - 29 Nov 2016, 16:36)
Сообщение
#7
|
|
Зануда Сообщений: 2 236 Спасибо сказали: 2894 раза |
А... ну да, функция send_form попросту нигде не вызывается.
|
|
|
29 Nov 2016, 17:08
(Сообщение отредактировал t800 - 29 Nov 2016, 18:30)
Сообщение
#8
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Вот короче сделал чтобы при отправке выводились уведомления см. http://wiki.kvkozyrev.org/php/index2.php
Правильный код для index.php должен быть таким Сперва обязательно надо подключить jquery.js Код <script src="http://yandex.st/jquery/1.9.1/jquery.js"></script> Потом скрипт работы с формой Код <script> function send_form() { var msg = $("#contact-form").serialize(); $.ajax({ type: "POST", url: "send_form.php", data: msg, success: function(data) { alert("Сообщение отправлено"); setTimeout(function () { $(".feedback_form_bg").fadeOut();}, 1000); }, error: function(xhr, str){ alert("Возникла ошибка!"); setTimeout(function () {$(".feedback_form_bg").fadeOut();}, 1000); } }); } </script> И в самой форме вызвать функцию из java script Код <?php $dir = 'img/'; // Папка с изображениями $files = scandir($dir); // Берём всё содержимое директории echo "<p>ТЕСТИРУЕМ скрипт IZVRUKVRUKI!</p>"; echo "<div class='wrapper'>"; echo "<form method='post' action='java script:void(0)' onsubmit='send_form()' id='contact-form'>"; for ($i = 0; $i < count($files); $i++) { // Перебираем все файлы if (($files[$i] != ".") && ($files[$i] != "..")) { // Текущий каталог и родительский пропускаем echo "<div class='img'>"; // Начинаем столбец $path = $dir.$files[$i]; // Получаем путь к картинке echo "<img src='$path' alt='' width='60px' height=''/>"; // Вывод превью картинки echo "<br><input type='checkbox' name='image[]' value='$files[$i]'/>"; echo "</div>"; // Закрываем столбец } } echo "<br><button type='submit'>Отправить</button>"; echo "</form>"; echo "</div>"; ?> И тогда письмо оправляется с уведомлениями и без всяких глупых белых страниц -------------------- |
|
|
29 Nov 2016, 17:31
(Сообщение отредактировал t800 - 29 Nov 2016, 17:33)
Сообщение
#9
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
А как сделать чтоб выдавало сообщение после нажатия на кнопку, что сообщение отправлено? Сделано же уже см. http://wiki.kvkozyrev.org/php/index2.php Нажимаешь на кнопку выдает сообщение что оправлено -------------------- |
|
|
29 Nov 2016, 17:33
Сообщение
#10
|
|
Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз |
А можно куда-то вставить строку счетчик выделенных картинок "Выделено картинок: 65"???
А как сделать чтоб выдавало сообщение после нажатия на кнопку, что сообщение отправлено? Сделано же уже см. http://wiki.kvkozyrev.org/php/index2.php Нажимаешь на кнопку выдает сообщение что оправлено ага, это я пока писал - ты написал. |
|
|
29 Nov 2016, 17:39
Сообщение
#11
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
А можно куда-то вставить строку счетчик выделенных картинок "Выделено картинок: 65"??? Думаю можно, но наверно уже только завтра, потому уже поздно и меня сейчас с копьютера прогонят. -------------------- |
|
|
29 Nov 2016, 17:50
(Сообщение отредактировал izrukvruki - 29 Nov 2016, 18:22)
Сообщение
#12
|
|
Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз |
А у меня твой код не работает http://book-let.ru/img/
А потому что ты написал action='java script:void(0)' пробел там лишний Счетчик нашел: http://ru.stackoverflow.com/questions/2971...BD%D0%B0-jquery |
|
|
29 Nov 2016, 18:32
(Сообщение отредактировал t800 - 29 Nov 2016, 18:35)
Сообщение
#13
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
А у меня твой код не работает http://book-let.ru/img/ Может при копировании ошибка? PS У меня все работает и счетчик тоже см. http://wiki.kvkozyrev.org/php/index.php А у меня твой код не работает http://book-let.ru/img/ А потому что ты написал action='java script:void(0)' пробел там лишний Это не я написал это DF2 такой хитрый, копируешь ему в коде javascript слитно а он разделяет Код echo "<form method='post' action='java script:void(0)' onsubmit='send_form()' id='contact-form'>";
-------------------- |
|
|
29 Nov 2016, 18:51
Сообщение
#14
|
|
Зануда Сообщений: 2 236 Спасибо сказали: 2894 раза |
Это не я написал это DF2 такой хитрый, копируешь ему в коде javascript слитно а он разделяет Код echo "<form method='post' action='java script:void(0)' onsubmit='send_form()' id='contact-form'>"; DF2 не хитрый, DF2 идиот) В данном случае атрибут action для формы вообще не нужен. |
|
|
29 Nov 2016, 19:11
Сообщение
#15
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Это не я написал это DF2 такой хитрый, копируешь ему в коде javascript слитно а он разделяет Код echo "<form method='post' action='java script:void(0)' onsubmit='send_form()' id='contact-form'>"; DF2 не хитрый, DF2 идиот) В данном случае атрибут action для формы вообще не нужен. Хммм... Если убрать action='java script:void(0)' и написать просто Код echo "<form method='post' onsubmit='send_form()' id='contact-form'>"; То ничего не отправляет и выдает ошибку см. http://wiki.kvkozyrev.org/php/index4.php -------------------- |
|
|
29 Nov 2016, 19:21
(Сообщение отредактировал Эроласт - 29 Nov 2016, 19:25)
Сообщение
#16
|
|
Зануда Сообщений: 2 236 Спасибо сказали: 2894 раза |
Я бы сделал вот так:
Код <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>izrukvruki</title> </head> <body> <?php $dir = 'img/'; // Папка с изображениями $files = scandir($dir); // Берём всё содержимое директории echo "<div class='wrapper'>"; echo "<div><span id='counter'>0</span> изображений выбрано</div>"; echo "<form method='post' onsubmit='send_form()' id='contact-form'>"; for ($i = 0; $i < count($files); $i++) { // Перебираем все файлы if (($files[$i] != ".") && ($files[$i] != "..")) { // Текущий каталог и родительский пропускаем echo "<div class='img'>"; // Начинаем столбец $path = $dir.$files[$i]; // Получаем путь к картинке echo "<img src='$path' alt='' width='60px' height=''/>"; // Вывод превью картинки echo "<br><input type='checkbox' name='image[]' value='$files[$i]' class='check-image-input'/>"; echo "</div>"; // Закрываем столбец } } echo "<br><button type='submit'>Отправить</button>"; echo "</form>"; echo "</div>"; ?> <script src="http://yandex.st/jquery/1.9.1/jquery.js"></script> <script> $("#contant-form").on("submit", function(event) { event.preventDefault(); var msg = $('#contact-form').serialize(); $.ajax({ type: 'POST', url: 'send_form.php', data: msg, success: function (data) { alert('Сообщение отправлено'); setTimeout(function () { $('.feedback_form_bg').fadeOut(); }, 1000); }, error: function (xhr, str) { alert('Возникла ошибка!'); setTimeout(function () { $('.feedback_form_bg').fadeOut(); }, 1000); } }); }); $(".check-image-input").on("change", function() { var count = $(".check-image-input:checked").length; $("#counter").html(count); }); </script> </body> </html> Если убрать action='java script:void(0)' и написать просто Код echo "<form method='post' onsubmit='send_form()' id='contact-form'>"; То ничего не отправляет и выдает ошибку см. http://wiki.kvkozyrev.org/php/index4.php А, прошу прощения... еще event.preventDefault() нужен. Добавил свой код. |
|
|
29 Nov 2016, 19:34
(Сообщение отредактировал t800 - 29 Nov 2016, 19:36)
Сообщение
#17
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Цитата Цитата То ничего не отправляет и выдает ошибку см. http://wiki.kvkozyrev.org/php/index4.php А, прошу прощения... еще event.preventDefault() нужен. Добавил свой код. Что то так ничего не отправляет и сообщений тоже не выводит см. http://wiki.kvkozyrev.org/php/index5.php -------------------- |
|
|
29 Nov 2016, 20:00
Сообщение
#18
|
|
Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз |
Отлично работает!!!
Имена файлов приходят через запятую благодаря стракам Код $images= is_array($_POST['image']) ? $_POST['image'] : array(); $images= implode (', ', $images); А в столбик можно? |
|
|
29 Nov 2016, 20:08
(Сообщение отредактировал Эроласт - 29 Nov 2016, 20:04)
Сообщение
#19
|
|
Зануда Сообщений: 2 236 Спасибо сказали: 2894 раза |
Что то так ничего не отправляет и сообщений тоже не выводит см. http://wiki.kvkozyrev.org/php/index5.php Потому что я косячник) В 31 строке опечатался - написал contant-form вместо contact-form. А еще атрибут onsubmit с формы убрать забыл. Надо так: Код <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>izrukvruki</title> </head> <body> <?php $dir = 'img/'; // Папка с изображениями $files = scandir($dir); // Берём всё содержимое директории echo "<div class='wrapper'>"; echo "<div id='counter'></div>"; echo "<form method='post' id='contact-form'>"; for ($i = 0; $i < count($files); $i++) { // Перебираем все файлы if (($files[$i] != ".") && ($files[$i] != "..")) { // Текущий каталог и родительский пропускаем echo "<div class='img'>"; // Начинаем столбец $path = $dir.$files[$i]; // Получаем путь к картинке echo "<img src='$path' alt='' width='60px' height=''/>"; // Вывод превью картинки echo "<br><input type='checkbox' name='image[]' value='$files[$i]' class='check-image-input'/>"; echo "</div>"; // Закрываем столбец } } echo "<br><button type='submit'>Отправить</button>"; echo "</form>"; echo "</div>"; ?> <script src="http://yandex.st/jquery/1.9.1/jquery.js"></script> <script> $("#contact-form").on("submit", function(event) { event.preventDefault(); var msg = $('#contact-form').serialize(); $.ajax({ type: 'POST', url: 'send_form.php', data: msg, success: function (data) { alert('Сообщение отправлено'); setTimeout(function () { $('.feedback_form_bg').fadeOut(); }, 1000); }, error: function (xhr, str) { alert('Возникла ошибка!'); setTimeout(function () { $('.feedback_form_bg').fadeOut(); }, 1000); } }); }); $(".check-image-input").on("change", function() { var count = $(".check-image-input:checked").length; $("#counter").html(count); }); </script> </body> </html> Отлично работает!!! Имена файлов приходят через запятую благодаря стракам Код $images= is_array($_POST['image']) ? $_POST['image'] : array(); $images= implode (', ', $images); А в столбик можно? Код $images = is_array($_POST['image']) ? $_POST['image'] : array(); $images = implode("\n", $images); Так? |
|
|
29 Nov 2016, 20:19
Сообщение
#20
|
|
Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз |
Код 01.jpg\n02.jpg\n03.jpg
|
|
|
Текстовая версия | Сейчас: 25 April 2024 - 15:01 |
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |