[HELP] Цикл do while, или просто while

Статус
В этой теме нельзя размещать новые ответы.

saylar_06

Создатель
Регистрация
7 Мар 2009
Сообщения
42
Реакции
0
Приветствую всех!

Вот пишу тестовую функцию и возникла проблемка :( (от нехватки знаний)

PHP:
function get_page() {
	global $index, $num;
	
	if ($index == "custom") {
		$one = "SELECT * FROM topics ORDER BY `id` DESC LIMIT $num";
		$two = mysql_query($one);
		$th = mysql_fetch_assoc($two);
		
		$i = 1;
		do {
		 $i++;	 
		 if ($i%2 == 0) {
		 	$r = " first";
			$y = "";
		 } else {
		   	$r = "";
			$y = "<div class=\"clear\"></div>";
		   }
		 printf("
		         <article class=\"post column%s\">
          <div class=\"text\">
			      <h2><a href=\"\" rel=\"bookmark\">%s</a></h2>
			      <div class=\"date\" title=\"2 месяца 20 дней назад\">7 сентября 2010 г.</div>
				    <div class=\"entry\">
							ws ... <a href=\"\">читать полностью &raquo;</a></p>
			      </div>
			      <div class=\"info\"><div>рубрика <a href=\"\" title=\"\" rel=\"category tag\"></a> | <a href=\"\" title=\"\">комментариев: 0</a></div></div>
			    </div>
        </article>%s",$r,$th["title"],$y);
		} while($th = mysql_fetch_assoc($two));
	} elseif ($index == "default") {
	  	echo "Функция отсутствует рекомендуем воспользоватся функцией <b>custom</b>";
	  } else {
	    echo "Переменная index (в файле conf.php) имеет некорректное значение!";
		}
}

И так... писал как мог (на что хватает знаний) мб вы подумаете что функция написанна колхозно и не аккуратно, но все же это раздел для новичков (к стати принимаются во внимания ваше исправление функции :) )

В общем суть проблемы такова: Если вы поняли, то знаете что функция выведет в цикле из базы 7 заметок.. Так вот у всех одинаковый шаблон printf(); а как мне сделать чтоб у первой заметки был другой шаблон?

P.S заранее благодарен вам за вашу поддержку, и помощь!
 
выборку из базы гораздо приятней делать с помощью
PHP:
while($th = mysql_fetch_assoc($two)) {
//....
}
тогда вам не понадобится перед циклом ввыполнять отдельно
PHP:
$th = mysql_fetch_assoc($two);
И самое главное не возникнет ошибки
ведь в вашем сулчае, если из базы вернется ноль строк, то ваш цикл выполнится один раз.
хотя должен ни одного.
с этим разобрались.

если вы хотите чтобы первая строка у вас отличалась, то просто воткните перед циклом
PHP:
if($th = mysql_fetch_assoc($two)){//проверка на то, что первая строка вообще существует
//То, что вы хотите выполнить с первой строкой
}
 
как и просил - замечания по коду:

1. давай осмысленные названия переменным, например
PHP:
$one => $query
$two => $result
$th => $row

2. хоть и не обязательно и некоторые так пишут, но я считаю, что читабельнее так:
PHP:
if (clause)
{
   $value = $num;
   $another_value = $num+5;
}
фигурные скобки с новых строк, друг под другом, текст в пределах скобок с одинаковым отступом

3. Использоваться mysqli вместо mysql, так же фильтруй переменные
 
как и просил - замечания по коду:

1. давай осмысленные названия переменным, например
PHP:
$one => $query
$two => $result
$th => $row
2. хоть и не обязательно и некоторые так пишут, но я считаю, что читабельнее так:
PHP:
if (clause)
{
   $value = $num;
   $another_value = $num+5;
}
фигурные скобки с новых строк, друг под другом, текст в пределах скобок с одинаковым отступом

3. Использоваться mysqli вместо mysql, так же фильтруй переменные

1) что такое "if (clause)" ?
2) чем mysqli лучше pdo драйвера для mysql?
 
1) что такое "if (clause)" ?
2) чем mysqli лучше pdo драйвера для mysql?

1) if (условие)
2) ничем, я не использовал pdo_mysql. Если не использую фреймворк, то использую дата меппер + mysqli
 
1) if (условие)
2) ничем, я не использовал pdo_mysql. Если не использую фреймворк, то использую дата меппер + mysqli

1) что такое clause? это ни переменная, ни константа. вот мне интересно стало что это за надпись, может я не знаю чего :ah:?
2) ты писал
замечания по коду:
3. Использоваться mysqli вместо mysql, так же фильтруй переменные
так объясни нам простым смертным, чем твой mysqli лучше mysql, при том что pdo входит в стандартный набор библиотек php,а mysqli еще надо подключать и не у всех это покатит. Я с тем же успехом могу порекомендовать использовать postgreSQL или MongoDB вместо твоего mysqli.

фигурные скобки с новых строк, друг под другом, текст в пределах скобок с одинаковым отступом
Это из раздела стандартизации оформления кода и к функционалу никакого отношения не имеет вообще. Кроме того, таких стандартов существует несколько и какой из них лучше каждый разработчик выбирает для себя сам.
 
выборку из базы гораздо приятней делать с помощью
PHP:
while($th = mysql_fetch_assoc($two)) {
//....
}
тогда вам не понадобится перед циклом ввыполнять отдельно
PHP:
$th = mysql_fetch_assoc($two);
И самое главное не возникнет ошибки
ведь в вашем сулчае, если из базы вернется ноль строк, то ваш цикл выполнится один раз.
хотя должен ни одного.
с этим разобрались.
если вы хотите чтобы первая строка у вас отличалась, то просто воткните перед циклом
PHP:
if($th = mysql_fetch_assoc($two)){//проверка на то, что первая строка вообще существует
//То, что вы хотите выполнить с первой строкой
}

спасибо всем кто мне помогает, вот появился другой вопросик:)

а как сделать так чтоб после первой записи вывелось что то?

Например: пошел вывод данных из базы и после первой заметки вывеслось слово echo "слово";
 
PHP:
$flag = true;
while($th = mysql_fetch_assoc($two))
{
 if ($flag)
 {
     echo 'Message';
     flag = false;
 }
}

самый простой способ
 
А не проще ли добавить в функцию аргументы без определения их в global?
например
PHP:
function get_page($index="custom", $num=7, $flag=null) { 
// функция
}
т.е. при вызове функии без явного объявления переменных get_page(); они будут равны указанным значениям.
Иначе, как объявим - get_page(other, 10, true);
 
А не проще ли добавить в функцию аргументы без определения их в global?
например
PHP:
function get_page($index="custom", $num=7, $flag=null) { 
// функция
}
т.е. при вызове функии без явного объявления переменных get_page(); они будут равны указанным значениям.
Иначе, как объявим - get_page(other, 10, true);
глобальные переменные для того и объявляются, чтобы использовать их в любом куске кода.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху