Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > PHP > Ошибка: Use of undefined constant ... Как исправить?


Автор: D-G 07.04.19, 17:37
Продолжаю вопросы новичка. Есть пхп файл с формой для смены цвета бэкграунда. Использую метод 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):
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <?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>

Автор: domencom 09.04.19, 12:32
В кавычки взять.

Автор: D-G 09.04.19, 15:30
Цитата domencom @
В кавычки взять.

Спасибо, замучался уже, теперь все работает.
Но теперь возникла похожая проблема. Если применять цвета, в том числе и дефолтный, ошибок не возникает. Если заново загрузить страницу, то возникают следующие ошибки:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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']"; выбивает другую ошибку:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

Автор: Gonarh 09.04.19, 16:46
Извращенец
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <?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>

Автор: domencom 09.04.19, 16:47
В массиве $_post нет данных так как ты не отправил форму а зашёл через get запрос. Учи азы http протокола

Автор: D-G 10.04.19, 09:42
Цитата Gonarh @
Извращенец

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

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

В связи с этим у меня два вопроса:
1. Можно ли это как-то побороть? И как?
2. Тыкнете, пжл, что конкретно нужно почитать по этому вопросу. Может даже не столько тему, сколько источник, в котором это разжевано. Хотя я, конечно же попробую и сам поискать и почитать

Автор: Gonarh 10.04.19, 10:26
Цитата D-G @
Но в вашем примере осталась та же проблема с переменной color, только в строке 4
$ololo = $_POST['color'];

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

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

Куки и сессии

Автор: D-G 10.04.19, 12:06
Цитата Gonarh @
Нет никакой проблемы, всё работает. Видимо ты даже не проверял

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

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

А как это касается первого захода на страницу? Ведь при первом заходе какие могут быть куки?

Автор: domencom 10.04.19, 14:43
Цитата
. Тыкнете, пжл, что конкретно нужно почитать по этому вопросу

https://habr.com/ru/post/215117/
https://ruseller.com/lessons.php?rub=28&id=1726

Автор: Gonarh 10.04.19, 14:53
Цитата D-G @
Вообще-то проверял. Возможно не полностью сформулировал. После закрытия страницы при первом заходе, либо при нажатии на энтер в адресной строке, когда страница уже загружена, выскакивает
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Notice: Undefined index: color on line 4

Нотис это не ошибка.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
       <?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>

Автор: D-G 10.04.19, 16:15
Цитата Gonarh @
Нотис это не ошибка.

Замечание мало чем отличается от ошибки. неприятно когда оно выскакивает. Но я только-только исправил свой вариант и ваш переделал так же как вы сделали ))) Но никак не могу придумать как в вашем варианте сделать вывод надписи "Дефолтный цвет" если набрана абракадабра. В моем извращенческом варианте эта надпись есть. Вот как он теперь выглядит:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <?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>

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

Автор: Gonarh 10.04.19, 16:42
Цитата D-G @
Замечание мало чем отличается от ошибки.

Не верно.

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

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

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

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    if (strlen($color) == 0) {
      echo "Default color<br>";
      $color = $colors[0];
    }

Автор: D-G 10.04.19, 17:36
Спс, так все работает. Правда не совсем понимаю почему ((( ну да буду разбираться.
Цитата Gonarh @
Цитата D-G @ Сегодня, 20:15
Замечание мало чем отличается от ошибки.

Не верно.


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

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

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

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

Добавлено


Спасибо, буду читать

Автор: Gonarh 10.04.19, 18:12
По поводу сохранения, два пути либо в БД, либо в куках, у каждого свои плюсы и минусы.

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

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

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)