[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Исправьте цикл
Phpprogger
Я начал исправляться после курсов Е.Попова, потому что все считают, что Попов "говнокодер".
У меня на сайте стоит скрипт регистрации с сайта Попова. Я решил привести код в порядок. Начал по алфавиту, первый был all_users.php.
Вот кусок кода поповского:
$result = mysql_query("SELECT login,id FROM users ",$db); //извлекаем логин и идентификатор пользователей
$myrow = mysql_fetch_array($result);
do
{
//выводим их в цикле
printf("<a href='page.php?id=%s'>%s</a><br>",$myrow['id'],$myrow['login']);
}
while($myrow = mysql_fetch_array($result));

Начал править:
$q = mysql_query("SELECT login,id FROM users");
//извлекаем логин и идентификатор пользователей
$n_arr = mysql_fetch_assoc($q);
//цикл
while ($n_arr = mysql_fetch_assoc($q))
{
echo "<a href=page.php?id=$n_arr[id]>$n_arr[login]</a><br>";
};

Но столкнулся с проблемой: исправленный while(вместо do-while) выводит всех юзеров, кроме первого.
То есть должно:
Админ
Ю2
Ю3
Выводит:
Ю2
Ю3.
Исправьте цикл)



Спустя 7 минут, 8 секунд (20.09.2011 - 10:31) Michael написал(а):
$q = mysql_query("SELECT login,id FROM users");
//извлекаем логин и идентификатор пользователей
//цикл

while ($n_arr = mysql_fetch_assoc($q))
{
echo "<a href=page.php?id=$n_arr[id]>$n_arr[login]</a><br>";
};

Спустя 53 секунды (20.09.2011 - 10:31) Phpprogger написал(а):
Спс. Заработало.

Добавил + в карму))

Спустя 1 минута, 8 секунд (20.09.2011 - 10:33) Renden написал(а):
Phpprogger

$query = mysql_query("SELECT login,id FROM users");
while ($row = mysql_fetch_assoc($query))
echo "<a href=page.php?id=".$row['id'].">".$row['login']."</a><br>";


Michael Оперативный ты :)

Спустя 5 минут, 7 секунд (20.09.2011 - 10:38) Phpprogger написал(а):
Renden
Ваш вариант так же работает, но есть вопрос: какой код лучше использовать при кодировании? smile.gif

Спустя 1 минута (20.09.2011 - 10:39) Renden написал(а):
Phpprogger
Он идентичен, просто имена переменных другие, и стиль оформления\написания smile.gif

Спустя 3 минуты, 41 секунда (20.09.2011 - 10:42) Phpprogger написал(а):
Renden
Просто не хочу снова стать поповщиной/говнокодером)) biggrin.gif

Спустя 3 минуты, 40 секунд (20.09.2011 - 10:46) Renden написал(а):
Phpprogger
В таком случае думаю мой пример в плане оформления более правильный smile.gif

Спустя 1 минута, 7 секунд (20.09.2011 - 10:47) Phpprogger написал(а):
Renden
Ок, буду работать дальше над исправлением smile.gif

