IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Reply to this topicStart new topic
> нужна помощь по PHP
izrukvruki
сообщение 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

А вот как дальше сформировать файл/список из выбранных не знаю...
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 28 Nov 2016, 18:50
Сообщение #2

Разработчик
Сообщений: 534
Спасибо сказали: 221 раз




Цитата
А вот как дальше сформировать файл/список из выбранных не знаю...


Думаю наверно надо делать на jQuiry как вот здесь http://styopdev.github.io/multiPicker/ru.html



--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Shurup
сообщение 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.

Саму отправку не описываю, зависит от мейлера.
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 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;

?>


Вот только скрипт в начале - никаких сообщений не выдает...
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 29 Nov 2016, 15:44
Сообщение #5

Зануда
Сообщений: 2 236
Спасибо сказали: 2894 раза




Цитата
Вот только скрипт в начале - никаких сообщений не выдает...

Какой скрипт? JS? Консоль ошибок в браузере что-нибудь выдаёт? Каков результат запроса к серверу (вкладка network рядом с консолью)?
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 29 Nov 2016, 16:19 (Сообщение отредактировал t800 - 29 Nov 2016, 16:31)
Сообщение #6

Разработчик
Сообщений: 534
Спасибо сказали: 221 раз




Цитата(Эроласт @ 29 Nov 2016, 18:44) *
Цитата
Вот только скрипт в начале - никаких сообщений не выдает...

Какой скрипт? 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>";

?>


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 29 Nov 2016, 16:36 (Сообщение отредактировал Эроласт - 29 Nov 2016, 16:36)
Сообщение #7

Зануда
Сообщений: 2 236
Спасибо сказали: 2894 раза




А... ну да, функция send_form попросту нигде не вызывается.
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 29 Nov 2016, 17:08 (Сообщение отредактировал t800 - 29 Nov 2016, 18:30)
Сообщение #8

Разработчик
Сообщений: 534
Спасибо сказали: 221 раз




Вот короче сделал barb_metal.gif barb_metal.gif barb_metal.gif чтобы при отправке выводились уведомления см. 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>";
?>


И тогда письмо оправляется с уведомлениями и без всяких глупых белых страниц moral.gif moral.gif moral.gif


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 29 Nov 2016, 17:31 (Сообщение отредактировал t800 - 29 Nov 2016, 17:33)
Сообщение #9

Разработчик
Сообщений: 534
Спасибо сказали: 221 раз




Цитата(izrukvruki @ 29 Nov 2016, 20:28) *
А как сделать чтоб выдавало сообщение после нажатия на кнопку, что сообщение отправлено?



Сделано же уже см. http://wiki.kvkozyrev.org/php/index2.php
Нажимаешь на кнопку выдает сообщение что оправлено


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 29 Nov 2016, 17:33
Сообщение #10

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




А можно куда-то вставить строку счетчик выделенных картинок "Выделено картинок: 65"???

Цитата(t800 @ 29 Nov 2016, 17:31) *
Цитата(izrukvruki @ 29 Nov 2016, 20:28) *
А как сделать чтоб выдавало сообщение после нажатия на кнопку, что сообщение отправлено?



Сделано же уже см. http://wiki.kvkozyrev.org/php/index2.php
Нажимаешь на кнопку выдает сообщение что оправлено


ага, это я пока писал - ты написал.
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 29 Nov 2016, 17:39
Сообщение #11

Разработчик
Сообщений: 534
Спасибо сказали: 221 раз




Цитата(izrukvruki @ 29 Nov 2016, 20:33) *
А можно куда-то вставить строку счетчик выделенных картинок "Выделено картинок: 65"???


Думаю можно, но наверно уже только завтра, потому уже поздно и меня сейчас с копьютера прогонят.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 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
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 29 Nov 2016, 18:32 (Сообщение отредактировал t800 - 29 Nov 2016, 18:35)
Сообщение #13

Разработчик
Сообщений: 534
Спасибо сказали: 221 раз




Цитата(izrukvruki @ 29 Nov 2016, 20:50) *
А у меня твой код не работает http://book-let.ru/img/


Может при копировании ошибка?

PS У меня все работает и счетчик тоже см. http://wiki.kvkozyrev.org/php/index.php

Цитата(izrukvruki @ 29 Nov 2016, 20:50) *
А у меня твой код не работает 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'>";


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 29 Nov 2016, 18:51
Сообщение #14

Зануда
Сообщений: 2 236
Спасибо сказали: 2894 раза




Цитата(t800 @ 29 Nov 2016, 21:32) *
Это не я написал это DF2 такой хитрый, копируешь ему в коде javascript слитно а он разделяет
Код
echo "<form method='post' action='java script:void(0)' onsubmit='send_form()' id='contact-form'>";

DF2 не хитрый, DF2 идиот)
В данном случае атрибут action для формы вообще не нужен.
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 29 Nov 2016, 19:11
Сообщение #15

Разработчик
Сообщений: 534
Спасибо сказали: 221 раз




Цитата(Эроласт @ 29 Nov 2016, 21:51) *
Цитата(t800 @ 29 Nov 2016, 21:32) *
Это не я написал это 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


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 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>


Цитата(t800 @ 29 Nov 2016, 22:11) *
Если убрать action='java script:void(0)' и написать просто
Код
echo "<form method='post' onsubmit='send_form()' id='contact-form'>";

То ничего не отправляет и выдает ошибку см. http://wiki.kvkozyrev.org/php/index4.php

А, прошу прощения... еще event.preventDefault() нужен. Добавил свой код.
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 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


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 29 Nov 2016, 20:00
Сообщение #18

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




Отлично работает!!!

Имена файлов приходят через запятую благодаря стракам
Код
$images= is_array($_POST['image']) ? $_POST['image'] : array();
    $images= implode (', ', $images);


А в столбик можно?
Go to the top of the pageAdd Nick
 
+Quote Post
Эроласт
сообщение 29 Nov 2016, 20:08 (Сообщение отредактировал Эроласт - 29 Nov 2016, 20:04)
Сообщение #19

Зануда
Сообщений: 2 236
Спасибо сказали: 2894 раза




Цитата(t800 @ 29 Nov 2016, 22:34) *
Что то так ничего не отправляет и сообщений тоже не выводит

см. 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>


Цитата(izrukvruki @ 29 Nov 2016, 23:00) *
Отлично работает!!!

Имена файлов приходят через запятую благодаря стракам
Код
$images= is_array($_POST['image']) ? $_POST['image'] : array();
    $images= implode (', ', $images);


А в столбик можно?

Код
$images = is_array($_POST['image']) ? $_POST['image'] : array();
$images = implode("\n", $images);

Так?


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 29 Nov 2016, 20:19
Сообщение #20

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




Код
01.jpg\n02.jpg\n03.jpg
Go to the top of the pageAdd Nick
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28 March 2024 - 23:41
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика