Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.80.24.244] |
|
Сообщ.
#1
,
|
|
|
Ещё вопрос от новичка.
Есть форма с несколькими полями. Данные обрабатываются методом $_POST и empty проверяет пустые значения. Все каждое поле обрабатывается отдельной "проверкой". Есть желание объединить в массив все эти проверки. Вот изначальный код: <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <?php 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 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="indexM.php" method="post" enctype="multipart/form-data"> цвет фона для БОДИ:<input name="bodystyle" value="" type="text"> <input value="сменить" type="submit"> </form> <form action="indexM.php" method="post" enctype="multipart/form-data"> цвет фона для Квадрата:<input name="wpriz[wcolor]" value="" type="text"><br> цвет текста внутри квадрата:<input name="wpriz[wtextcolor]" value="" type="text"><br> ширина квадрата:<input name="wpriz[wwidth]" value="" type="text"> <input value="сменить" type="submit"> </form> Вот как пробую сделать: if (isset($_POST['wpriz'])){$wprizs=array($_POST['wpriz']); foreach ($_POST['wpriz'] as $key => $value) {echo "$key $value <br>";} /* чисто для проверки присваивает или нет и все применяется, отчет вводится*/ } elseif (empty($_POST['wpriz'])){ $wprizs=array($_POST['wpriz']); /* Notice: Undefined index: wpriz */ echo "$wprizs"; /* Тут проверка не проходит, ругается на эту строку Notice: Array to string conversion Array */ } echo '<style type="text/css";> .wrap {background:'.$wcolor.'; color:'.$wtextcolor.'; width:'.$wwidth.'; } </style>'; Пробовал кусок с empty сделать вот так: elseif (empty($wprizs)){ $wcolor=''; $wtextcolor=''; $wwidth=''; } echo '<style type="text/css";> .wrap {background:'.$wcolor.'; /* ругается на эти строки */ color:'.$wtextcolor.'; /* ругается на эти строки */ width:'.$wwidth.'; /* ругается на эти строки */ } </style>'; Тоже ругается. |
Сообщ.
#2
,
|
|
|
Цитата D-G @ foreach ($_POST['wpriz'] as $key => $value) Вообще то, foreach - перебор массива. Перебирая $_POST[.... следовало бы понимать что и как в нем размещено. Для изучения $_POST можно заюзать var_dump($_POST); |
Сообщ.
#3
,
|
|
|
Извращенец
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='';} Заменить на $variables = array('wcolor', 'wtextcolor', 'wwidth'); foreach ($variables as $value) { $$value = ''; if (isset($_POST[$value])) $$value = $_POST[$value]; } |
Сообщ.
#4
,
|
|
|
foreach ($_POST as $key=>$value) { if (!empty($value)) {echo $key.' = '.$value.'<br>';} else {echo $key.' = none<br>';} } |
Сообщ.
#5
,
|
|
|
Цитата Gonarh @ Извращенец Ну мы уже говорили с вами на эту тему ))) потому и пробую переделать в масив Ваш вариант работает, но в таком виде: $variables = array('wcolor', 'wtextcolor', 'wwidth'); foreach ($variables as $value) { $$value = ''; if (isset($_POST[$value])) $$value = $_POST[$value]; elseif (empty($_POST[$value])){ $value=''; } } Но мне пришлось ещё заменить в форме (видимо забыл сакцентировать внимание, на вот этом: <input name="wpriz[wcolor]"). Мне казалось, что так короче, особенно, если ещё добавлять поля с инпутами Добавлено Цитата Руслан @ foreach ($_POST as $key=>$value) { if (!empty($value)) {echo $key.' = '.$value.'<br>';} else {echo $key.' = none<br>';} } Возможно я не так понял, но сделал вот так: if (isset($_POST['wpriz'])){$wprizs=array($_POST['wpriz']); foreach ($_POST['wpriz'] as $key => $value) { if (!empty($value)) {echo $key.' = '.$value.'<br>';} else {echo $key.' = none<br>';} } } Получилось вот что: wcolor = green wtextcolor = none wwidth = none И ещё при обновлении страницы и после ввода данных в форму выдает нотис: Notice: Undefined variable: wcolor on line 33 Notice: Undefined variable: wtextcolor on line 34 Notice: Undefined variable: wwidth on line 35 |
Сообщ.
#6
,
|
|
|
Цитата D-G @ Получилось вот что: Почему вы упорно игнорируете необходимость задать цвет по умолчанию? - на случай, когда одмин ни чего не передал. |
Сообщ.
#7
,
|
|
|
Цитата Руслан @ Почему вы упорно игнорируете необходимость задать цвет по умолчанию? - на случай, когда одмин ни чего не передал. По умолчанию берется из файла стилей, для этого в моем я пробовал это сделать вот так elseif (empty($wprizs)){ $wcolor=''; $wtextcolor=''; $wwidth=''; } в вашем варианте я думал, что это выполняет эта строка if (!empty($value)) {echo $key.' = '.$value.'<br>';} else {echo $key.' = none<br>';} Добавлено Цитата Gonarh @ $$value = ''; if (isset($_POST[$value])) $$value = $_POST[$value]; А почему у вас в этих строках value стоит с двумя долларами "$$"? |
Сообщ.
#8
,
|
|
|
Цитата D-G @ По умолчанию берется из файла стилей, для этого в моем я пробовал это сделать вот так Присвоить пустые значения = взять из файла стилей? С чего бы?! |
Сообщ.
#9
,
|
|
|
Цитата Руслан @ Присвоить пустые значения = взять из файла стилей? С чего бы?! Прочитал про приоритеты стилей, там сказано, что применяется пользовательский, а если в нем пустое значение, то применяется основной стиль, вот и поставил пустое значение, и оно работает. |
Сообщ.
#10
,
|
|
|
Цитата D-G @ Прочитал про приоритеты стилей, там сказано, что применяется пользовательский, а если в нем пустое значение, то применяется основной стиль, вот и поставил пустое значение, и оно работает. Изначальная логика применения файла стилей - не связана с изначальной логикой работы PHP. Где в PHP вы установили стиль по умолчанию(который пробуете присвоить в любом случае) - я не вижу. И php интерпретатор не видит, выдавая "Notice: Undefined variable:". |
Сообщ.
#11
,
|
|
|
Цитата Руслан @ Где в PHP вы установили стиль по умолчанию(который пробуете присвоить в любом случае) - я не вижу вот эта строка задает стиль echo '<style type="text/css";></style> Все, что между тегом стайл применяется. У меня вот код: echo '<style type="text/css";> .wrap {background:'.$wcolor.'; background-image:'.$wbgimg.'; color:'.$wtextcolor.'; width:'.$wwidth.'; } </style>'; |
Сообщ.
#12
,
|
|
|
Цитата D-G @ echo '<style type="text/css";> .wrap {background:'.$wcolor.'; background-image:'.$wbgimg.'; color:'.$wtextcolor.'; width:'.$wwidth.'; } </style>'; По всей видимости, когда переменная $wcolor не установлена, вываливается ваш Notice: Undefined variable: wcolor on line 33. т.е. вы её всё же не установили, но пробуете её куда-то применить... |
Сообщ.
#13
,
|
|
|
Ладно, вот код-аналогия, для варианта с массивами. html урезал.
$HTMLSettings['user_bg_color']=''; $HTMLSettings['user_text_color']=''; $HTMLSettings['user_width']=''; if (isset($_POST['SetSetting'])) { foreach ($_POST['SetSetting'] as $key=>$value) { if (isset($HTMLSettings[$key])) {$HTMLSettings[$key]=$value;} } } echo 'цвет фона для Квадрата:<input name="SetSetting[user_bg_color]" value="'.$HTMLSettings['user_bg_color'].'" type="text"><br> Фоновое изображение: <input name="SetSetting[user_text_color]" value="'.$HTMLSettings['user_text_color'].'" type="text"><br>' Добавлено Цитата D-G @ А почему у вас в этих строках value стоит с двумя долларами "$$"? пример: $x='test'; $$x='you'; //здесь появилась переменная $test, которой присвоено значение 'you'. echo $x.'<hr>'; echo $test.'<hr>'; |
Сообщ.
#14
,
|
|
|
А может кто-то допилить до рабочего состояния мой вариант, с учестом, что <input name="wpriz[wcolor]", <input name="wpriz[wtextcolor]", <input name="wpriz[wwidth]"? Такая форма потому что на мой взгляд новичка в случае добавления переменных в массиве придется много чего добавлять и будет длинная строка по типу: array('1','2','3','4','5','6','7','8','9', и тд) Или мой вариант абсолютно безнадежен? Если безнадежен, то пжл, поясните почему?
if (isset($_POST['wpriz'])){$wprizs=array($_POST['wpriz']); foreach ($_POST['wpriz'] as $key => $value) {echo "$key $value <br>";} /* чисто для проверки присваивает или нет и все применяется, отчет выводится*/ var_dump($_POST['wpriz']); /* тоже чисто для проверки присваивает или нет и все применяется, отчет выводится*/ } elseif (empty($_POST['wpriz'])){ $wprizs=array($_POST['wpriz']); /* Notice: Undefined index: wpriz */ echo "$wprizs"; /* Тут проверка не проходит, ругается на эту строку Notice: Array to string conversion Array */ } echo '<style type="text/css";> .wrap { background:'.$wcolor.'; /* При нажатии на "сменить выдает Undefined variable: wcolor on line 40, тоесть на эту строку */ color:'.$wtextcolor.'; /* При нажатии на "сменить выдает Undefined variable: wtextcolor on line 41, тоесть на эту строку */ width:'.$wwidth.'; /* При нажатии на "сменить выдает Undefined variable: wwidth on line 42, тоесть на эту строку */ } </style>'; При нажатии на "Сменить" выдает следующее: wcolor green wtextcolor wwidth array(3) { ["wcolor"]=> string(5) "green" ["wtextcolor"]=> string(0) "" ["wwidth"]=> string(0) "" } Notice: Undefined variable: wcolor on line 40 Notice: Undefined variable: wtextcolor on line 41 Notice: Undefined variable: wwidth on line 42 Вижу, что $key присваивает правильно, из квадратных скобок конструкции <input name="wpriz[]" и $value тоже. string - это количество символов в $value. Но как это перекинуть в стиль? Может нужно подправить стиль? Но опять же как? |
Сообщ.
#15
,
|
|
|
Цитата Руслан @ Ладно, вот код-аналогия, для варианта с массивами. html урезал. Кстати, только сейчас увидел прокрутку в вашем примере, и увидел как вы поменяли инпуты. Ваш вариант работает, спасибо за него. Только я в инпутах убрал значение value, так на мой взгляд удобней заполнять поле. |
Сообщ.
#16
,
|
|
|
Цитата D-G @ А может кто-то допилить до рабочего состояния мой вариант Чёт вы совсем запутали. Вы же хотели научиться программировать? Или уже всё, нужно, что бы за вас написали? Цитата D-G @ в случае добавления переменных в массиве придется много чего добавлять и будет длинная строка по типу Извиняюсь, а можете кратким русским языком пояснить(и указать строку кода, формирующую значение) - откуда ваша программа узнает значения переменных, которые вы подставляете в css: 1. в случае, когда из браузера не прислали нового значения? 2. в случае, когда из браузера прислали новое значение? Вопрос возник, т.к. похоже, часть вашего кода работает на чистой телепатии! А древний php интерпретатор, судя по всему не может корректно справится с такого рода нагрузкой... Скрытый текст Цитата D-G @ string - это количество символов в $value Не. String это тип данных, в скобках количество символов. Добавлено Цитата D-G @ Кстати, только сейчас увидел прокрутку в вашем примере, и увидел как вы поменяли инпуты. Ваш вариант работает, спасибо за него. |
Сообщ.
#17
,
|
|
|
Цитата Руслан @ Или уже всё, нужно, что бы за вас написали Нет конечно. Но на рабочих примерах можно учится и видеть, в каком месте неправильно свернул. Потому и просил именно допилить, а не написать полностью свой. Цитата Руслан @ откуда ваша программа узнает значения переменных, которые вы подставляете в css: 1. в случае, когда из браузера не прислали нового значения? 2. в случае, когда из браузера прислали новое значение? Может я опять же, чего-то не понимаю, но мне казалось, что когда мой index.php подгружает данные из admin.php (файл, где меняются настройки), то он автоматом подгружает и "зарезервированные" в нем стили для различных элементов (классов, айди и прочее). Эти куски стиля прописываются с помощью "echo" в файле admin.php. Его код я уже писал, вот он: echo '<style type="text/css";> .wrap {background:'.$wcolor.'; background-image:'.$wbgimg.'; color:'.$wtextcolor.'; width:'.$wwidth.'; } </style>'; Ну а там уже идет речь о приоритетах, которые я вычитал по подсказке JoeUser про !important. Может я что-то не правильно делаю, но особо об этом никто не говорит, а оно работает, вот я и не заморачиваюсь. Но понял, что это в любом случае до первой перезагрузки страницы. Или даже не обязательно до первой перезагрузки. Если я динамически добавляю(меняю) класс, у которого хочу поменять свойство, то не применяется, поскольку страница index.php уже была загружена без этих "новых" классов. Так что в любом случае вы правы, что нужно где-то сохранять, напр, в том же css-файле. Хотя чисто для тренировки почти полностью написал тот "инструмент" для мальчика Жени со своим вариантом (в нем есть часть "статичных" классов, которые грузятся сразу и часть "динамичных", которые можно выбирать из списка классов, в котором хочу поменять свойство и вот уже в нем пробую на ваших подсказках писать в css. Но пока есть вопросы. Сейчас заткнулся на чтении файлов и каталогов. |