Подскажите как реализовать

FRIE

Новичок
Подскажите как реализовать

есть скрипт который выводит ссылки на животных по выбранной категории

PHP:
<?php
require ("scripts/connect_db.php");
$result = mysql_query("SELECT animals FROM animals WHERE category_id='$category'",$db);

if (!$result)
{
echo "zapros ne proshel";

}
if (mysql_num_rows($result) > 0 )
{
$myrow = mysql_fetch_array($result);
do
{
printf ("<div id='white'>
<div id='animals'>%s</div>
</div>", $myrow["animals"]);


}
while ($myrow = mysql_fetch_array($result));

}
else echo "v tablice net zapisei";


?>
я хочу чтобы стиль фона этого списка был "зеброй", первая полоска белая вторая желтая третья белая четвертая желтая и так далее.. Я думал что можно вывести список с ссылками таким способом что первая строчка в одном <div> вторая в другом, но поковырявшись в функции do while
PHP:
do
{
printf ("<div id='white'>
<div id='animals'>%s</div>
</div>", $myrow["animals"]);


}
while ($myrow = mysql_fetch_array($result));
понял что работает все так - printf печатает ссылки, потом идет while, смотрит что еще ссылки есть и возвращяет на printf, и вмешаться в этот процесс нельзя с помощью if else (внутри массива функции do {} ) , а если сделать так
PHP:
if {
do
{
printf ("<div id='white'>
<div id='animals'>%s</div>
</div>", $myrow["animals"]);


}
}
else {
do
{
printf ("<div id='white'>
<div id='animals'>%s</div>
</div>", $myrow["animals"]);


}
}
while ($myrow = mysql_fetch_array($result));
(это пример , точный код не буду писать , это чтобы был смысл понятен)

то выводимые данные дублируются

поскажите пожалуйста как реализовать вывод списка ссылок попеременно с разными дивами?
 

A1x

Новичок
во-первых не надо так использовать атрибут id потому что его значение должно быть всегда уникально для всего документа.
лучше здесь использовать class

PHP:
$c = 0;
while ($myrow = mysql_fetch_array($result)) {
printf('<div class="%s">%s</div>', $c%2 ? 'white' : 'black', $myrow["animals"]);
$c++;
}
 

FRIE

Новичок
Автор оригинала: A1x
во-первых не надо так использовать атрибут id потому что его значение должно быть всегда уникально для всего документа.
лучше здесь использовать class

PHP:
$c = 0;
while ($myrow = mysql_fetch_array($result)) {
printf('<div class="%s">%s</div>', $c%2 ? 'white' : 'black', $myrow["animals"]);
$c++;
}
спасибо огромное !! это работает)))))))

-~{}~ 17.08.09 16:27:

а если я хочу 3 полоски то тогда как это сделать ? и что означает этот параметр $c%2 ? ?
 

Фанат

oncle terrible
Команда форума
к вопросу о пользе готового кода. и о красоте тернарного оператора, ага.

оператор % возвращает остаток от деления.

чтобы сделать универсальное количество столбцов, надо завести счетчик. и в зависимости от значения выставлять класс

плюс желательно узнать про шаблоны, чтобы все вычисления производить при получении данных, и только потом выводить
 

A1x

Новичок
конечно простите за готовый код, как здесь не принято. Может стоило бы и попинать ТСа. Если человек настроен учиться он будет учиться и на готовом коде, и возможно это даже будет быстрее для всех
 

Фанат

oncle terrible
Команда форума
подход "а я такой удалой, могу написать в одну строчку" и код, по которому можно чему-то научиться - понятия несовместимые.

в учебном коде должен читаться алгоритм.
и должны отсутствовать не относящиеся к вопросу детали
 

FRIE

Новичок
Автор оригинала: *****
к вопросу о пользе готового кода. и о красоте тернарного оператора, ага.

оператор % возвращает остаток от деления.

чтобы сделать универсальное количество столбцов, надо завести счетчик. и в зависимости от значения выставлять класс

плюс желательно узнать про шаблоны, чтобы все вычисления производить при получении данных, и только потом выводить
я так понял что сдесь $c%2 ? 'white' : 'black' переменная $c сравнивается с двойкой и если получается единичка то первый вариант а если двойка т о второй, а вот как туда вставить счетчики ? дайте пожалуйста ссылки с примерами где можно посмотреть !

а на счет шаблонов это вы имеете ввиду инклюдить в файл скрипты? если нет то дайте пожалуйста ссылку почитать о том что вы имеете ввиду =)

