На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > Повысить приоритет стиля (части стиля) из php файла над стилем из файла css
      Добрый день всем. Как и все новички извиняюсь за "глупые" вопросы. Но на мой взгляд самый глупый вопрос - это не заданный вопрос. Самостоятельно пробую изучить сайтостроение. Верстку более менее освоил. Возникли трудности с php. Создаю тренировочный сайт пока из трех страниц: index.php, main.css, admin.php. Сейчас я их упростил до одного дива на странице индекс.пхп хотя адаптивная верстка с гридами и флексами вроде получается. Поставил перед собой такую задачу: индекс.пхп является главной страницей, шаблоном. Её стиль, оформление записаны в мэйн.цсс. На страничке админюпхп в будущем хочу с помощью всяких форм сделать так, чтобы условный админ, мальчик Женя, который не знает пхп, да и вообще не силен в вэбпрограммировании и верстке мог с помощью этих форм редактировать на свое усмотрение внешний вид всего сайта или выбранной его части, напр, цвет только футера или картинку только для шапки, или все это плюс бэкграунд всей страницы. Пока получается с помощью require_once вызвать некоторые функции со страницы админ.пхп и либо загрузить файл стилей мэйн.цсс по умолчанию, либо поменять фон всей страницы так, что пропадает стиль для дива. Пробую задать фон для дива отдельной переменной, но он не окрашиваается, хотя если задать там же размер, то размер схватывается и даже текст может выравняться по его границе, если вставить его внутрь дива. В отладчике тоже показывает при наведении на стиль границы и даже срабатывает изменение переменной $color. Пробовал получать данные из цсс с помощью file_get_contents, но получаю текстовую вставку и не знаю, что с ней делать. Пробовал другие способы получить класс или описание из цсс. Но либо я вообще не правильно делаю, либо оно не так работает и тут не нужно.
      Содержимое index.php
      ExpandedWrap disabled
        <head>
        <meta charset="UTF-8"><?php require_once('admin.php');?>
        <title>смена обоев</title>
        </head>
         <body>
         <div><div class="wrap"><?php
        $ob = file_get_contents('main.css'); // эту функцию можно и в админюпхп вызвать, суть не меняется
        echo $ob;?>
        </div>  </div>
        </body>

      Содержимое main.css
      ExpandedWrap disabled
        body {
            background: #951;
        }
        .wrap {
            background:#159;
            margin: auto;
            width: 700px;
            height: 600px;
            z-index: 3;
        }

      Содержимое admin.css
      ExpandedWrap disabled
        <body>
        <?php
        $body_style="default";
        if ( $body_style == "0") {
        echo '<link rel="stylesheet" type="text/css" href="main.css">';
        }
        else echo "<body bgcolor='red'>";
        ?>
        <?php
        $w=1;
        if($w==1)
        {
            $color='#159';
        }elseif($w==2)
        {
        $color='#aba';
        }else{
        $color='green';
        }
        echo '<style type="text/css";>
        .wrap {backgraund:#951;
        margin: auto;
            width: 700px;
            height: 600px;
        z-index: 3;
        }
        </style>';
        ?>
        </body>

      Как сделать так, чтоб для начала фон всей страницы грузился из файла стилей мэйн.цсс, а фон для .wrap из админ.пхп? Ну и вообще в целом выполниь мои хотелки, описанные выше. Джава скрипты для меня пока вообще темный лес. Могу их только вызывать, но не писать. Да и понимаю, что на пхп все мои хотелки можно осуществить.
        Тут куча ошибок:

        - опечатка в имени свойства: backgraund - нет такого свойства;
        - переменная $color в admin.css пишется, но нигде не читается;
        - тег <style> внутри <body>; да, браузеры нынче умные и обычно догадываются, что хотел сказать верстальщик, но лучше все-таки писать по правилам;
        - вывод содержимого файла в HTML не экранируется, что может привести к проблемам; нужно всегда использовать htmlspecialchars().
          Цитата D-G @
          для начала фон всей страницы грузился из файла стилей мэйн.цсс, а фон для .wrap из админ.пхп?

          Для начала, следует формировать более читабельный код - всем будет проще его понять (и Вам в том числе)! :yes:
          Во вторых, вставки <?php .... ?> в html разметку - не лучшее решение. Котлеты желательно хранить отдельно от мух (php от html).

          В третьих, следует изначально формировать логическую структуру системы, в том числе определить какие части сайта будут меняться, и где в каком формате хранить эти переменные для их редактирования админом. К примеру цвет фона где по вашему должен храниться? :-?

          Возможно у Вас вопрос общего характера, к примеру "подскажите, как правильней организовать хранение переменных, из которых я формирую сайт. Для начала хотелось бы вариант попроще в реализации.?

          Вот example-"набросок от руки", без сохранения данных, без учета вопросов безопасности, без оптимизации правил формирования страницы.
          template.html
          ExpandedWrap disabled
            <!DOCTYPE html>
            <html>
                <head>
                    <title><!--page_title--></title>
                    <meta charset="utf-8">
                    <link href="/style.css" rel="stylesheet" />
                </head>
                <body style="background-color:BodyBackgroundColorForChange;">
                    <div class="ClassForChange">элемент отобразится у всех, но его цвет зависит от того, кто зашел...</div>
                    <div style="background-color:ColorForChange_1;width:70px;height:70px;">example</div>
                    <!--page_body-->
                </body>
            </html>


          style.css
          ExpandedWrap disabled
            body
            {
                width:100%;
                height:100%;
                background-color:#DDD;
                color:#000;
            }
            div.ClassForUser
            {
                margin: 2px;
                background-color:#777;
                color:#FFF;
            }
            div.ClassForAdmin
            {
                margin: 3px;
                border:2 px solid #FF0000;
                background-color:#770000;
                color: #FFF;
            }


          index.php
          ExpandedWrap disabled
            <?php
                function are_user_is_admin() /*мой инглиш слаб*/
                {
                    if (isset($_GET['MyAdmin'])) {return true;}
                    else {return false;}
                }
             
                /*НАЧАЛО так @#$%^ храним шаблоны...*/
                $html_template=file_get_contents('template.html');
             
                $html_SetThis_MetaTitle['user']='привет юзер! )';
                $html_ChangeForThisClass['user']='ClassForUser';
                $html_SetThisBodyBgColor['user']='#D0E0F0';
                $html_text['user']='
                    <div>
                        я юзер...
                    </div><a href="?MyAdmin">зайти в админку</a>';
             
                $html_SetThis_MetaTitle['admin']='Я одмин!';
                $html_ChangeForThisClass['admin']='ClassForAdmin';
                $html_SetThisBodyBgColor['admin']='#D0F0E0';
                $html_text['admin']='
                    <div class="ClassForAdmin">
                        а я- одмин! :)
                        <form action="/index.php" method="post" enctype="multipart/form-data">
                            цвет фона для юзера:<input name="color_value" value="#FF0000" type="text">
                            <input value="сменить" type="submit">
                        </form>
                    </div><a href="/">зайти под юзером</a>';
                
                $ColorForChange_1='#000';
                /*КОНЕЦ так @#$%^ храним шаблоны...*/
             
                /*определить какой массив выбран (массив "юзер", или массив "админ")*/
                if (are_user_is_admin()) {$UserName='admin';} else {$UserName='user';}
                
                /*обработка пользовательского ввода*/
                if (isset($_POST['color_value'])) {$ColorForChange_1=$_POST['color_value'];}
                
             
                /*изменение выводимого шаблона*/
                $html_template=str_replace('ClassForChange', $html_ChangeForThisClass[$UserName], $html_template);
                $html_template=str_replace('<!--page_title-->', $html_SetThis_MetaTitle[$UserName], $html_template);
                $html_template=str_replace('<!--page_body-->', $html_text[$UserName], $html_template);
                $html_template=str_replace('BodyBackgroundColorForChange', $html_SetThisBodyBgColor[$UserName], $html_template);
                $html_template=str_replace('ColorForChange_1', $ColorForChange_1, $html_template);
             
                echo $html_template;
                //flush();
            ?>
            Цитата AVA12 @
            Тут куча ошибок:

            - опечатка в имени свойства: backgraund - нет такого свойства;
            - переменная $color в admin.css пишется, но нигде не читается;
            - тег <style> внутри <body>; да, браузеры нынче умные и обычно догадываются, что хотел сказать верстальщик, но лучше все-таки писать по правилам;
            - вывод содержимого файла в HTML не экранируется, что может привести к проблемам; нужно всегда использовать htmlspecialchars().

            Про бекграунд видимо опечатался ))) столько вариантов перепробовал, и вы правы, применился цвет. Хотя вроде и копировал из цсс файла несколько раз в различных вариантах, но там видимо другие ошибки были, вот и накладывались.
            Про переменную $color - тоже раньше пробовал, не срабатывала, но в отладчике показывала, что функция работает, цвет выбирался. Сейчас исправив опечатку в бэкграунд у меня див закрасился, теперь выбирая значения переменной W у меня меняется цвет.Сработала вот такая конструкция:
            background:'.$color.';
            Про тег <style> Честно говоря, пробовал таким образом подсунуть данные из цсс файла, и путь прописывал, но не получается. Я же хочу, чтобы часть стиля применялась как переменная из файла пхп, а часть из цсс как "дефолтный шаблон". Но, если убрать в админ.пхп другие переменные стиля (высоту, ширину и тп) для .wrap то останется узкая полоска закрашенного текста.
            Про экранирование почитаю. Понимаю, что для "странички админа" это не совсем правильно. Просто ещё до конца не разобрался.
            Спасибо за замечания и надеюсь на дальнейшие подсказки.

            Добавлено
            Цитата Руслан @
            Для начала, следует формировать более читабельный код - всем будет проще его понять (и Вам в том числе)! :yes:

            Вполне возможно, я ведь только учусь.
            Цитата Руслан @
            Во вторых, вставки <?php .... ?> в html разметку - не лучшее решение. Котлеты желательно хранить отдельно от мух (php от html).

            Это у меня от НетБинс осталось, там же стандартнная форма пхп-страницы такая, я особо и не меняю.

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

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

            Возможно вы и правы, не знаю как правильно организовать, но казалось, что моя логика построения довольна верна. Тем более что это упрощенный вариант. Мне не нужно, по крайней мере пока, делать отдельный стиль для пользователей. Я задумал, чтобы не очень разбирающийся админ мог на своей страничке менять все что он захочет не выискивая место куда вставлять какие значения. Так что все формы для изменения внешнего вида будут на одной странице. Если я правильно понимаю вас, то вы предлагаете сделать кучу стилей. Возможно так правильнее, но для конечного пользователя, а я ставлю себя на его место и вспоминаю как я вообще не разбирался три месяца назад, возможно это будет не удобно. По крайней мере пока я не совсем понимаю до конца вашу мысль.
            Цитата Руслан @

            Вот example-"набросок от руки", без сохранения данных, без учета вопросов безопасности, без оптимизации правил формирования страницы.
            template.html

            А что, разве правильнее делать файл шаблона на штмл? Я свой индекс.пхп задумал именно как файл шаблона.
            Сообщение отредактировано: D-G -
              Цитата Руслан @
              Возможно у Вас вопрос общего характера, к примеру "подскажите, как правильней организовать хранение переменных, из которых я формирую сайт. Для начала хотелось бы вариант попроще в реализации.?

              В любом случае хотелось бы именно ответ и на мой вопрос озвученный раньше: как применять часть стиля из пхп, а часть из цсс файла, и менять их по своему усмотрению без ручной правки кода
                Цитата AVA12 @
                вывод содержимого файла в HTML не экранируется, что может привести к проблемам; нужно всегда использовать htmlspecialchars().

                тоесть нужно вот так?
                ExpandedWrap disabled
                  <html>
                  <head>
                  <meta charset="UTF-8">
                  <?php require_once('admin.php');
                  ?>
                  <title>смена обоев</title>
                  </head>
                   <body>
                  <div><div class="wrap">
                  <?php
                  $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
                  echo $new; // <a href='test'>Test</a>
                  ?>
                  <?php
                  $ob = file_get_contents('main.css');
                  echo $ob;
                  ?>
                  </div>
                  </div>
                  Цитата
                  ExpandedWrap disabled
                    $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
                    echo $new; // <a href='test'>Test</a>
                    ?>
                    <?php
                    $ob = file_get_contents('main.css');
                    echo $ob;

                  Гениально, в натуре! Мне бы такое никогда и в голову не пришло.
                  Умываю руки.
                    Цитата AVA12 @
                    Гениально, в натуре! Мне бы такое никогда и в голову не пришло.

                    Вот так лучше?

                    ExpandedWrap disabled
                      <?php
                      $ob = file_get_contents('main.css');
                      echo htmlentities($ob);
                      ?>


                    Правда я до сих пр плохо понимаю, что именно мне нужно экраировать
                    Сообщение отредактировано: D-G -
                      Цитата D-G @
                      я ведь только учусь.

                      Но Ваше следующее сообщение показывает, что Вы отказываетесь формировать код, удобный к чтению. <_<
                      Цитата D-G @
                      <?php
                      $ob = file_get_contents('main.css');
                      echo htmlentities($ob);
                      ?>

                      Да, 4 строки прочесть не сложно, но даже в них видно отсутствие положительной тенденции сразу на паре уровней
                      1.игнорирование простых правил формирование читабельного кода.
                      2.использование инструмента(в данном случае htmlentities) без понимания "зачем это делается".

                      Соответственно, без обид, но
                      1) Вам ведь не интересно заниматься программированием! Формирование инструмента для редактирование сайта "мальчиком Женей" - затея на мой взгляд провальная. :-?
                      2) Если Вы все же хотите решить задачу, возможно следует пойти на жертвы, как минимум - пожертвовать своим принципом писать код игнорируя правила хорошего тона? :huh:

                      Добавлено
                      Цитата AVA12 @
                      Гениально, в натуре! Мне бы такое никогда и в голову не пришло.

                      Да, я тоже нашел новые акценты в стихе:
                      Цитата
                      О, сколько нам открытий чудных
                      Готовят просвещенья дух,
                      И опыт, сын ошибок трудных,
                      И гений, парадоксов друг,
                      И случай, бог изобретатель.

                      Как говорится - чудны дела твои! Господи прости!...
                        Цитата Руслан @
                        Соответственно, без обид, но
                        1) Вам ведь не интересно заниматься программированием! Формирование инструмента для редактирование сайта "мальчиком Женей" - затея на мой взгляд провальная. :-?
                        2) Если Вы все же хотите решить задачу, возможно следует пойти на жертвы, как минимум - пожертвовать своим принципом писать код игнорируя правила хорошего тона? :huh:


                        Вообще-то интересно. Думаю, да и знаю, что у меня проблема в структурировании знаний, читаю все подряд, скачками, от этого каша в голове. А то, что "для мальчика Жени" типа пишу, так это одна из попыток чего-то структурировать и придать смысл. Ато прочитал как прибавить 2+2 и как вывести это на экран, а где его применять? Вот и придумал прикладную задачу. По идее переменным все равно каким быть - цифры, буквы... Честно говоря, не до конца разобрался в необходимости разделения на булен, интежер и прочие. То, что пишу код как понимаю - это от того, что одни говорят одно, другие - другое. Хотя это одна из причин, почему мне нравится программирование. Тут любой может сделать код ещё более простым и функциональным. Только я не понимаю ещё многого. Кстати, в этой же теме тому пример. Начал её с одной целью - придумать как импортировать часть стиля в пхп, не весь, а именно часть, а начал заниматься htmlentities. В результате ни там ни там нет результата. Честно говоря даже плохо представляю что такое правила хорошего тона в написании программирования. Но очень надеюсь, что когда нибудь количество перерастет в качество. По крайней мере так обещал дедушка Ленин ))) Ну или появится человек, который скажет, сперва нужно сделать это. Оно делается так-то потому что так лучше чем вот эдак. А уж потом надо делать то и то вот таким способом потому что другим вылезет вот тем боком, а тебе нужно этим боком.

                        Кстати, про ваши советы... Вы так и не сказали, почему правильнее делать файл шаблона на штмл, а не на пхп?
                        И почему идея создания инструмента для редактирования сайта провальная?
                        И ещё, я пробую и ваш вариант построения сайта, ещё не все разобрал, но вопросы назревают. Просто делается все параллельно и постепенно, и про htmlentities читается с штмл сущностями (это видимо спецсимволы) и другие примеры проверяются. По моему за сутки есть результаты, пусть небольшие. В конце концов, есть другая работа, которую тоже надо работать, все таки пенсия на носу )
                          Цитата D-G @
                          Ато прочитал как прибавить 2+2 и как вывести это на экран, а где его применять? Вот и придумал прикладную задачу.

                          Ясно. Дело хорошее! :)
                          Рекомендация по инструментам: используйте что то вроде notepad++ - достаточно легкий и удобный редактор кода.

                          Цитата D-G @
                          Вы так и не сказали, почему правильнее делать файл шаблона на штмл, а не на пхп?

                          Во первых - код значительно наглядней, когда разделена логика работы HTML от логики работы PHP. Легче вносить корректировки. :rolleyes:

                          Цитата D-G @
                          И почему идея создания инструмента для редактирования сайта провальная?

                          Нюансов много. Если пишет не опытный программист, итоговый инструмент может использоваться только в личных целях, но ни как не для "Одмина Жени".

                          Цитата D-G @
                          Честно говоря даже плохо представляю что такое правила хорошего тона в написании программирования.

                          1) отступы - визуальное выделение этапов работы программы.
                          2) понятные имена - давать переменным(константам, массивам, функциям, прочим объектам).
                          3) комментарии - следует достаточно(и кратко) комментировать свой код (я избыточные комментарии внес лично для Вас).

                          Простой пример, который делает то, что Вы спросили изначально(сохранение изменений на сервере), и утвердили позже как хранение переменных в .css. Это слегка модифицированный код, который я давал выше(просто умеет записывать в style.css).
                          Предостережений: для новичка в программировании, preg_replace - "тёмны мать его лес, в котором стада чертей ноги себе переломали", лучше для начала заменить на strpos, substr, чем пытаться модифицировать... :whistle:

                          template.html
                          ExpandedWrap disabled
                            <!DOCTYPE html>
                            <html>
                                <head>
                                    <title><!--page_title--></title>
                                    <meta charset="utf-8">
                                    <link href="/style.css" rel="stylesheet" />
                                </head>
                                <body style="background-color:BodyBackgroundColorForChange;">
                                    <div class="ClassForChange">элемент отобразится у всех, но его цвет зависит от того, кто зашел...</div>
                                    <!--page_body-->
                                </body>
                            </html>


                          style.css
                          ExpandedWrap disabled
                            body{
                                width:100%;
                                height:100%;
                                background-color:#DDD;
                                color:#000;
                            }
                            div.ClassForUser{
                                margin: 2px;
                                background-color:#777;
                                color:#fff;
                            }
                            div.ClassForAdmin{
                                margin: 3px;
                                border:2 px solid #FF0000;
                                background-color:#770000;
                                color: #FFF;
                            }


                          ExpandedWrap disabled
                            <?php
                                function are_user_is_admin() /*мой инглиш слаб*/
                                {
                                    if (isset($_REQUEST['MyAdmin'])) {return true;}
                                    else {return false;}
                                }
                                
                                /*запись $_POST в .css*/
                                function ChangeCSS_file()
                                {
                                    //сохранение доступно только админу
                                    if (!are_user_is_admin) {return false;}
                                    
                                    //считаем шаблон(css)
                                    $css_file=file_get_contents("style.css");
                             
                                    //перебор присланных на сервер данных, заменить их в шаблоне .css
                                    foreach ($_POST as $RequestElementName => $RequestElementValue)
                                    {
                                        //легкая защита от пустых значений.
                                        if ((strlen($RequestElementName)>100) or (strlen($RequestElementName)<16)) {break;}//"break 1" - прерывает обработку этой строки
                                        if (substr($RequestElementName,0,5)!=='_css-') {break;}//проверка признака "присланное значение требуется поместить в CSS" - 5 первых символа должны бытm "_css-"
                                        
                                        //выделить признак 1 (класс в css)
                                            //замена на $2, - расположен между "_css-" и "__target"
                                        $Target1=preg_replace('/(_css-)(.*)(__target.*)/', "$2", $RequestElementName);
                                        //выделить признак 2 (свойство в css)
                                            //замена все на $2 - расположен между "__target-" и "_css-"
                                        $Target2=preg_replace('/(.*__target-)(.*)(_css-)/', "$2", $RequestElementName);
                                        
                                        //вариант "отладки" .php
                                        //die('test: $RequestElementName='.$RequestElementName.' <br>$target1='.$Target1.'<br> $target2='.$Target2);
                             
                                        //заменить в CSS шаблоне
                             
                                        // (1\3) вариант "отладки" .php
                                        //echo '$RequestElementName='.$RequestElementName.' <br>$target1='.$Target1.'<br> $target2='.$Target2.'<br>$value='.$RequestElementValue.'<br><br>'.$css_file.'<br><br>';
                                        $css_file=preg_replace('/(.*'.$Target1.'{)(.*[^}]\s'.$Target2.':)(.*;)(.*)/Usi',"$1$2$RequestElementValue;$4",$css_file);
                                        // (2\3) вариант "отладки" .php
                                        //echo $css_file.'<br><br><hr><br><br>';
                                    }
                                    // (3/3) вариант "отладки" .php
                                    //die();
                                    
                                    //сохранить новый .css - не забудьте сделать резервную копию
                                    file_put_contents("style.css",$css_file);
                                }
                             
                                /*НАЧАЛО так @#$%^ храним шаблоны...*/
                                $html_template=file_get_contents('template.html');
                             
                                $html_SetThis_MetaTitle['user']='привет юзер! )';
                                $html_ChangeForThisClass['user']='ClassForUser';
                                $html_SetThisBodyBgColor['user']='#D0E0F0';
                                $html_text['user']='
                                    <div>
                                        я юзер...
                                    </div><a href="?MyAdmin">зайти в админку</a>';
                             
                                $html_SetThis_MetaTitle['admin']='Я одмин!';
                                $html_ChangeForThisClass['admin']='ClassForAdmin';
                                $html_SetThisBodyBgColor['admin']='#D0F0E0';
                                $html_text['admin']='
                                    <div class="ClassForAdmin">
                                        а я- одмин! :)
                                        <form action="/index.php" method="post" enctype="multipart/form-data">
                                            цвет фона для юзера:<input name="_css-ClassForUser__target-background-color_css-" value="#FF0000" type="text">
                                            цвет текста для юзера:<input name="_css-ClassForUser__target-color_css-" value="#000000" type="text">
                                            <input name="MyAdmin" value="" type="hidden">
                                            <input name="ChangeCSS" value="сменить" type="submit">
                                        </form>
                                    </div><a href="/">зайти под юзером</a>';
                                
                                /*КОНЕЦ так @#$%^ храним шаблоны...*/
                             
                                //определить какой массив выбран (массив "юзер", или массив "админ")
                                //если админ - проверить прислал ли он что нибудь интересное.
                                if (are_user_is_admin())
                                {
                                    $UserName='admin';
                                    if (isset($_POST['ChangeCSS'])) {ChangeCSS_file();}
                                } else {$UserName='user';}
                             
                                /*изменение выводимого шаблона*/
                                $html_template=str_replace('ClassForChange', $html_ChangeForThisClass[$UserName], $html_template);
                                $html_template=str_replace('<!--page_title-->', $html_SetThis_MetaTitle[$UserName], $html_template);
                                $html_template=str_replace('<!--page_body-->', $html_text[$UserName], $html_template);
                                $html_template=str_replace('BodyBackgroundColorForChange', $html_SetThisBodyBgColor[$UserName], $html_template);
                             
                                echo $html_template;
                                //flush();
                            ?>


                          Добавлено
                          Цитата D-G @
                          И ещё, я пробую и ваш вариант построения сайта, ещё не все разобрал, но вопросы назревают.

                          Это модель для образовательных целей, и сделана что называется "на вскидку". :)

                          Добавлено
                          При этом, ещё раз указываю на необходимость разделить HTML от PHP (пока этого не сделано)... :whistle:
                            О приоритетах - хорошая статья.
                              Цитата Руслан @
                              Рекомендация по инструментам: используйте что то вроде notepad++ - достаточно легкий и удобный редактор кода.

                              Уже неделю работаю с АкелПад. Почему-то больше понравился. А остатки кода до сих пор тягаются от НетБинс
                              Цитата Руслан @
                              Во первых - код значительно наглядней, когда разделена логика работы HTML от логики работы PHP. Легче вносить корректировки.

                              А почему тогда в тех же ЦМС (движках) вроде шаблон на пхп написан, или я там чего не разобрал?
                              Цитата Руслан @
                              К примеру цвет фона где по вашему должен храниться?

                              И забыл задать вопрос, так где все таки правильней хранить цвет фона, разве не в цсс?
                              Цитата Руслан @
                              Нюансов много. Если пишет не опытный программист, итоговый инструмент может использоваться только в личных целях, но ни как не для "Одмина Жени".

                              Получается, если стану нормальным программистом, то идея нормальная? Реализовывать можно? Зависит только от умения? Ну я потому и пробую начинать с наиболее простого на мой взгляд и продвигаясь постепенно к более сложному))) Даст Бог с вашей помощью получится )))
                              Цитата Руслан @
                              1) отступы - визуальное выделение этапов работы программы.
                              2) понятные имена - давать переменным(константам, массивам, функциям, прочим объектам).
                              3) комментарии - следует достаточно(и кратко) комментировать свой код (я избыточные комментарии внес лично для Вас).

                              С этим попробую
                              Цитата Руслан @
                              Простой пример, который делает то, что Вы спросили изначально(сохранение изменений на сервере), и утвердили позже как хранение переменных в .css.

                              Спасибо, буду разбираться, но поскольку я все делаю скачками, то у меня вопросы по вашему предыдущему примеру, атюо уже замучался.
                              1. Не знаю, какая у вас структура каталога, я все три файла положил в один, и тогда пришлось подправить код, потому что при нажатии на кнопку "сменить" переходило на страницу xammp.
                              2. По логике ваших подсказок (подписей) цвет должен был меняться у квадратика в зависимости от того, на какой странице находишься, но тогда должно было быть две формы выбора цвета: для админа и юзера. Я их сделал. Цвета меняются. При обновлении страницы сохраняются, но стоит нажать на переход на другую, толи юзера, толи админа, как цвет у квадратика пропадает. По идее должна быть проверка: если на странице юзера, то цвет такой, иначе цвет квадратика другой если перед этим был выбран и нажато "сменить" иначе цвет дефолтный. Я вчера и сегодня много всяких вариантов ппробовал. но не получается. Основная ошибка - Undefined index: color_value1
                              Вот мой вариант с остатками различных вариантов и коментами, что пробовал сделать:
                              ExpandedWrap disabled
                                    <?php
                                       function are_user_is_admin() /*мой инглиш слаб*/
                                       {
                                          if (isset($_GET['MyAdmin'])) {return true;}
                                          else {return false;}
                                       }
                                    
                                       /*НАЧАЛО так @#$%^ храним шаблоны...*/
                                       $html_template=file_get_contents('template.html');
                                    
                                       $html_SetThis_MetaTitle['user']='страницаЮзера';
                                       $html_ChangeForThisClass['user']='ClassForUser';
                                       $html_SetThisBodyBgColor['user']='#D0E0F0';
                                       $html_SetThisColorForChange_1['user']=$_POST['color_value1']; /* пробовал color_value1 */
                                       $html_text['user']='
                                         <div>
                                            я юзер...
                                         </div><a href="?MyAdmin">зайти в админку</a>';
                                    
                                       $html_SetThis_MetaTitle['admin']='страницаОДМИНА';
                                       $html_ChangeForThisClass['admin']='ClassForAdmin';
                                       $html_SetThisBodyBgColor['admin']='red'; /* заменил цвет, так нагляднее в глаза бросается */
                                       $html_SetThisColorForChange_1['admin']=$_POST['color_value2']; /* пробовал color_value2 */
                                       $html_text['admin']='
                                         <div class="ClassForAdmin">
                                            а я- одмин! :)
                                            <form action="index.php" method="post" enctype="multipart/form-data">
                                               цвет фона для юзера:<input name="color_value1" value="#FF0000" type="text">
                                               <input value="сменить" type="submit">
                                            </form>
                                <form action="index.php?MyAdmin" method="post" enctype="multipart/form-data">
                                               цвет фона для ОДМИНА:<input name="color_value2" value="#aba" type="text">
                                               <input value="сменить" type="submit">
                                            </form>
                                         </div><a href="index.php">зайти под юзером</a>';
                                    
                                       $ColorForChange_1=$_POST[$value]; /* пробовал оставить как в вашем примере, но роли не играет */
                                $color_value2=$_POST['color_value2']; /* пробовал задать переменную color_value2 */
                                       /*КОНЕЦ так @#$%^ храним шаблоны...*/
                                    
                                       /*определить какой массив выбран (массив "юзер", или массив "админ") и в зависимости от этого применить выбранный цвет при заходе на страницу*/
                                       if (are_user_is_admin()) {
                                $UserName='admin';
                                (isset($_POST['color_value2'])){$ColorForChange_1=$_POST['color_value2']};
                                }
                                else {
                                $UserName='user';
                                (isset($_POST['color_value1'])){$ColorForChange_1=$_POST['color_value1']};
                                }
                                    
                                 
                                       /*изменение выводимого шаблона*/
                                       $html_template=str_replace('ClassForChange', $html_ChangeForThisClass[$UserName], $html_template);
                                       $html_template=str_replace('<!--page_title-->', $html_SetThis_MetaTitle[$UserName], $html_template);
                                       $html_template=str_replace('<!--page_body-->', $html_text[$UserName], $html_template);
                                       $html_template=str_replace('BodyBackgroundColorForChange', $html_SetThisBodyBgColor[$UserName], $html_template);
                                       $html_template=str_replace('ColorForChange_1', $ColorForChange_1, $html_template); /* пробовал убрать проверку выше на масив юзер-админ и оставить так $html_SetThisColorForChange_1[$UserName] но тогда вообще не срабатывает */
                                    
                                       echo $html_template;
                                       //flush();
                                    ?>

                              3. А что это у вас за символы в коментариях про начало шаблона и конец шаблона? @#$%^ х Это просто так или они зачем-то нужны?
                              4. И до конца не понял, как применяется функция file_get_contents Когда я её применял в своем примере, то у меня выводился результат на странице, а у вас нет. Почему?
                              Сообщение отредактировано: D-G -
                                Цитата D-G @
                                Уже неделю работаю с АкелПад.

                                "реклама notepad++"
                                А он умеет подсвечивать начало-конец тега?
                                к примеру конструкция
                                <div> много-всего</div>
                                я тырцаю на первый <div> - автоматически подсвечивается закрывающий </div>. :yes:
                                shift+tab - сдвигает выделенную область влево. :rolleyes:
                                скрыть область одним кликом, автоматически определяя границы - будь то div, или какая нибудь громоздкая функция(слева окна, возле нумерации строк - по умолчанию стоят "минусики", т.е. весь код открыт)... :good:


                                Цитата D-G @
                                И забыл задать вопрос, так где все таки правильней хранить цвет фона, разве не в цсс?

                                Лучше в .css :yes:

                                Цитата D-G @
                                но стоит нажать на переход на другую, толи юзера, толи админа, как цвет у квадратика пропадает.

                                Дело в том, что пример не содержал в себе сохранения в .css файл. Второй пример уже имеет эту функцию. :) И лучше бы её(функцию сохранения .css) не менять как минимум до тех пор, пока не придет понимание "как заменить значения в <input value="#000000"> - на актуальное, из .CSS"... + понимание как добавит третий <input> для квадратика, который Вы нарисуете в шаблоне. ;)

                                Добавлено
                                Цитата D-G @
                                3. А что это у вас за символы в коментариях про начало шаблона и конец шаблона? @#$%^

                                Это слэнг. :)

                                Цитата D-G @
                                file_get_contents

                                это чтение файла в переменную.

                                Добавлено
                                $value=file_get_contents...... - чтение в переменную $value
                                echo $value...... - показ $value
                                  Цитата Руслан @
                                  shift+tab - сдвигает выделенную область влево

                                  Вот такого нет, хотя я пока не понял зачем оно вообще надо. Может и есть нечто подобное, пока не разобрал.
                                  Цитата Руслан @
                                  $value=file_get_contents...... - чтение в переменную $value
                                  echo $value...... - показ $value

                                  А, ну да, я же echo использовал... но все равно не совсем понял, как вы дальше результаты вытянутые из template.html использовали. Их же нужно как-то прочитать и "обратиться к ним".
                                  Цитата Руслан @
                                  Дело в том, что пример не содержал в себе сохранения в .css файл. Второй пример уже имеет эту функцию. :) И лучше бы её(функцию сохранения .css) не менять как минимум до тех пор, пока не придет понимание "как заменить значения в <input value="#000000"> - на актуальное, из .CSS"... + понимание как добавит третий <input> для квадратика, который Вы нарисуете в шаблоне. ;)

                                  Тоесть без цсс я зря старался? Ну а с остальным буду разбираться, в том числе и с тем, зачем вообще нужен третий инпут.
                                  У меня ещё вопросы.
                                  1. Почему в моем, вернее в вашем примере, который я потрошу и издеваюсь над ним, мне постоянно пишет что переменная Undefined index: color_value1 Хотя я её различными способами пробовал назначить. Ведь если я не меняю значение "name" на свое, оставляю как в вашем примере color_value то оно не ругается
                                  2. Почему все таки не срабатывает эта строка, конечно вместе с внесением добавок в объявление html перемемнных (кстати, как они правильно называются?):
                                  $html_template=str_replace('ColorForChange_1', $html_ColorForChange_1[$UserName], $html_template);
                                  Ведь эта конструкция прям напрашивается на очевидность...

                                  Добавлено
                                  Цитата Руслан @
                                  понимание как добавит третий <input> для квадратика,

                                  А в моей переделке я ведь правильно понял логику, что нужно сделать две формы выбора цвета: для юзера и для админа?
                                  Сообщение отредактировано: D-G -
                                    Цитата JoeUser @
                                    О приоритетах - хорошая статья.

                                    Прошу прощения, не сразу заметил ваше сообщение.
                                    Вроде как не совсем то, что мне нужно. Я пробовал в цсс файле ставить !important но оно не применяется. Применяется то, что в данный момент написано в стиле, встроенном в пхп. Хотя опять же, может я не правильно его прописываю...
                                    Хотя соврал... Внимательней прочитал, увидел, что вставляю после знака точки с запятой, а надо между цветом и точкой с запятой. Так цвет поменялся на тот, который в цсс. Теперь подумаю, как это использовать, ато с другими вариантами уже запутался.
                                    Сообщение отредактировано: D-G -
                                      Почти решил часть своей первоначальной задачи, хотя возможно я сперва не совсем правильно сформулировал её. Файл index.php я не трогал, оставил как было в первом сообщении. В main.css поменял цвета на красный и желтый для лучшей наглядности. В admin.php добавил кнопки выбора и использовал $_POST empty isset. Теперь работает переключение, но появляются предупреждения при первой загрузке страницы и смене цвета любого элемента. Предупреждение такое:
                                      ExpandedWrap disabled
                                        Notice: Undefined index: bodystyle in admin.php on line 2
                                        Notice: Undefined index: wcolor in admin.php on line 18

                                      Как бы от этого избавиться? Вот на всякий случай все три файла
                                      index.php
                                      ExpandedWrap disabled
                                        <!DOCTYPE html>
                                        <html>
                                        <head>
                                             <meta charset="UTF-8">
                                             <link rel="stylesheet" type="text/css" href="main.css"> <!-- присоединяю файл стилей -->
                                             <?php require_once('admin.php'); ?> <!--  вызываю файл админа для настройки главной страницы -->
                                           <title>смена обоев</title>
                                        </head>
                                        <body>
                                        <!--  создаю квадрат -->
                                           <div>
                                               <div class="wrap"> <!--  в нем чисто для визуального эффекта вызываю чтение содержимого файла стилей заодно перед глазами настройки стилей -->
                                        <?php
                                        $ob = file_get_contents('main.css');
                                        echo htmlentities($ob);
                                        ?>
                                               </div>
                                           </div>
                                        </body>
                                        </html>

                                      main.css
                                      ExpandedWrap disabled
                                        body {
                                            background: red;
                                        }
                                        .wrap  {
                                            background:yellow ;
                                            margin: auto ;
                                            width: 700px ;
                                            height: 400px ;
                                            z-index: 3 ;
                                        }

                                      admin.php
                                      ExpandedWrap disabled
                                        <?php
                                        $body_style=$_POST['bodystyle']; /*  Задаю значение переменной в зависимости от  введенной для кнопки БОДИ В НЕЙ ЖЕ ВЫДАЕТ ОШИБКУ Notice: Undefined index: bodystyle*/
                                        if (isset($_POST['bodystyle'])) {$body_style=$_POST['bodystyle'];} /*  Задаю первое условие и проверяю, что введено и присваиваю значение */
                                         
                                        elseif (empty($body_style)) /*  Проевряю не пустая ли строка, если пустая - ниже оставляю пустым значение переменной */
                                        {
                                        $body_style='';
                                        }
                                        /*  Как правильно то сказать? Инициирую применение стиля */
                                        echo '<style type="text/css";>
                                        body {background:'.$body_style.';}
                                        </style>';
                                        ?>
                                        <!--  Ниже подобная схема для квадрата -->
                                        <?php
                                        $wcolor=$_POST['wcolor']; /*  И тут выскакивает предупреждение Notice: Undefined index: wcolor которое я хочу побороть */
                                        if (isset($_POST['wcolor'])) {$body_style=$_POST['wcolor'];}
                                        elseif (empty($wcolor))
                                        {
                                        $wcolor='';
                                        }
                                        echo '<style type="text/css";>
                                        .wrap {background:'.$wcolor.';}
                                        </style>';
                                         
                                        ?>
                                         
                                        <?php
                                        // присваивает <body text='green'> чисто ради интереса как это работает
                                        $bodytag = str_replace("%body%", "green", "<body text='%body%'>");
                                        echo $bodytag;
                                        ?>
                                        <!--   Создаю две формы для ввода цвета БОДИ и квадрата -->
                                         <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">
                                                       <input value="сменить" type="submit">
                                                    </form>

                                      И небольшой вопрос вдогонку, даже два:
                                      1. Можно ли как-то менять название темы, ато понял, что не совсем правильно сформулировал
                                      2. Если полностью решу эту часть задачи, для будущих вопросов по развитию этого "инструмента", который я тут пробую написать, нужно ли будет создавать новую тему или можно будет продолжить тут?
                                      Сообщение отредактировано: D-G -
                                        Цитата D-G @
                                        Notice: Undefined index: bodystyle in admin.php on line 2

                                        Дык $_POST пустой же, во второй то строке! :-?

                                        Цитата D-G @
                                        $wcolor=$_POST['wcolor'];

                                        А в $_POST['wcolor'] разве что то прислали из браузера? :huh:
                                          Цитата D-G @
                                          Я пробовал в цсс файле ставить !important но оно не применяется.

                                          Лучше всего это применять только "для отладки", но в конечном итоге стараться силами *.css файла.
                                            Цитата Руслан @
                                            Дык $_POST пустой же, во второй то строке!

                                            А то, что я потом проверку делаю иф-элсэ? Разве не влияет? Нельзя как-нибудь отменить вывод этого предупреждения?

                                            И вопрос в целом, как мой вариант? Более-менее?

                                            Добавлено
                                            И как все таки пользоваться file_get_contents? Не можете тыкнуть пальцем, где это разжевано?
                                              Цитата D-G @
                                              А то, что я потом проверку делаю иф-элсэ? Разве не влияет?

                                              Программа то выполняется пошагово. Когда обрабатывается вторая строка, третья не учитывается. :no:

                                              Цитата D-G @
                                              И вопрос в целом, как мой вариант? Более-менее?

                                              Ваша реализация показывает действия, лишенные смысловой нагрузки, назвать такой подход "более-менее" - сложно. :-?

                                              Добавлено
                                              Цитата D-G @
                                              file_get_contents

                                              file_get_contents - считывает содержимое файла в переменную. Уж куда проще? :-) Остается понять что такое переменные, показываю:
                                              $x="text"; //переменная $x содержит слово text
                                              $x=file_get_contents('filename.css'); //теперь в переменную $x запихано содержимое файла filename.css
                                                Цитата Руслан @
                                                file_get_contents - считывает содержимое файла в переменную. Уж куда проще? :-) Остается понять что такое переменные, показываю:
                                                $x="text"; //переменная $x содержит слово text
                                                $x=file_get_contents('filename.css'); //теперь в переменную $x запихано содержимое файла filename.css


                                                Это я понял. У меня таким образом считывается содержимое цсс файла и выводится в квадрате. Вопрос как дальше эту инфу обрабатывать?


                                                А, кажется понял. Буду пробовать.
                                                Цитата Руслан @
                                                Ваша реализация показывает действия, лишенные смысловой нагрузки

                                                Почему лишенные смысловой нагрузки? ведь цвет меняется. Хоть БОДИ хоть квадрат

                                                Ну и вопросы по моим модификациям вашего примера. Разве нельзя вместе с проверкой на массив "админ"-"юзер" делать и проверку на введенный цвет? И вообще, правильна ли была моя логика добавить вторую форму?
                                                Сообщение отредактировано: D-G -
                                                  Цитата D-G @
                                                  Почему лишенные смысловой нагрузки?

                                                  Вторая строка имеет отношение к третьей, но логическая связь не наблюдается. :-?
                                                  нужно что то вроде
                                                  if (условие) {действие}
                                                  else {другое действие}

                                                  Вот ваш код, я заменил в нем комментарии на свои, и отформатировал отступами(для наглядности).
                                                  Цитата D-G @
                                                  ExpandedWrap disabled
                                                    $body_style=$_POST['bodystyle']; /*1*/ //требуется сделать проверку, прислал ли пользователь $_POST['bodystyle']
                                                     
                                                    if (isset($_POST['bodystyle']))
                                                    {
                                                        $body_style=$_POST['bodystyle']; /*2*/
                                                    }
                                                    elseif (empty($body_style))
                                                    {
                                                        $body_style=''; /*3*/
                                                    }


                                                  Добавлено
                                                  Цитата D-G @
                                                  Вопрос как дальше эту инфу обрабатывать?

                                                  Можно заюзать str_replace: :)
                                                  результат_сюда = str_replace(что искать, на что менять, где искать\менять);

                                                  примерно так это может выглядеть на практике: $html_template = str_replace('#900000', '#009000', $html_template); - замена всех #900000 на #009000.
                                                  Сообщение отредактировано: Руслан -
                                                    Цитата Руслан @
                                                    Вот ваш код, я заменил в нем комментарии на свои, и отформатировал отступами(для наглядности).

                                                    Так у меня не получилось. Но я подумал, что у меня $wcolor=$_POST["wcolor"] и $body_style=$_POST['bodystyle'] объявляются дважды. Убрал (закоментировал) их там, где было первое объявление и выскакивала ошибка, оставил там где идет сперва проверка, а потом объявление и вроде все работает. Получилось вот так:
                                                    ExpandedWrap disabled
                                                       
                                                      /* $body_style=$_POST['bodystyle'];   Задаю значение переменной в зависимости от  введенной для кнопки БОДИ В НЕЙ ЖЕ ВЫДАЕТ ОШИБКУ Notice: Undefined index: bodystyle ну а раз оно же встречается в следующей строке, то эту коментирую и ошибка уходит  */
                                                      if (isset($_POST['bodystyle'])) {$body_style=$_POST['bodystyle'];} /*  Задаю первое условие и проверяю, что введено и присваиваю значение */
                                                       
                                                      бла-бла-бла
                                                      /*   $wcolor=$_POST["wcolor"];  И тут выскакивало предупреждение Notice: Undefined index: wcolor которое я хотел побороть */
                                                      if (isset($_POST['wcolor'])) {$body_style=$_POST['wcolor'];}

                                                    Поэксперементирую дальше - отпишусь.

                                                    Добавлено
                                                    Сделал опечатку: не
                                                    ExpandedWrap disabled
                                                      if (isset($_POST['wcolor'])) {$body_style=$_POST['wcolor'];}
                                                    а
                                                    ExpandedWrap disabled
                                                      if (isset($_POST['wcolor'])) {$wcolor=$_POST['wcolor'];}
                                                    Сообщение отредактировано: D-G -
                                                      Цитата Руслан @

                                                      Простой пример, который делает то, что Вы спросили изначально


                                                      Что-то не получается разобраться у меня с вашим примером. Пути я конечно подправил, но не только не меняет цвет, но сохранения не происходит. При попытке сохранения выводит содержимое цсс файла и выдает ошибку:
                                                      ExpandedWrap disabled
                                                        Warning: Use of undefined constant are_user_is_admin - assumed 'are_user_is_admin' (this will throw an Error in a future version of PHP) on line 12
                                                        body{ width:100%; height:100%; background-color:#DDD; color:#000; } div.ClassForUser{ margin: 2px; background-color:#FF0000; color:#000000; } div.ClassForAdmin{ margin: 3px; border:2 px solid #FF0000; background-color:#770000; color: #FFF; }


                                                      Цитата Руслан @
                                                      И лучше бы её(функцию сохранения .css) не менять как минимум до тех пор, пока не придет понимание "как заменить значения в <input value="#000000"> - на актуальное, из .CSS"

                                                      Я просто оставил пустым значение $body_style=''; и $wcolor=''; и оно стало подтягивать то, что в цсс. Так правильно?
                                                      Ещё вы используете preg_replace. Как я понимаю, она используется для поиска и замены регулярных (шаблонных) выражений. А если не знаешь какие выражения в документе регулярные? И являются ли регулярными выражениями <div> <div class="">? Или допустим в цсс файле перед классом стоит точка, будет ли считаться точка регулярным выражением?
                                                      Цитата Руслан @
                                                      понимание как добавит третий <input> для квадратика

                                                      Подскажите хотя бы зачем этот третий инпут? Имеется ввиду ещё одно свойство, напр закругленность углов?
                                                        Цитата D-G @
                                                        Пути я конечно подправил, но не только не меняет цвет, но сохранения не происходит.

                                                        Вернуть код к исходному, делов то! :)

                                                        Цитата D-G @
                                                        Подскажите хотя бы зачем этот третий инпут?

                                                        2 моих input прекрасно сохраняются в таблицу стилей. Но вам же нужно больше input (цвета, или какие то другие настройки). :) Изначально .php спроектирован так, что добавить input очень просто, т.е. менять любые значения в css. :)
                                                        Сообщение отредактировано: Руслан -
                                                          Цитата Руслан @
                                                          Вернуть код к исходному, делов то!

                                                          Так в исходном варианте при нажатии на "Зайти под юзером" или "сменить" выкидывает на страницу xammp (http://localhost/dashboard/). Оба файла лежат в одной директории. Я всего навсего подправил вот что:
                                                          <form action="index.php" вместо <form action="/index.php"
                                                          </div><a href="index.php">зайти под юзером</a>'; вместо </div><a href="/">зайти под юзером</a>';
                                                          Сообщение отредактировано: D-G -
                                                            Цитата Руслан @
                                                            Но вам же нужно больше input

                                                            А, ну для дополнительных настроек... Тогда понятно, это в моем варианте легко, только вот, напр, если менять ширину-высоту, одним словом, если нужно применять какие то единицы измерения (px,em и тд) то их в поле приходится вбивать вручную (500px или 70%). Вот пример:
                                                            ExpandedWrap disabled
                                                              /* Задаю и проверяю первую переменную */
                                                              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='';}    }
                                                              echo '<style type="text/css";>
                                                              .wrap {background:'.$wcolor.';
                                                              color:'.$wtextcolor.';
                                                              width:'.$wwidth.';
                                                              }
                                                                  </style>';
                                                              <!--   Создаю форму для ввода бэкграунда, цвета текста, ширины квадрата -->
                                                              <form action="index.php" method="post" enctype="multipart/form-data">
                                                              цвет фона для Квадрата:<input name="wcolor" value="" type="text"><br>
                                                              цвет текста внутри квадрата:<input name="wtextcolor" value="" type="text"><br>
                                                              ширина квадрата:<input name="wwidth" value="" type="text">
                                                              <input value="сменить" type="submit">
                                                              </form>

                                                            Ещё пока не разобрался с массивами, возможно мой код можно будет упростить с их помощью.
                                                            Сообщение отредактировано: D-G -
                                                              Цитата D-G @
                                                              Так в исходном варианте при нажатии на "Зайти под юзером" или "сменить" выкидывает на страницу

                                                              Сложите файлы в корневую директорию.

                                                              Цитата D-G @
                                                              А, ну для дополнительных настроек... Тогда понятно, это в моем варианте легко

                                                              Ваш код ни чего на сервере не сохраняет. :)
                                                                Цитата Руслан @
                                                                Сложите файлы в корневую директорию.

                                                                Положил в htdocs все равно выкидывает на страницу xammp
                                                                Цитата Руслан @
                                                                Ваш код ни чего на сервере не сохраняет.

                                                                Это конечно, но разве будет большая разница? Да и начинаю посматривать в сторону xml. Как я прочитал, там формы тоже можно создавать и вроде как значения будут сохраняться. Но ещё много читать надо, даже не получается саму форму в пхп файл вывести
                                                                В любом случае очень хочется и с вашим примером разобраться, только его бы как-то запустить... Даже не представляю, в какую корневую папку его положить, если htdocs верхняя (корневая) для всех остальных шаблонов, тестовых примеров и тп.
                                                                Сообщение отредактировано: D-G -
                                                                  Цитата D-G @
                                                                  Положил в htdocs все равно выкидывает на страницу xammp

                                                                  да, загадка! :scratch:
                                                                  Но у меня работает, а у вас не работает. Учитывая, что в целом вам этот код не нужен, о чем мы вообще говорим? :-?

                                                                  Вы хотите сначала сохранять в .css, теперь в xml... При этом имея смутные представления даже об основах программирования... :facepalm:
                                                                  Вам бы хорошую книгу найти - для начинающих! - там где примеры "как выводить 2+2", и дальше, что такое переменные, чем отличаются данные на сервере от данных у клиента... и далее, далее, далее... :)
                                                                  Сообщение отредактировано: Руслан -
                                                                    Цитата Руслан @
                                                                    Учитывая, что в целом вам этот код не нужен

                                                                    Вообще-то нужен. Очень хочется разобраться, в том числе и для понимания плюсов и минусов. А другие примеры начинаю читать потому что с вашим примером не могу разобраться. Я уже прочитал, что можно сохранять в БД и через сессию (только не совсем понял, это куки или нет, вроде нет). Вот ваш пример записывает в цсс файл. Тоже интересно. Еще прочитал, что создают какие-то эхо-формы, только вообще не понял как это. Ведь если знать только один вариант, можно упустить что-то важное, застрять на месте, перестать следить за развитием программирования.
                                                                    Да и думаю, что в вашем варианте просто не понимаю, где должны лежать файлы. Ведь повторюсь даже не представляю, в какую корневую папку его положить, если htdocs верхняя (корневая) для всех остальных шаблонов, тестовых примеров и тп. У вас видимо апач поднят не с помощью xammp. А книжки читаю. Только опять же, каждый советует свое, и у всех разные понятия о лучшей книжке. Я вот благодаря вашему примеру свой вариант привел в более менее нормальный вид, хотя перед этим уже много чего прочитал, но наверно не того что надо

                                                                    Добавлено
                                                                    Цитата Руслан @
                                                                    чем отличаются данные на сервере от данных у клиента... и далее, далее, далее...

                                                                    Я так понимаю, что данные в цсс файле сохраняются на сервере, и в xml - это тоже на сервере. То что мы видим при редактировании скажем моего варианта - это клиентская часть, она на сервере не хранится.
                                                                    Сообщение отредактировано: D-G -
                                                                      Цитата D-G @
                                                                      не понимаю, где должны лежать файлы

                                                                      Цитата D-G @
                                                                      Оба файла лежат в одной директории

                                                                      Оба из трех... - это маловато! :D

                                                                      Цитата D-G @
                                                                      в том числе и для понимания плюсов и минусов

                                                                      Очень интересно, по каким критериям вы отличите плюсы от минусов? :rolleyes:

                                                                      Добавлено
                                                                      Цитата D-G @
                                                                      Я так понимаю, что данные в цсс файле сохраняются на сервере, и в xml - это тоже на сервере.

                                                                      Книгу, читайте книгу, основы PHP. :-)
                                                                        Цитата Руслан @
                                                                        Оба из трех... - это маловато

                                                                        Просто опечатался, да и не важно, ведь ошибка не в подтягивании цсс файла, а в переходе по страницам, ведь переходит на страницу настроек xammp, тоесть до цсс даже не доходит.
                                                                        Цитата Руслан @
                                                                        Очень интересно, по каким критериям вы отличите плюсы от минусов?

                                                                        Начну со скорости загрузки, потом, как я понял, через те же сессии, сохраняется с приставкой в конце адресной строки. Приставка одна и таже, при этом все изменения сохраняются. Но если добавочку убрать, то все стирается, грузится дефолтный. С БД пока не разобрался. Для этого надо видимо и с БД разбираться, но возможно быстрее растет объем. Это понятно, я ещё слишком мало знаю, чтобы сейчас делать выводы, но всему свое время.
                                                                        А так читаю.
                                                                          Цитата D-G @
                                                                          а в переходе по страницам

                                                                          Что мешает определить, какие ссылки понятны вашей системе? :-?
                                                                            Цитата Руслан @
                                                                            Что мешает определить, какие ссылки понятны вашей системе?

                                                                            Видимо где-то нехватка знаний. Меня хватило поменять как я вам показал выше. В этом варианте я со страницы админа перехожу на страницу юзера, а при нажатии на кнопку "сменить" достает содержимое цсс файла, распечатывает его и выдает ошибку, мол не идентифицированная переменная are_user_is_admin объявленная как are_user_is_admin. Я уже приводил выше код. Не пойму как надо прописать пути, если лежат в одной папке и даже в самый корень xammp ложил. Какие данные могли бы вам подсказать, где у меня ошибка?
                                                                            Были мысли, что проблема в этом месте вашего кода
                                                                            ExpandedWrap disabled
                                                                              //сохранение доступно только админу
                                                                              if (!are_user_is_admin) {return false;}

                                                                            Но вырезал его, и тогда при нажатии на "сменить" вообще ничего не происходило. Удаление ! тоже ничего не дало. Дважды копировал заново и пересохранял ваш код на всякий случай, вдруг где-то чего-то упустил.
                                                                              Цитата D-G @
                                                                              Но вырезал его, и тогда при нажатии на "сменить" вообще ничего не происходило.

                                                                              Угу, в строке 12, are_user_is_admin - вообще то обращение к функции а не переменной. Впрочем, дело десятое, строку можно исправить под ваш интерпретатор, или удалить - любое из предложенных решений не повлияет на результат работы.
                                                                              "варианты решения"

                                                                              решение1 - в начало строки 12 добавить //
                                                                              решение2 - в 12й строке, после слова are_user_is_admin добавить ()
                                                                              решение3 - удалить строку №12


                                                                              Ну а результат работы - "ни чего не происходит"... :scratch: а что должно произойти по вашему? :huh: Файл style.css изменен, проверяйте. ;)
                                                                              Сообщение отредактировано: Руслан -
                                                                                Цитата Руслан @
                                                                                Ну а результат работы - "ни чего не происходит"... :scratch: а что должно произойти по вашему? :huh: Файл style.css изменен, проверяйте.

                                                                                И правда, файл цсс меняется. А я то смотрю на изменения цвета элемента ((( он не меняется, и я морочу себе и вам голову.
                                                                                Кстати, то что грузилась страница настройки xammp... она ж тоже в крне лежит и называется index.php Я и переименовывал вашу, чтоб конфликтов не было, а когда в папке лежала, так даже не подумал на эту тему.
                                                                                Ладно, буду дальше разбираться и мучать вас вопросами, в том числе и почему цвет не применяется, хотя в цсс изменения вносятся.
                                                                                Кстати, и цвет меняется ((( ерунда какая-то... вчера ж вместо замены цвета просто выводило содержимое файла цсс
                                                                                Сообщение отредактировано: D-G -
                                                                                  Цитата D-G @
                                                                                  А я то смотрю на изменения цвета элемента ((( он не меняется, и я морочу себе и вам голову.

                                                                                  Вообще то цвет меняется, но у юзера, а вносить изменения доступно только админу. :)
                                                                                  Важней вопрос - "как самостоятельно убедится в этапах работы скрипта"? ;) А для этого нужны базовые понимания, потому я упорно рекомендую найти толковую книгу по php для начинающих! - хотя бы брошюрку, где доступным языком, и с простыми примерами, были бы даны таки основы! :yes:

                                                                                  Цитата D-G @
                                                                                  ерунда какая-то... вчера ж вместо замены цвета просто выводило содержимое файла цсс

                                                                                  Огромное количество вопросов решается при понимании основ вэб программирования. :)

                                                                                  А при отсутствии знаний основ, чаще будут возникать всякого рода казусы, уводящие в тупик... :yes-sad: :wall: :wall: :wall:
                                                                                  Сообщение отредактировано: Руслан -
                                                                                    Цитата Руслан @
                                                                                    Вообще то цвет меняется, но у юзера, а вносить изменения доступно только админу

                                                                                    Ну так я у юзера и проверял
                                                                                    Прочитал несколько брошюрок, в том числе и эту
                                                                                    http://www.php-s.ru/self-teacher/1_1/ (Заранее прошу прощения у админов, не знаю, будет ли это нарушением правил дать тут ссылку. Если это нарушение, то вырезайте её-их)
                                                                                    И вот тут пробую читать https://www.php.net/manual/ru/

                                                                                    Я вот подумал, может это из-за куков было? Хотя я постоянно обновлял страничку, даже иногда через кнтрл+ф5. А тут со злости сегодня решил вручную поменять файл стилей, проверить, что именно в нем подхватывается. Добавил ширину у div.ClassForUser и она поменялась уже с цветом. Потом независимо от того была ширина или нет, все цвета применялись. А все что я до этого менял - это пути. И сейчас они стоят так же, как я прописывал их перед этим. Может в настройках ксампа стояли запреты на такой тип редактирования файла, а после моих ручных корректировок все разрешилось? Но тогда почему выводилось содержимое цсс файла?
                                                                                    Сообщение отредактировано: D-G -
                                                                                      Цитата D-G @
                                                                                      Я вот подумал, может это из-за куков было?

                                                                                      Дело было в том, что браузер не счел необходимым проверить изменился ли файл .css. Вместо того, что бы качать его, взял из своего кэша, таким образом ускорив загрузку сайта. :) Это типичное поведение бравзёров. :yes:

                                                                                      Добавлено
                                                                                      Цитата D-G @
                                                                                      даже иногда через кнтрл+ф5

                                                                                      мистика. :rolleyes:
                                                                                      Сообщение отредактировано: Руслан -
                                                                                        Цитата Руслан @
                                                                                        а что должно произойти по вашему?

                                                                                        У меня вопрос по вашему примеру. Там есть такая строка:
                                                                                        ExpandedWrap disabled
                                                                                          $css_file=preg_replace('/(.*'.$Target1.'{)(.*[^}]\s'.$Target2.':)(.*;)(.*)/Usi',"$1$2$RequestElementValue;$4",$css_file);

                                                                                        То, что я понимаю:
                                                                                        1.$2 - это ClassForUser, в случае если это Target1
                                                                                        ExpandedWrap disabled
                                                                                          $Target1=preg_replace('/(_css-)(.*)(__target.*)/', "$2", $RequestElementName);
                                                                                        , но не понимаю, когда это успели присвоить
                                                                                        2. $2 - это _css-ClassForUser__target- в случае если это Target2, но не понимаю, когда это успели присвоить, и почему если я в случае target1 меняю $2 на $1, получается один результат, а в случае с target2 - другой.
                                                                                        3. '/(.*'.$Target1.'{)(.*[^}]\s'.$Target2.':)(.*;)(.*)/Usi' -это первый элемент который меняется на "$1$2$RequestElementValue;$4"
                                                                                        Но плохо понимаю кодировку этого первого элемента, и не понимаю, откуда взялась $1 и что за переменная $4
                                                                                        4. По идее Target1 - показывает из какого класса цсс файла берется переменная, а Target2 показывает свойства этой переменной, так сказать, отображают массив из этих данных, причем от перемены мест в файле стилей свойств класса не влияет на применение стиля.
                                                                                        5. Если добавить ещё два поля напр, ширину и высоту, то Target2 правильно его отображает.
                                                                                        ExpandedWrap disabled
                                                                                          $RequestElementName=_css-ClassForUser__target-width_css-
                                                                                          $target1=ClassForUser
                                                                                          $target2=width
                                                                                          $value=

                                                                                        Казалось бы, что все должно работать, Но если применить, то изменений не происходит. При этом, в свойствах класса стирается все, что стоит перед ними вместе с этими двумя свойствами.
                                                                                        По всей видимости ответ на последний вопрос кроется в первых вопросах. Если можно - натолкните на мысль.
                                                                                          Цитата D-G @
                                                                                          Там есть такая строка:

                                                                                          Вы выбрали сложную часть кода. Но раз уж вопрос имеется, очень поверхностно(наглядный осмотр лишь одного аспекта) попробую на него ответить.
                                                                                          вот исходная строка:
                                                                                          ExpandedWrap disabled
                                                                                            $css_file=preg_replace('/(.*'.$Target1.'{)(.*[^}]\s'.$Target2.':)(.*;)(.*)/Usi',"$1$2$RequestElementValue;$4",$css_file);

                                                                                          вот её частичный разбор:

                                                                                          $css_file=preg_replace('/

                                                                                          $1 = (.*'.$Target1.'{)
                                                                                          $2 = (.*[^}]\s'.$Target2.':)
                                                                                          $3 = (.*;)
                                                                                          $4 = (.*)

                                                                                          /Usi',

                                                                                          "$1$2$RequestElementValue;$4",

                                                                                          $css_file);

                                                                                          как видите, вместо $3 подставлено $RequestElementValue, значение которого взято парой строк выше, из $_POST... т.е. часть $3 в $css_file заменена на $RequestElementValue.

                                                                                          На самом деле, лучше бы не ломать свой мозг об регулярные выражения, хотя я изначально постарался его упростить, и добавил точки останова в комментариях - для возможности изучить влияние при изменении ВХОДНЫХ данных. Код этой функции таки лучше не трогать, пока не стоит вопрос обеспечения безопасности. Через него вы можете менять в общем не особо ограниченное количество данных в своем .css. :)

                                                                                          Цитата D-G @
                                                                                          Казалось бы, что все должно работать

                                                                                          Дело в том, что регулярка (выше обсуждаемая), написана несколько простовато, она корректно обрабатывает файл.css лишь определенного формата:
                                                                                          1) сразу после $target1(который .className), должен находиться символ {
                                                                                          2) свойство, которое вы пробуете менять - должно присутствовать в файл.css
                                                                                          Сообщение отредактировано: Руслан -
                                                                                            Цитата Руслан @
                                                                                            2) свойство, которое вы пробуете менять - должно присутствовать в файл.css

                                                                                            Так он присутствует. При этом если его пробовать изменить, то затираются все свойства, которые перед ним именно в цсс файле. Если оставлять пустым поле, то в файле цсс не стирается.
                                                                                            Цитата Руслан @
                                                                                            /Usi',

                                                                                            А это что такое, я нигде не нашел описание
                                                                                            Цитата Руслан @
                                                                                            лучше бы не ломать свой мозг об регулярные выражения

                                                                                            А где можно подробнее с доступными примерами почитать?
                                                                                            Цитата Руслан @
                                                                                            $1 = (.*'.$Target1.'{)
                                                                                            $2 = (.*[^}]\s'.$Target2.':)
                                                                                            $3 = (.*;)
                                                                                            $4 = (.*

                                                                                            А когда это успели присвоить?
                                                                                            И ещё, почему-то именно с этим примером у меня кнтрл+ф5 срабатывает со 2-5 раза.
                                                                                              Цитата D-G @
                                                                                              А когда это успели присвоить?

                                                                                              В функции preg_replace примерно так были обработаны "()". Разве вы не заметили этого же принципа, парой строк выше:
                                                                                              ExpandedWrap disabled
                                                                                                $Target1=preg_replace('/(_css-)(.*)(__target.*)/', "$2", $RequestElementName);


                                                                                              Цитата D-G @
                                                                                              Так он присутствует. При этом если его пробовать изменить, то затираются все свойства, которые перед ним именно в цсс файле. Если оставлять пустым поле, то в файле цсс не стирается.

                                                                                              О! Проверил, действительно, регулярка написана с ошибкой, при некоторых обстоятельствах выжирает кусок своего класса! :yes-sad: Нехорошая регулярка! <_<
                                                                                              Похоже проблема в том, что preg_replace воспринимает "значение переменной"($RequestElementValue) в качестве некого условия для замены... :scratch:
                                                                                              Добавление одного пробела исправило ситуацию:
                                                                                              ExpandedWrap disabled
                                                                                                $css_file=preg_replace('/(.*'.$Target1.'{)(.*[^}]\s'.$Target2.'\:)(.*;)(.*)/Usi','$1$2 '.$RequestElementValue.';$4',$css_file);


                                                                                              Добавлено
                                                                                              Цитата D-G @
                                                                                              И ещё, почему-то именно с этим примером у меня кнтрл+ф5 срабатывает со 2-5 раза.

                                                                                              Я давно мечтал изучить особенности Вашего бразуера! :D
                                                                                                Цитата Руслан @
                                                                                                Разве вы не заметили этого же принципа, парой строк выше

                                                                                                Да, но мне казалось, что все должно быть четко присвоено (объявлено):
                                                                                                $1 =то-то
                                                                                                $2 = это
                                                                                                $3 =вот это
                                                                                                А там есть только похожий принцип без указаний. Я то по принципу и догадался что одна часть отвечает за $1, другая за $2 и тд, и это при том, что $2 используется в объявлении двух таргетов, но все равно не понимаю как именно они объявлены
                                                                                                Цитата Руслан @
                                                                                                Добавление одного пробела исправило ситуацию

                                                                                                ))) Попробую найти этот пробел
                                                                                                Сообщение отредактировано: D-G -
                                                                                                  Цитата D-G @
                                                                                                  Да, но мне казалось, что все должно быть четко присвоено (объявлено):

                                                                                                  Не показалось ли вам, что вся обработка идет внутри preg_replace, а я показал как происходит один из этапов обработки? :huh:


                                                                                                  Цитата D-G @
                                                                                                  ))) Попробую найти этот пробел

                                                                                                  Учитывая, что он единственный в приведенной строке, наверное это не так что бы сложно. :-?
                                                                                                  Сообщение отредактировано: Руслан -
                                                                                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                  0 пользователей:


                                                                                                  Рейтинг@Mail.ru
                                                                                                  [ Script execution time: 0,1652 ]   [ 16 queries used ]   [ Generated: 16.04.24, 14:06 GMT ]