На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
    > Проблемы с формой загрузки (выбора) файла
      Продолжаю вопросы новичка.
      Есть файл index.php В нем есть формы для настройки различных элементов (классов) на странице, напр, цвет фона, цвет текста, размер, прочее... Захотел сделать ещё и поле для использования фонового изображения. Если после <input> прописать type="file", то пропадает текстовое поле рядом, выбор файла происходит, его название прописывается рядом с кнопкой выбора, но при нажатии клавиши "сменить" (она меняет все остальные параметры) ничего не происходит. Значение пробовал забирать и методом $_POST и с помощью $_FILES. Вот такой код (файл стилей не обязательный):
      ExpandedWrap disabled
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="main.css">
        </head>
         <div>
        <div class="wrap">
        <?php
        if (isset($_POST['bodystyle'])) {$bodystyle=$_POST['bodystyle'];} /*  Задаю первое условие и проверяю, что введено и присваиваю значение */
            elseif (empty($bodystyle)) /*  Проевряю не пустая ли строка, если пустая - ниже оставляю пустым значение переменной */
            {
            $bodystyle='';
            }
            /*  Как правильно то сказать? Инициирую применение стиля */
            echo '<style type="text/css";>
            body {background:'.$bodystyle.';}
           </style>';
            ?>
            <!--  Ниже подобная схема для квадрата -->
        <?php
        if (isset($_POST['wcolor'])) {$wcolor=$_POST['wcolor'] ;}
            elseif (empty($wcolor))
            {
            $wcolor='';}
        if (isset($_POST['wtextcolor'])) {$wtextcolor=$_POST['wtextcolor'] ;}
            elseif (empty($wtextcolor))
        {    $wtextcolor='';}
        if (isset($_POST['wwidth'])) {$wwidth=$_POST['wwidth'] ;}
            elseif (empty($wwidth))
        {
            $wwidth='';
            }
        if (isset($_POST['wbgimg'])) {$wbgimg=$_POST['wbgimg'] ;}
            elseif (empty($wbgimg))
        {
        $wbgimg='';
            }
         
            echo '<style type="text/css";>
            .wrap {background:'.$wcolor.';
        background-image:'.$wbgimg.';
                color:'.$wtextcolor.';
                width:'.$wwidth.';
        }
            </style>';
            
            ?>
            <!--   Создаю две формы для ввода цвета БОДИ и квадрата -->
        <form action="index.php" method="post" enctype="multipart/form-data">
                           цвет фона для БОДИ:<input name="bodystyle" value="" type="text">
                           <input value="сменить" type="submit">
         </form>
        <form action="index.php" method="post" enctype="multipart/form-data">
        цвет фона для Квадрата:<input name="wcolor" value="" type="text"><br>
        Фоновое изображение: <input name="wbgimg" value="" type="file"><br>
        цвет текста внутри квадрата:<input name="wtextcolor" value="" type="text"><br>
        ширина квадрата:<input name="wwidth" value="" type="text">
         <input value="сменить" type="submit">
         </form>
         </div>
        </div>

      Причем, если в строке Фоновое изображение: <input name="wbgimg" value="" type="file"><br> меняю file на text, то естественно появляется текстовое поле и в нем можно вбить вручную путь к картинке, а потом её применить.
      Метод с $_FILES пробовал следущими способами:
      ExpandedWrap disabled
        if (isset($_POST['wbgimg'])) {$wbgimg=$_FILES['wbgimg'] ;}
            elseif (empty($wbgimg))
        {
        $wbgimg='';
            }

      ExpandedWrap disabled
        if (isset($_FILES['wbgimg'])) {$wbgimg=$_FILES['wbgimg'] ;}
            elseif (empty($wbgimg))
        {
        $wbgimg='';
            }
      Сообщение отредактировано: D-G -
        D-G, так в чем сложность? Что у вас не получается?
        Сообщение отредактировано: Руслан -
          Цитата Руслан @
          Что у вас не получается?

          Если пишу вот так:
          ExpandedWrap disabled
             Фоновое изображение: <input name="wbgimg" value="" type="file"><br>

          то не работает, видно, что файл выбран, но при нажатии на "Сменить" изображение не применяется
          А вот в таком виде нет клавиши "Обзор"
          ExpandedWrap disabled
             Фоновое изображение: <input name="wbgimg" value="" type="text"><br>
          Сообщение отредактировано: D-G -
            Цитата D-G @
            видно, что файл выбран, но при нажатии на "Сменить" изображение не применяется

            Возможно ваш пхп скрипт не обрабатывает файл? :-? Вы проверили, файл вообще приходит на сервер?

            Цитата D-G @
            А вот в таком виде нет клавиши "Обзор"

            Дык элемент <input type="text" предназначен для ввода текста, с чего бы на ней возникла кнопка "обзор"? :blink:
              Цитата Руслан @
              Дык элемент <input type="text" предназначен для ввода текста, с чего бы на ней возникла кнопка "обзор"?

              Это я понимаю, зато если вручную вбить путь до файла и имя файла, то изображение загружается и фот применяется
              Цитата Руслан @
              Возможно ваш пхп скрипт не обрабатывает файл? :-? Вы проверили, файл вообще приходит на сервер?

              Честно говоря даже не знаю как это сделать, но фон не применяется
                Цитата D-G @
                зато если вручную вбить путь до файла и имя файла, то изображение загружается и фот применяется

                Загружаются на сервер? :huh: Чёт сомневаюсь! :scratch:
                  Цитата Руслан @
                  Загружаются на сервер? :huh: Чёт сомневаюсь!

                  Попробуйте, могу и скрин выложить, фон применяется, хоть для боди, хоть для квадрата
                    Цитата D-G @
                    Попробуйте

                    Когда из браузера передается <input type="text" - файл не передается на сервер. Это точно. Передается строка, текстовая строка, это не файл.
                    Когда вы используете <input name="wbgimg" type="file" - файл передается на сервер, во временное хранилище, отследить его судьбу можно так: var_dump($_FILES['wbgimg']
                    точней примерно так:
                    ExpandedWrap disabled
                      if (isset($_FILES['wbgimg'])) {var_dump($_FILES['wbgimg']);}
                      Цитата Руслан @
                      if (isset($_FILES['wbgimg'])) {var_dump($_FILES['wbgimg']);}

                      Вот что получилось
                      ExpandedWrap disabled
                        array(5) { ["name"]=> string(9) "gory8.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(24) "D:\xampp\tmp\phpC238.tmp" ["error"]=> int(0) ["size"]=> int(874704) }

                      Иногда вместо ["tmp_name"]=> string(24) выдает ["tmp_name"]=> string(23)
                        Цитата D-G @
                        Вот что получилось

                        Угу, это так сказать структура и содержимое массива $_FILES['wbgimg'] - данные по файлу, который передали на сервер. :)

                        $_FILES['wbgimg']['name'] - имя исходного файла.
                        $_FILES['wbgimg']['error'] - 0 если все нормально, или код ошибки.
                        $_FILES['wbgimg']['tmp_name'] - куда, и под каким именем файл ВРЕМЕННО размещен на сервере. Отсюда файл следует переместить куда нибудь.

                        ну а перемещать из временного хранилища можно вот такой функцией: move_uploaded_file.

                        Всё несколько сложней, чем казалось, меняя тип инпута "text" на "file"? :rolleyes:
                        Сообщение отредактировано: Руслан -
                          Цитата Руслан @
                          Всё несколько сложней, чем казалось, меняя тип инпута "text" на "file"? :rolleyes:

                          Ну так, никто и не говорил, что жизнь проста для неуча )
                          Я как всегда тороплюсь и возможно делаю очередную глупость, но поменяв вот так я ничего не добился:
                          ExpandedWrap disabled
                            if (isset($_FILES['wbgimg'])) {$wbgimg=$_FILES["wbgimg"] ;
                            $uploads_dir = 'uploads';
                            foreach ($_FILES["wbgimg"]["error"] as $key => $error) {
                                if ($error == UPLOAD_ERR_OK) {
                                    $tmp_name = $_FILES["wbgimg"]["tmp_name"][$key];
                                    $name = $_FILES["wbgimg"]["name"][$key];
                                    move_uploaded_file($tmp_name, "$uploads_dir/$name");
                            var_dump($_FILES["wbgimg"]);
                                }
                            }
                            var_dump($_FILES["wbgimg"]);
                            }

                          Отчет приходит такой же как и раньше. Как можно ещё проверить дальнейшую судьбу файла?
                          И ещё, ведь если просто в текстовом поле прописать путь к файлу, то фон применяется, при этом файл на сервер не грузится. Вот отчет команды
                          ExpandedWrap disabled
                            var_dump($_POST['wbgimg']);

                          ExpandedWrap disabled
                            string(20) "url(image/gory8.jpg)"

                          Может есть вариант выбора и копирования пути?
                            Цитата D-G @
                            Как можно ещё проверить дальнейшую судьбу файла?

                            Проверить наличие файла в том каталоге куда вы его отправили. Вот куда вы его отправили? :huh:
                              Цитата Руслан @
                              Вот куда вы его отправили?

                              Мне казалось, что вот это указание директории:
                              ExpandedWrap disabled
                                $uploads_dir = 'uploads';

                              Она у меня создана, там пусто
                              Сообщение отредактировано: D-G -
                                Цитата D-G @
                                Она у меня создана, там пусто

                                Попробуйте так:
                                ExpandedWrap disabled
                                  if (isset($_FILES['wbgimg'])) {
                                      $wbgimg=$_FILES["wbgimg"];
                                      $uploads_dir = 'uploads/';
                                      if(!$_FILES["wbgimg"]["error"])
                                      {
                                          $FileName_tmp_InServer=$_FILES["wbgimg"]["tmp_name"];
                                          $FileName_Dest_InServer=$_FILES["wbgimg"]["name"];
                                          move_uploaded_file($FileName_tmp_InServer, $uploads_dir.$FileName_Dest_InServer);
                                      }
                                  }
                                  Цитата Руслан @
                                  Попробуйте так:

                                  Не выходит, пишет замечание про эти строки:
                                  .wrap {background:'.$wcolor.';
                                  background-image:'.$wbgimg.';
                                  color:'.$wtextcolor.';
                                  width:'.$wwidth.';
                                  }
                                  ExpandedWrap disabled
                                    Notice: Undefined variable: wcolor on line 37
                                    Notice: Undefined variable: wbgimg on line 38
                                    Notice: Undefined variable: wtextcolor on line 39
                                    Notice: Undefined variable: wwidth on line 40

                                  При нажатии на "Сменить" пишет:
                                  ExpandedWrap disabled
                                    Notice: Array to string conversion on line 38
                                  Сообщение отредактировано: D-G -
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0538 ]   [ 16 queries used ]   [ Generated: 28.03.24, 20:29 GMT ]