На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > Ошибка: Use of undefined constant ... Как исправить?
      Продолжаю вопросы новичка. Есть пхп файл с формой для смены цвета бэкграунда. Использую метод POST чтбы вытащить данные из поля ввода формы. С одной стороны цвет меняется, но с другой - выдает три ошибки (по количеству цветов в этом тренировачном файле). Ошибки такие:
      Use of undefined constant red - assumed 'red' (this will throw an Error in a future version of PHP) ... on line 8
      Use of undefined constant blue - assumed 'blue' (this will throw an Error in a future version of PHP) ... on line 12
      Use of undefined constant green - assumed 'green' (this will throw an Error in a future version of PHP) ... on line 16

      Понимаю, что это предупреждения о том, что неопределенная константа названная "название цвета" в такой-то строке.
      Хотелось бы знать, что не так в коде и как это исправить?
      Вот код (файл index.php):
      ExpandedWrap disabled
        <?php
        $red="<body bgcolor='red'>"; /* задаю переменную */
        $blue="<body bgcolor='blue'>";
        $green="<body bgcolor='green'>";
        $color=$_POST['color']; /*  читаю переменную из формы ввода */
         
        /* Задаю условие */
        if($color==red)/* ругается на эту строку */
        {
        echo $red;
        }
        elseif($color==blue) /* ругается на эту строку */
        {
        echo $blue;
        }
        elseif($color==green) /* ругается на эту строку */
        {
        echo $green;
        }
        else
        {
        echo "Default color"."<body bgcolor='#fff'>"; /* Задаю дефолтный цвет, если введена абракадабра и надпись возле формы  */
        }
        echo "<body bgcolor='#fff'>";
        ?>
         
        <form action="index.php" method="post">
        <input type="text" name="color">
        <input type="submit" name="sub" value="ok">
        </form>
      Сообщение отредактировано: D-G -
        В кавычки взять.
          Цитата domencom @
          В кавычки взять.

          Спасибо, замучался уже, теперь все работает.
          Но теперь возникла похожая проблема. Если применять цвета, в том числе и дефолтный, ошибок не возникает. Если заново загрузить страницу, то возникают следующие ошибки:
          ExpandedWrap disabled
            Notice: Undefined index: color on line 5
            Notice: Undefined index: color on line 7
            Notice: Undefined index: color on line 11
            Notice: Undefined index: color on line 15

          Если брать и тут в кавычки "color" то не помогает. Пробовал брать в кавычки вот так $color="$_POST['color']"; выбивает другую ошибку:
          ExpandedWrap disabled
             Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
          Сообщение отредактировано: D-G -
            Извращенец
            ExpandedWrap disabled
              <?php
                $colors = array('#fff', 'red', 'blue', 'green');
                $color = '';
                $ololo = $_POST['color'];
                if (isset($ololo)) {
                  if (in_array($ololo, $colors)) { $color = $ololo; }
                }
                if (strlen($color) == 0) { $color = $colors[0]; }
                echo "<body bgcolor='$color'>";
              ?>
                  <form action="asd.php" method="post">
                  <input type="text" name="color">
                  <input type="submit" name="sub" value="ok">
                  </form>
            Сообщение отредактировано: Gonarh -
              В массиве $_post нет данных так как ты не отправил форму а зашёл через get запрос. Учи азы http протокола
                Цитата Gonarh @
                Извращенец

                Надеюсь со временем я стану более опытным "извращенцем" )))
                Но в вашем примере осталась та же проблема с переменной color, только в строке 4
                $ololo = $_POST['color'];

                Добавлено
                Цитата domencom @
                В массиве $_post нет данных так как ты не отправил форму а зашёл через get запрос. Учи азы http протокола

                В связи с этим у меня два вопроса:
                1. Можно ли это как-то побороть? И как?
                2. Тыкнете, пжл, что конкретно нужно почитать по этому вопросу. Может даже не столько тему, сколько источник, в котором это разжевано. Хотя я, конечно же попробую и сам поискать и почитать
                Сообщение отредактировано: D-G -
                  Цитата D-G @
                  Но в вашем примере осталась та же проблема с переменной color, только в строке 4
                  $ololo = $_POST['color'];

                  Нет никакой проблемы, всё работает. Видимо ты даже не проверял

                  Добавлено
                  Цитата D-G @
                  Тыкнете, пжл, что конкретно нужно почитать по этому вопросу.

                  Куки и сессии
                    Цитата Gonarh @
                    Нет никакой проблемы, всё работает. Видимо ты даже не проверял

                    Вообще-то проверял. Возможно не полностью сформулировал. После закрытия страницы при первом заходе, либо при нажатии на энтер в адресной строке, когда страница уже загружена, выскакивает
                    ExpandedWrap disabled
                      Notice: Undefined index: color on line 4

                    Цитата Gonarh @
                    Куки и сессии

                    А как это касается первого захода на страницу? Ведь при первом заходе какие могут быть куки?
                    Сообщение отредактировано: D-G -
                      Цитата
                      . Тыкнете, пжл, что конкретно нужно почитать по этому вопросу

                      https://habr.com/ru/post/215117/
                      https://ruseller.com/lessons.php?rub=28&id=1726
                      Сообщение отредактировано: domencom -
                        Цитата D-G @
                        Вообще-то проверял. Возможно не полностью сформулировал. После закрытия страницы при первом заходе, либо при нажатии на энтер в адресной строке, когда страница уже загружена, выскакивает
                        ExpandedWrap disabled
                          Notice: Undefined index: color on line 4

                        Нотис это не ошибка.
                        ExpandedWrap disabled
                             <?php
                                $colors = array('#fff', 'red', 'blue', 'green');
                                $color = '';
                                if (isset($_POST['color'])) {
                                  if (in_array($_POST['color'], $colors)) { $color = $_POST['color']; }
                                }
                                if (strlen($color) == 0) { $color = $colors[0]; }
                                echo "<body bgcolor='$color'>";
                              ?>
                                  <form action="asd.php" method="post">
                                  <input type="text" name="color">
                                  <input type="submit" name="sub" value="ok">
                                  </form>
                        Сообщение отредактировано: Gonarh -
                          Цитата Gonarh @
                          Нотис это не ошибка.

                          Замечание мало чем отличается от ошибки. неприятно когда оно выскакивает. Но я только-только исправил свой вариант и ваш переделал так же как вы сделали ))) Но никак не могу придумать как в вашем варианте сделать вывод надписи "Дефолтный цвет" если набрана абракадабра. В моем извращенческом варианте эта надпись есть. Вот как он теперь выглядит:
                          ExpandedWrap disabled
                            <?php
                                $red="<body bgcolor='red'>"; /* задаю переменную */
                                $blue="<body bgcolor='blue'>";
                                $green="<body bgcolor='green'>";
                            if (isset($_POST['color'])) {$color = $_POST['color']; /*  читаю переменную из формы ввода */
                                
                                /* Задаю условие */
                                if($color=="red")
                                {
                                echo $red;
                                }
                                elseif($color=="blue")
                                {
                                echo $blue;
                                }
                                elseif($color=="green")
                                {
                                echo $green;
                                }
                                else
                                {
                                echo "Default color"."<body bgcolor='#fff'>"; /* Задаю дефолтный цвет, если введена абракадабра и надпись возле формы  */
                                }
                            }
                                echo "<body bgcolor='#fff'>";
                                ?>
                                
                                <form action="fon111.php" method="post">
                                <input type="text" name="color">
                                <input type="submit" name="sub" value="ok">
                                </form>

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

                            Не верно.

                            Добавлено
                            Цитата D-G @
                            В моем извращенческом варианте...
                            случайно сделал вариант где применяются любые цвета

                            Использование ничем не ограниченного ввода пользователя обернётся как минимум инжектом, как максимум шеллом с правами запущенного веб-сервиса, а то и рута.

                            Добавлено
                            Цитата D-G @
                            И поскольку с массивами у меня ещё сложнее, то как раз хотел поинтересоваться, как бы вывести нужную надпись и в вашем варианте?

                            ExpandedWrap disabled
                              if (strlen($color) == 0) {
                                echo "Default color<br>";
                                $color = $colors[0];
                              }
                            Сообщение отредактировано: Gonarh -
                              Спс, так все работает. Правда не совсем понимаю почему ((( ну да буду разбираться.
                              Цитата Gonarh @
                              Цитата D-G @ Сегодня, 20:15
                              Замечание мало чем отличается от ошибки.

                              Не верно.


                              Ну я то понимаю, что замечание - это не ошибка, но все же неприятно, когда выскакивает малейшее предупреждение.
                              Цитата Gonarh @
                              Использование ничем не ограниченного ввода пользователя обернётся как минимум инжектом, как максимум шеллом с правами запущенного веб-сервиса, а то и рута.

                              Так этот вариант срабатывал только на названия (кодировку) цветов. Если вводилась абракадабра, в том числе и "root", то заливался черный цвет. Да и не выложил я его, так сказать делился своими шагами.

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

                              Добавлено
                              А это типа отметка, что вопрос решен, потому что основной вопрос решен благодаря вам. Ещё бы теперь с сохранением разобраться. Или для этого нужно новую тему начинать?

                              Добавлено


                              Спасибо, буду читать
                                По поводу сохранения, два пути либо в БД, либо в куках, у каждого свои плюсы и минусы.

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

                                Предупреждение это варнинг. Нотис это просто сообщение. Это разные вещи.
                                В любом случае надо анализировать что пишет интерпретатор, и чем это чревато и при каких ситуациях.
                                Сообщение отредактировано: Gonarh -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


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