-~{}~ 17.08.09 17:16:

Автор оригинала: A1x
конечно простите за готовый код, как здесь не принято. Может стоило бы и попинать ТСа. Если человек настроен учиться он будет учиться и на готовом коде, и возможно это даже будет быстрее для всех
спасибо за готовый код, я только по готовым и могу учиться, разбираю каждый чтобы понять как это работает =))
 

Фанат

oncle terrible
Команда форума
переменная $c не сравнивается с двойкой, а делится на двойку.
а сравнивается не переменная $c, а результат деления

счетчик вставляется не "туда", а в цикл. отдельной строчкой
а "туда" подставляется результат сравнения счетчика с нужной цифрой
 

FRIE

Новичок
Автор оригинала: A1x
во-первых не надо так использовать атрибут id потому что его значение должно быть всегда уникально для всего документа.
лучше здесь использовать class

PHP:
$c = 0;
while ($myrow = mysql_fetch_array($result)) {
printf('<div class="%s">%s</div>', $c%2 ? 'white' : 'black', $myrow["animals"]);
$c++;
}
кстати при такой конструкции сначала while а потом printf у меня первое значение из базы не выводится, оно кудато пропадает, в списке появляются все значения начиная со второго, почему так?
 

Фанат

oncle terrible
Команда форума
потому что код, который у тебя в первом сообщении, ты разумеется, разобрал, и понял, как он работает
 

A1x

Новичок
FRIE а перед while ты ничего такого не делаешь? что ты вообще делаешь перед while ?
 

FRIE

Новичок
Автор оригинала: *****
потому что код, который у тебя в первом сообщении, ты разумеется, разобрал, и понял, как он работает
while ($myrow = mysql_fetch_array($result)) {
printf('<div class="white">%s</div>', $myrow["animals"]);

}


вот так если написать то тоже выводятся значения со второго

все что я не понял так это вот эту строчку $c%2 ? 'white' : 'black' потомучто не нашел описания нигде,если можете скажите где почитать

-~{}~ 18.08.09 17:13:

Автор оригинала: A1x
FRIE а перед while ты ничего такого не делаешь? что ты вообще делаешь перед while ?
if (mysql_num_rows($result) > 0 )
{
$myrow = mysql_fetch_array($result);
 

Фанат

oncle terrible
Команда форума
не писать больше слова "я разбираю каждый код чтобы понять как это работает" как не соответствующие действительности.
а писать "леплю все что мне скажут - лишь бы работало"

потому что в приведенном тобой коде черным по белому написано, куда девается "первая строка". И ты этот кусок кода сейчас привел в ответ A1x-у.

И до сих пор непонятно, куда девается? И что делает функция mysql_fetch_array ты тоже "не разобрал"?
 

Фанат

oncle terrible
Команда форума
Вообще, изначально надо было прочитать исходный пост.
И вместо готового кода, надо было задать автору вопрос:
вмешаться в этот процесс нельзя с помощью if else
с чего это ты взял?

-~{}~ 18.08.09 17:36:

То есть, поймать его за мысль (которая была!), и направить ее в нужное русло. А не пичкать готовым, которое он, конечно, никогда не разберет, поскольку алгоритм всегда первичен, а код - вторичен. И видеть надо алгоритм сначала, а только потом - код.

В противном случае мы имеем конструкции типа htmlspecialchars(mysql_escape_string "патамушта все так делают"
 

A1x

Новичок
если у человека гуманитарный склад ума я не знаю что ему делать - везде одни компьютеры...
только в поэты
 

Фанат

oncle terrible
Команда форума
Да не. Если человек не освоил циклы, то это еще не говорит о гуманитарном складе. Тем более, что пара правильных мыслей у него была.
В общем, я не хочу никого обидеть. Думаю, автору надо действительно внимательно разбираться в используемом коде. А предлагаемый код должен быть попроще, и, где возможно, пусть это будет псевдокод, не позволяющий копипаст, а требующий понимания алгоритма.
Как-то так.
 

WBS

Новичок
Автор оригинала: A1x
PHP:
$c = 0;
while ($myrow = mysql_fetch_array($result)) {
printf('<div class="%s">%s</div>', $c%2 ? 'white' : 'black', $myrow["animals"]);
$c++;
}
Вот еще вариант без вычисления остатка от деления:
PHP:
$c = 0;
while ($myrow = mysql_fetch_array($result))
  printf('<div class="%s">%s</div>', ($c=1-$c) ? 'white' : 'black', $myrow["animals"]);
 
Сверху