На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > Не передаются значения из одной функции в другую, И заодно хочется убрать предупреждение (варнинг) о пустом значении
      Написал функцию сканирования каталогов и выбора только картинок с превью. Сама по себе работает хорошо, для её вызова написал кнопку. Написал форму списка, куда хотел передавать результаты сканирования вместе с превью. Но строки не добавляются, пишет, что число строк не должно быть пустым. Когда кнопка не нажата, такое предупреждение понятно, хотя пока не придумал как с ним бороться, но это второй вопрос. В первую очередь хочется передать результаты сканирования. Причем пока не делал выборку картинок, все результаты передавались, строки добавлялись, естественно превью работало только на картинках, на других файлах был пустой квадратик, который по идее можно заменить типичной картинкой под формат файла. Но хочется не валить все в кучу, а делать выборку по типам файлов. Вот код (называется scan.php он же прописан в форме, чтоб не мудрствовать):
      ExpandedWrap disabled
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        </head>
        <?php
        // Вызов функции обработки результатов сканирования
        if (isset($_POST['find_all_pic']))
        {find_all_pic('.');}
        ?>
         
        <!--- Кнопка для сканирования --->
        <form method="post">
        <input name="find_all_pic" type="submit" value="Сканировать картинки в корневой папке">
        </form>
        <!--- Форма списка,куда должны передаваться результаты для дальнейшего выбора  --->
        <form action="scan.php" method="post">
        <div style="width:50%; height:100px; overflow:auto; border:solid 1px #C3E4FE;">
        <?php add_fields(); ?>  <!--- Вызов функции для добавления строк --->
        </div>
         <input type="submit" name="formSubmit" value="Выполнить">
        </form>
          
        <?php
        // Функция добавления строк в список
        function add_fields()
           {
        global $matchV;
           for ($i=0; $i<count($matchV); $i++)  // по идее должна была проверять количество строк (єелементов массива и быть счетчиком)
              {
              echo "
              <input type=\"radio\" name=\"b[]\" value=\"$matchV[$i]\" />
        <div style=\"display:grid; grid-template-columns:90% 10%; \">
        <div style=\" grid-column: 1 / 1;\">$matchV[$i]</div>
        <div style=\"grid-column: 2 / 2;\">$matchV[$i]</div></div><br>
              ";
              }
           }
        // Функция сканирования картинок
        function find_all_pic($dir)
           {
        global $matchV;
            $root = scandir($dir);
            foreach($root as $value) // перебираем
               {
                if($value === '.' || $value === '..') {continue;} // пропускаем
                if(is_dir($dir.'/'.$value))  find_all_pic($dir.'/'.$value); // если директория, то продолжаем сканировать
                if(is_dir($dir.'/'.$value)) {continue;} // пропускаем
         else if (preg_match_all("/^.*\.(jpg|jpeg|png|gif)$/i",$dir.'/'.$value,$match, PREG_PATTERN_ORDER )) // выбираем все картинки
                     {
                     $matchV=array_values($match[0]); // собираем картинки в массив
                     // print_r($matchV[0]); echo '<br>'; // это можно раскоментировать и проверить массив
                     echo $matchV[0];echo '<br>'; // чисто проверяем результат, можно закоментировать
                    $matchV ='<img src="'.$matchV[0].'" width="10%" height="10%" >';  echo $matchV;echo '<br>'; // делаем превью
                    }
                }
           }  
        ?>

      Тут сразу весь файл с включенной поддержкой ютф-8. Ещё просьба высказаться по поводу оформления: правильно ли разбил на блоки php и html? Может ещё какие-то замечания по оформлению будут.

      Добавлено
      Да, при передаче значений выдает вот такое предупреждение:
      ExpandedWrap disabled
        Warning: count(): Parameter must be an array or an object that implements Countable
      Сообщение отредактировано: D-G -
        Частично решил вопрос. Добавил перебор после сбора картинок в массив и добавил две переменные. Счетчик работает от любой из них. Вот что добавил:
        ExpandedWrap disabled
          foreach ($matchV as $key=>$MMM)
                       {
                       $parth_on[]=$MMM;
                       $pic_on[] ='<img src="'.$MMM.'" width="100%" height="100%" >';  // echo $matchV;echo '<br>'; // делаем превью                
                       }

        Ну а в форме сделал так:
        ExpandedWrap disabled
           echo "
                <input type=\"radio\" name=\"b[]\" value=\"$parth_on[$i]\" />
          <div style=\"display:grid; grid-template-columns:80% 20%; \">
          <div style=\" grid-column: 1 / 1;\">$parth_on[$i]</div>
          <div style=\"grid-column: 2 / 2;\">$pic_on[$i]</div></div><br>
                ";

        Но остался вопрос о том, как убрать предупреждение, пока не вызвана функция сканирования. Ну и хотелось бы оценки оформления, да и вообще критики кода. Может где-то ещё можно упростить.

        Добавлено
        ))))
        Решил и проблему с предупреждением, может не правильно и не красиво, но работает ))) Просто поставил вызов функции в зависимость от нажатия кнопки. Боялся, что будет конфликтовать или не успевать, но все хорошо. 9Гб отсканировало меньше чем за секунду, вроде бы моментально. Теперь код выглядит вот так:
        ExpandedWrap disabled
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          </head>
          <?php
          // Вызов функции обработки результатов сканирования
          if (isset($_POST['find_all_pic']))
          {find_all_pic('.');}
          ?>
          <!--- Кнопка для сканирования --->
          <form method="post">
          <input name="find_all_pic" type="submit" value="Сканировать картинки в корневой папке">
          </form>
          <!--- Форма списка,куда должны передаваться результаты для дальнейшего выбора  --->
          <form action="scan.php" method="post">
          <div style="width:50%; height:100px; overflow:auto; border:solid 1px #C3E4FE;">
          <?php if (isset($_POST['find_all_pic']))
          {add_fields();} ?>  <!--- Вызов функции для добавления строк с проверкой нажатия кнопки --->
          </div>
           <input type="submit" name="formSubmit" value="Выполнить">
          </form>
            
          <?php
          // Функция добавления строк в список
          function add_fields()
             {
          global $matchV; global $pic_on; global $parth_on;
             for ($i=0; $i<count($parth_on); $i++)  // по идее доолжна была проверять количество строк (элементов массива и быть счетчиком)
                {
                echo "
                <input type=\"radio\" name=\"b[]\" value=\"$parth_on[$i]\" />
          <div style=\"display:grid; grid-template-columns:80% 20%; \">
          <div style=\" grid-column: 1 / 1;\">$parth_on[$i]</div>
          <div style=\"grid-column: 2 / 2;\">$pic_on[$i]</div></div><br>
                ";
                }
             }
          // Функция сканирования картинок
          function find_all_pic($dir)
             {
          global $matchV; global $pic_on; global $parth_on;
              $root = scandir($dir);
              foreach($root as $value) // перебираем
                 {
                  if($value === '.' || $value === '..') {continue;} // пропускаем
                  if(is_dir($dir.'/'.$value))  find_all_pic($dir.'/'.$value); // если директория, то продолжаем сканировать
                  if(is_dir($dir.'/'.$value)) {continue;} // пропускаем
           else if (preg_match_all("/^.*\.(jpg|jpeg|png|gif)$/i",$dir.'/'.$value,$match, PREG_PATTERN_ORDER )) // выбираем все картинки
                       {
                       $matchV=array_values($match[0]); // собираем картинки в массив
                             foreach ($matchV as $key=>$MMM)
                             {
                             $parth_on[]=$MMM;  // делаю пути
                             $pic_on[] ='<img src="'.$MMM.'" width="100%" height="100%" >'; // делаем превью
                             }
                         }
                  }
             }  
          ?>

        Остался вопрос критики и замечаний.
        Сообщение отредактировано: D-G -
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script Execution time: 0,0764 ]   [ 14 queries used ]   [ Generated: 18.09.19, 04:07 GMT ]