[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Цикл foreach и вывод из базы
Stasonix
суть скрипта проста, берется строка цветов (!названия), explode'ом разбивается в массив, потом из таблицы циклом foreach выводится на страницу, уже в rgb-формате в качестве фона тегу span:
	 
$res["colors"]="white,green,black,yellow,orange";
$color = explode(",",$res["colors"]);
foreach ($color as $i) {
$sql_rgb = "SELECT `rgb` FROM `identcolor` WHERE `name`='".$i."'";
$query_rgb = mysql_query($sql_rgb);
$res_rgb = mysql_fetch_array($query_rgb);
echo "<li><span style='background-color:".$res_rgb["rgb"]."; display: none'>".$i."</span></li>";
}

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



Спустя 2 минуты, 41 секунда (18.11.2011 - 23:49) lans8097 написал(а):
Ну кабы спан и не будит показываться display: none'

Спустя 2 минуты, 42 секунды (18.11.2011 - 23:52) Stasonix написал(а):
Цитата (lans8097 @ 18.11.2011 - 20:49)
Ну кабы спан и не будит показываться display: none'

у меня hover забит под это дело, т.е. display: none там и должен быть, когда на иконку навожу мышкой, то все теги ли должны появиться, вот когда навожу, то появляется только 1-ый li span, с фоном, остальное все без фона идет. Возможно в цикле что-то не так?
доп. цикл выводит названия цвета, но вот фон не задает, т.е. получается:
<li><span style='background-color: rgb(...)'>white</span></li>
<li><span>
green</span></li>
<li><span>
black</span></li>
<li><span>
yellow</span></li>
<li><span>
orange</span></li>

Спустя 12 минут, 47 секунд (19.11.2011 - 00:05) dadli написал(а):
Stasonix
так работает?


$res["colors"]="white,green,black,yellow,orange";
$mas = "'".preg_replace("#,#","','",$res["colors"])."'";

$sql_rgb = "SELECT `rgb` FROM `identcolor` WHERE `name` IN(".$mas.") ";
$query_rgb = mysql_query($sql_rgb);
$res_rgb = mysql_fetch_array($query_rgb);
echo "<li><span style='background-color:".$res_rgb["rgb"]."; display: none'>".$i."</span></li>";

Спустя 6 минут, 40 секунд (19.11.2011 - 00:11) Stasonix написал(а):
неа, цикл нужен, я добавил цикл:

$res["colors"]="white,green,black,yellow,orange";
$mas = "'".preg_replace("#,#","','",$res["colors"])."'";
$sql_rgb = "SELECT `rgb`,`name` FROM `identcolor` WHERE `name` IN($mas) ";
$query_rgb = mysql_query($sql_rgb);
while ($res_rgb = mysql_fetch_array($query_rgb)){
echo "<li><span style='background-color:".$res_rgb["rgb"]."; display: none'>".$res_rgb["name"]."</span></li>";
}

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

Спустя 5 минут, 25 секунд (19.11.2011 - 00:17) killer8080 написал(а):
Stasonix
с display: none спанов по определению не может быть видно, и ховеры ту не помогут wink.gif

Спустя 4 минуты, 24 секунды (19.11.2011 - 00:21) Stasonix написал(а):
Цитата (killer8080 @ 18.11.2011 - 21:17)
Stasonix
с display: none спанов по определению не может быть видно, и ховеры ту не помогут wink.gif

при hover display: none устанавливается в display: block, не смотрите на то что там display: none, в том же firebug'e нет такого понятия.

Спустя 6 минут, 2 секунды (19.11.2011 - 00:27) Stasonix написал(а):
вот на всякий случай табличка - identcolor.sql.html может кто-то осилит.

Спустя 2 минуты, 45 секунд (19.11.2011 - 00:30) killer8080 написал(а):
Stasonix
display: none означает что объект исключен из рендеринга страницы, а раз его нет, то и никакого ховера быть не может.
К тому же спан это не блочный, а строковый элемент. Если нужен блок, тогда и используй блочные элементы, например див.

Спустя 2 минуты, 29 секунд (19.11.2011 - 00:32) Stasonix написал(а):
Цитата (killer8080 @ 18.11.2011 - 21:30)
Stasonix
display: none означает что объект исключен из рендеринга страницы, а раз его нет, то и никакого ховера быть не может.
К тому же спан это не блочный, а строковый элемент. Если нужен блок, тогда и используй блочные элементы, например див.

я не говорил что hover стоит именно на задисплейноуненый спан, hover стоит на ul и открывает спаны.

Спустя 1 минута, 20 секунд (19.11.2011 - 00:34) killer8080 написал(а):
Ещё вопрос, а зачем тебе преобразовывать цвета в ргб коды? У тебя же в твоей таблице все цвета стандартные.

Спустя 1 минута, 9 секунд (19.11.2011 - 00:35) Stasonix написал(а):
Цитата (killer8080 @ 18.11.2011 - 21:34)
Ещё вопрос, а зачем тебе преобразовывать цвета в ргб коды? У тебя же в твоей таблице все цвета стандартные.

Спроси это у Internet Explorer и всяких fix-plugin'ов к нему "любимому".

Спустя 2 минуты, 42 секунды (19.11.2011 - 00:38) killer8080 написал(а):
Цитата (Stasonix @ 19.11.2011 - 00:35)
Спроси это у Internet Explorer и всяких fix-plugin'ов к нему "любимому".

Да ну, осел конечно тупой, но не настолько, стандартные цвета он знает. С каким цветом у тебя проблемы в IE?

Спустя 6 минут, 21 секунда (19.11.2011 - 00:44) dadli написал(а):
Stasonix
$res["colors"]="white,green,black,yellow,orange";
$mas = "'".preg_replace("#,#","','",$res["colors"])."'";

$res = mysql_query("SELECT `rgb`,`name` FROM `identcolor` WHERE `name` IN (".$mas.") ");

while($row = mysql_fetch_row($res)) {
echo "<li><span style='background-color:#".$row[0]."'>".$row[1]."</span></li>";
}



получаем имя цвета и в бекграунде тот же цвет, но я здес display: none не написал чтоб било видна, ето хотел?

Спустя 2 минуты, 31 секунда (19.11.2011 - 00:46) Stasonix написал(а):
со всеми, я исп. плагин для стилизации меню css3pie, во всех браузерах все норм, в IE8 цвет пропадает, я поалертил, вышло так что с нормальными объявлениями цвета он работать не хочет, алерт выдает transparent, когда же ввожу rgb код, то все в норме, увы, показать не могу, все на локалке.

Спустя 11 минут, 9 секунд (19.11.2011 - 00:58) killer8080 написал(а):
Stasonix
не знаю что ты там делал, но ie8 прекрасно поддерживает задание цвета по названию, так же как и все остальные браузеры. Не видя кода трудно что либо советовать, но уверен что проблема в самом скрипте, а не в кривой поддержке ослом css.
К тому же учитывая что там всего 14 цветов, не проще их сразу в массив запихнуть, и не грузить бд ненужными запросами?

Спустя 3 минуты, 59 секунд (19.11.2011 - 01:02) Stasonix написал(а):
имелось в виду вот так наверное:

$mas = "'".preg_replace("#,#","','",$res["colors"])."'";
$res = mysql_query("SELECT `rgb`,`name` FROM `identcolor` WHERE `name` IN (".$mas.") ");
while($row = mysql_fetch_row($res)) {
echo "<li><span style='background-color:".$row[0]."; display:none'>".$row[1]."</span></li>";
}

без диеза, выводит 1 цвет только, а может все дело в том что у меня запрос в запросе?см.
$sql = "SELECT `colors`...."; $query = mysql_query($sql);
while ($res = mysql_fetch_assoc($query)){
// и тут снова идет запрос к бд с этим цветовыбором (или перекоддингом, как хотите)

$mas = "'".preg_replace("#,#","','",$res["colors"])."'";
$res = mysql_query("SELECT `rgb`,`name` FROM `identcolor` WHERE `name` IN (".$mas.") ");
while($row = mysql_fetch_row($res)) {
echo "<li><span style='background-color:".$row[0]."; display:none'>".$row[1]."</span></li>";
}
}

поэтому может все по 1-му выводится? Я думал так сработает.

Спустя 3 минуты, 24 секунды (19.11.2011 - 01:05) killer8080 написал(а):
Stasonix
так у тебя же одна переменная $res в обоих циклах blink.gif
конечно так работать не будет.
И все же не разумно тут БД использовать.

Спустя 2 минуты, 31 секунда (19.11.2011 - 01:07) Stasonix написал(а):
Цитата (killer8080 @ 18.11.2011 - 22:05)
Stasonix
так у тебя же одна переменная $res в обоих циклах blink.gif
конечно так работать не будет.
И все же не разумно тут БД использовать.

я от руки просто написал, поэтому так получилось, то что у меня на самом деле в исходнике вы в 1-м посте читали.

Спустя 8 минут, 49 секунд (19.11.2011 - 01:16) Stasonix написал(а):
попробую извлечь все цвета (абсолютно все) из таблицы вне цикла в какой-нть массив, потом тем же foreach перебрать, но все же...

Спустя 3 минуты, 21 секунда (19.11.2011 - 01:20) killer8080 написал(а):
Stasonix
убери display: none и все будет отображаться
Кстати, покажи как ты задаешь стиль с ховер.

Спустя 5 минут, 18 секунд (19.11.2011 - 01:25) Stasonix написал(а):
ховер тут не при чем вообще и display: none тут тоже не при чем, обычный
$('ul').hover(function(){
$(this).find('span').show();
});

не в javascript'e дело, еще раз говорю, 100% дело в цикле, точнее в запросе, в котором еще один запрос.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.