Спустя 22 минуты, 17 секунд (20.09.2011 - 11:09) m4a1fox написал(а):
Renden
Phpprogger
Ну же, господа, либо я старомоден, но вы, кажется, если по правилам делать забыли про один символ ` - вот такой. И тогда код, ваще красиво выглядит.

$query = mysql_query("SELECT `login`, `id` FROM `users`");
while ($row = mysql_fetch_assoc($query))
echo '<a href="page.php?id='.$row['id'].'">'.$row['login'].'</a><br>';

ИМХО!

Спустя 7 минут, 54 секунды (20.09.2011 - 11:17) Phpprogger написал(а):
m4a1fox
Согласен, так лучше.

Спустя 49 минут, 33 секунды (20.09.2011 - 12:07) Renden написал(а):
m4a1fox
По каким это правилам?)) Оф дока mysql не использует обратных кавычек, врочем и я тоже smile.gif

Спустя 8 минут, 10 секунд (20.09.2011 - 12:15) m4a1fox написал(а):
Renden
Ну я так привык! Да и к тому же вот тут, так же происходит! Еще раз говорю - ИМХО! Не претендую на эксклюзивность. Просто я так например делаю!

P.S. Только что проверил, в PMA запросы оформляются например так

UPDATE `DB`.`table` SET `storke` = 'text' WHERE `table`.`id` = 181 LIMIT 1 ;


Целые числа - не берутся в обратные кавычки, это видно из примера, а остальные значения - беруться!

Спустя 1 час, 14 минут, 25 секунд (20.09.2011 - 13:29) twin написал(а):
Тут много интересного по теме.

Спустя 5 минут, 1 секунда (20.09.2011 - 13:34) killer8080 написал(а):
Цитата (Renden @ 20.09.2011 - 12:07)
По каким это правилам?)) Оф дока mysql не использует обратных кавычек, врочем и я тоже

И тем не менее m4a1fox прав.
Во первых, используя обратные кавычки, вы избавляете sql сервер от лишних действий при разборе запроса, на предмет принадлежности к зарезервированным словам. Да, на производительности это особо не скажется, но тем не менее.
Во вторых, без них невозможно обращаться к столбцам или таблицам, чьи имена входят в список зарезервированных слов SQL, например fulltext, delete, add и т.п.
Лучше сразу привыкать писать запросы в едином стиле.

Спустя 4 минуты, 40 секунд (20.09.2011 - 13:39) m4a1fox написал(а):
twin
Цитата
Тут много интересного по теме.

Уже давал эту ссылку, я так подозреваю ТС сейчас там и находится!

Спустя 43 минуты, 54 секунды (20.09.2011 - 14:23) Phpprogger написал(а):
Есть еще вопрос: как посчитать сколько всего юзеров в базе?

Спустя 5 минут, 54 секунды (20.09.2011 - 14:29) Winston написал(а):
Цитата (Phpprogger @ 20.09.2011 - 14:23)
как посчитать сколько всего юзеров в базе?

$q = mysql_query("SELECT COUNT(`login`) FROM `users`");
echo 'Количество юзеров: ' . mysql_num_rows($q);

Спустя 4 минуты, 5 секунд (20.09.2011 - 14:33) Phpprogger написал(а):
Winston
Цитата
Количество юзеров: 1

хотя их больше...

Спустя 2 минуты, 31 секунда (20.09.2011 - 14:36) Winston написал(а):
А так
$q = mysql_query("SELECT COUNT(*) FROM `users`");
echo 'Количество юзеров: ' . mysql_num_rows($q);

Спустя 1 минута, 34 секунды (20.09.2011 - 14:37) Phpprogger написал(а):
тоже самое...


Приду позже

Спустя 4 минуты, 10 секунд (20.09.2011 - 14:41) Winston написал(а):
Ну тогда так попробуй
$q = mysql_query("SELECT COUNT(*) AS `k` FROM `users`");
$res = mysql_fetch_assoc($q);
echo 'Юзеров ' . $res['k'];

Спустя 2 минуты, 38 секунд (20.09.2011 - 14:44) m4a1fox написал(а):
$q = mysql_query("SELECT `id` FROM `users`");
echo 'Количество юзеров: ' . mysql_num_rows($q);

Спустя 32 минуты (20.09.2011 - 15:16) killer8080 написал(а):
m4a1fox
функцию mysql_num_rows нужно избегать, особенно в больших таблицах.

$q = mysql_query("SELECT COUNT(*) FROM `users`");
echo 'Количество юзеров: ' . mysql_result($q, 0);

Спустя 1 час, 15 минут, 15 секунд (20.09.2011 - 16:31) inpost написал(а):
Winston
COUNT - вернёт 1 лишь запись, поэтому mysql_num_rows - возвращает 1, даже если записей будет 0, всё равно вернётся 1 запись с цифрой 0.

Надо выводить через mysql_result, как показал Киллер!

Спустя 35 минут (20.09.2011 - 17:06) Phpprogger написал(а):
killer8080
робит.
m4a1fox
робит.
Winston
3 вариант...робит!
Спасибо ребята! Все заслужили плюсы))
Смотрел по постам, вариант Киллера лучше поставлю smile.gif


_____________
хе-хе.
Быстрый ответ:

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