Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.202.45] |
|
Сообщ.
#1
,
|
|
|
Продолжаю вопросы новичка. Есть пхп файл с формой для смены цвета бэкграунда. Использую метод 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): <?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> |
Сообщ.
#2
,
|
|
|
В кавычки взять.
|
Сообщ.
#3
,
|
|
|
Цитата domencom @ В кавычки взять. Спасибо, замучался уже, теперь все работает. Но теперь возникла похожая проблема. Если применять цвета, в том числе и дефолтный, ошибок не возникает. Если заново загрузить страницу, то возникают следующие ошибки: 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']"; выбивает другую ошибку: Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) |
Сообщ.
#4
,
|
|
|
Извращенец
<?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> |
Сообщ.
#5
,
|
|
|
В массиве $_post нет данных так как ты не отправил форму а зашёл через get запрос. Учи азы http протокола
|
Сообщ.
#6
,
|
|
|
Цитата Gonarh @ Извращенец Надеюсь со временем я стану более опытным "извращенцем" ))) Но в вашем примере осталась та же проблема с переменной color, только в строке 4 $ololo = $_POST['color']; Добавлено Цитата domencom @ В массиве $_post нет данных так как ты не отправил форму а зашёл через get запрос. Учи азы http протокола В связи с этим у меня два вопроса: 1. Можно ли это как-то побороть? И как? 2. Тыкнете, пжл, что конкретно нужно почитать по этому вопросу. Может даже не столько тему, сколько источник, в котором это разжевано. Хотя я, конечно же попробую и сам поискать и почитать |
Сообщ.
#7
,
|
|
|
Цитата D-G @ Но в вашем примере осталась та же проблема с переменной color, только в строке 4 $ololo = $_POST['color']; Нет никакой проблемы, всё работает. Видимо ты даже не проверял Добавлено Цитата D-G @ Тыкнете, пжл, что конкретно нужно почитать по этому вопросу. Куки и сессии |
Сообщ.
#8
,
|
|
|
Цитата Gonarh @ Нет никакой проблемы, всё работает. Видимо ты даже не проверял Вообще-то проверял. Возможно не полностью сформулировал. После закрытия страницы при первом заходе, либо при нажатии на энтер в адресной строке, когда страница уже загружена, выскакивает Notice: Undefined index: color on line 4 Цитата Gonarh @ Куки и сессии А как это касается первого захода на страницу? Ведь при первом заходе какие могут быть куки? |
Сообщ.
#9
,
|
|
|
Цитата . Тыкнете, пжл, что конкретно нужно почитать по этому вопросу https://habr.com/ru/post/215117/ https://ruseller.com/lessons.php?rub=28&id=1726 |
Сообщ.
#10
,
|
|
|
Цитата D-G @ Вообще-то проверял. Возможно не полностью сформулировал. После закрытия страницы при первом заходе, либо при нажатии на энтер в адресной строке, когда страница уже загружена, выскакивает Notice: Undefined index: color on line 4 Нотис это не ошибка. <?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> |
Сообщ.
#11
,
|
|
|
Цитата Gonarh @ Нотис это не ошибка. Замечание мало чем отличается от ошибки. неприятно когда оно выскакивает. Но я только-только исправил свой вариант и ваш переделал так же как вы сделали ))) Но никак не могу придумать как в вашем варианте сделать вывод надписи "Дефолтный цвет" если набрана абракадабра. В моем извращенческом варианте эта надпись есть. Вот как он теперь выглядит: <?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> И поскольку с массивами у меня ещё сложнее, то как раз хотел поинтересоваться, как бы вывести нужную надпись и в вашем варианте? Кстати, случайно сделал вариант где применяются любые цвета (на основе вашего варианта) |
Сообщ.
#12
,
|
|
|
Цитата D-G @ Замечание мало чем отличается от ошибки. Не верно. Добавлено Цитата D-G @ В моем извращенческом варианте... случайно сделал вариант где применяются любые цвета Использование ничем не ограниченного ввода пользователя обернётся как минимум инжектом, как максимум шеллом с правами запущенного веб-сервиса, а то и рута. Добавлено Цитата D-G @ И поскольку с массивами у меня ещё сложнее, то как раз хотел поинтересоваться, как бы вывести нужную надпись и в вашем варианте? if (strlen($color) == 0) { echo "Default color<br>"; $color = $colors[0]; } |
Сообщ.
#13
,
|
|
|
Спс, так все работает. Правда не совсем понимаю почему ((( ну да буду разбираться.
Цитата Gonarh @ Цитата D-G @ Сегодня, 20:15 Замечание мало чем отличается от ошибки. Не верно. Ну я то понимаю, что замечание - это не ошибка, но все же неприятно, когда выскакивает малейшее предупреждение. Цитата Gonarh @ Использование ничем не ограниченного ввода пользователя обернётся как минимум инжектом, как максимум шеллом с правами запущенного веб-сервиса, а то и рута. Так этот вариант срабатывал только на названия (кодировку) цветов. Если вводилась абракадабра, в том числе и "root", то заливался черный цвет. Да и не выложил я его, так сказать делился своими шагами. Интересно, как-то сохранить результат ввода цвета можно, так чтоб при новом открытии страницы грузился именно тот цвет, который был применен последним? Добавлено А это типа отметка, что вопрос решен, потому что основной вопрос решен благодаря вам. Ещё бы теперь с сохранением разобраться. Или для этого нужно новую тему начинать? Добавлено Спасибо, буду читать |
Сообщ.
#14
,
|
|
|
По поводу сохранения, два пути либо в БД, либо в куках, у каждого свои плюсы и минусы.
Добавлено Цитата D-G @ Ну я то понимаю, что замечание - это не ошибка, но все же неприятно, когда выскакивает малейшее предупреждение. Предупреждение это варнинг. Нотис это просто сообщение. Это разные вещи. В любом случае надо анализировать что пишет интерпретатор, и чем это чревато и при каких ситуациях. |