X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Вывод из БД, цикл
BoL4oNoK
BoL4oNoK
Topic Starter сообщение 31.1.2011, 2:04; Ответить: BoL4oNoK
Сообщение #1


Доброй ночи. Нужно вывести из БД записи, в зависимости от из кол-ва. Поля таблицы создаются правильно, но заполнение идет только из первой записи(вторую уже не читает)

Код:
[PHP]$query = "SELECT *
FROM `galery`
ORDER BY `id`";
$sql = mysql_query($query) or die(mysql_error());

if ($count < 4) {
$cnt1 = 1;
} elseif ($count < 8) {
$cnt1 = 2;
} elseif ($count < 12) {
$cnt1 = 3;
}
$cnt2 = $count;
for ($st1 = 1; $st1 <= $cnt1; $st1++) {
$content .= '<tr>';
for ($st2 = 1; $st2 <= $cnt2; $st2++) {
$row = mysql_fetch_assoc($sql);
$date = $row['date'];
$theme = $row['theme'];
$author = $row['author'];
$title = $row['title'];
$picprev = $row['picprev'];

if (isset($_SESSION['user_id'])) {
$query = "SELECT *
FROM `users`
WHERE `id`='{$_SESSION['user_id']}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql)==1) {
$res = mysql_fetch_assoc($sql);
$name = $res['login'];
$usid = $res['id'];
}
}

if ($name == $author) {
$profile = 'profile/';
} else {
$query = "SELECT *
FROM `users`
WHERE `login`='{$author}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql)==1) {
$res = mysql_fetch_assoc($sql);
$usid = $res['id'];

$profile = 'profile/?author='.$usid;
}
}

$content .='<td valign="top"><img src="http://www.lit-art.net/galery/imgprev/'.$picprev.'" /><br><a href="http://www.lib-art.net/galery/view.php?id='.$row['id'].'">'.$title.'</a>['.$date.']<br>'.$theme.'<br /><a href="http://www.lib-art.net/'.$profile.'" title="Просмотреть страницу автора">'.$author.'</a></td>';
}
$content .= '</tr>';
}
}
$content .= '</table>';

echo $content;[/PHP]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 31.1.2011, 14:35; Ответить: Apay
Сообщение #2


а что такое $count ? копайте в эту сторону
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
BoL4oNoK
BoL4oNoK
Topic Starter сообщение 31.1.2011, 23:40; Ответить: BoL4oNoK
Сообщение #3


(Apay @ 31.1.2011, 16:35) *
а что такое $count ? копайте в эту сторону

Это количество записей в БД. Получаю его так:
[PHP]$count = mysql_num_rows()[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 1.2.2011, 14:24; Ответить: Apay
Сообщение #4


(BoL4oNoK @ 1.2.2011, 01:40) *
Это количество записей в БД. Получаю его так:
а где это получение есть в тексте?
вообще-то лучше всего пользоваться в sql запросах "SELECT COUNT(*) ..." и "SELECT ... LIMIT ..."
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
BoL4oNoK
BoL4oNoK
Topic Starter сообщение 1.2.2011, 19:44; Ответить: BoL4oNoK
Сообщение #5


(Apay @ 1.2.2011, 16:24) *
а где это получение есть в тексте?

там код повторяется. Вот весь скрипт:

[PHP]/* Выводим картинки*/
$content = '<table border="1">';

$query = "SELECT * FROM `galery`";

$sql = mysql_query($query) or die(mysql_error());

$count = mysql_num_rows($sql);

if ($count >= 16) {

$query = "SELECT *
FROM `galery`
ORDER BY `id`
DESC LIMIT 16";
$sql = mysql_query($query) or die(mysql_error());

for ($st1 = 1; $st1 <= 4; $st1++) {
$content .= '<tr>';
for ($st2 = 1; $st2 <= 4; $st2++) {
$row = mysql_fetch_assoc($sql);
$date = $row['date'];
$theme = $row['theme'];
$author = $row['author'];
$title = $row['title'];
$picprev = $row['picprev'];

if (isset($_SESSION['user_id'])) {
$query = "SELECT *
FROM `users`
WHERE `id`='{$_SESSION['user_id']}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql)==1) {
$res = mysql_fetch_assoc($sql);
$name = $res['login'];
$usid = $res['id'];
}
}

if ($name == $author) {
$profile = 'profile/';
} else {
$profile = 'profile/?author='.$usid;
}

$content .='<td valign="top"><img src="http://www.lit-art.net/galery/imgprev/'.$picprev.'" /><br><a href="http://www.lib-art.net/galery/view.php?id='.$row['id'].'">'.$title.'</a>['.$date.']<br>'.$theme.'<br /><a href="http://www.lib-art.net/'.$profile.'" title="Просмотреть страницу автора">'.$author.'</a></td>';
}
$content .= '</tr>';
}
} else {
$query = "SELECT *
FROM `galery`
ORDER BY `id`";
$sql = mysql_query($query) or die(mysql_error());

if ($count < 4) {
$cnt1 = 1;
} elseif ($count < 8) {
$cnt1 = 2;
} elseif ($count < 12) {
$cnt1 = 3;
}
$cnt2 = $count;
for ($st1 = 1; $st1 <= $cnt1; $st1++) {
$content .= '<tr>';
for ($st2 = 1; $st2 <= $cnt2; $st2++) {
$row = mysql_fetch_assoc($sql);
$date = $row['date'];
$theme = $row['theme'];
$author = $row['author'];
$title = $row['title'];
$picprev = $row['picprev'];

if (isset($_SESSION['user_id'])) {
$query = "SELECT *
FROM `users`
WHERE `id`='{$_SESSION['user_id']}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql)==1) {
$res = mysql_fetch_assoc($sql);
$name = $res['login'];
$usid = $res['id'];
}
}

if ($name == $author) {
$profile = 'profile/';
} else {
$query = "SELECT *
FROM `users`
WHERE `login`='{$author}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql)==1) {
$res = mysql_fetch_assoc($sql);
$usid = $res['id'];

$profile = 'profile/?author='.$usid;
}
}

$content .='<td valign="top"><img src="http://www.lit-art.net/galery/imgprev/'.$picprev.'" /><br><a href="http://www.lib-art.net/galery/view.php?id='.$row['id'].'">'.$title.'</a>['.$date.']<br>'.$theme.'<br /><a href="http://www.lib-art.net/'.$profile.'" title="Просмотреть страницу автора">'.$author.'</a></td>';
}
$content .= '</tr>';
}
}
$content .= '</table>';

echo $content;
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 2.2.2011, 11:36; Ответить: Apay
Сообщение #6


по коду есть следующие замечания:
1) зачем собирать строку, если ее потом все равно выводить?
2) количество записей всегда лучше вычислять не в php а в sql: SELECT COUNT(*), но для данного куска кода и это не нужно
3) зачем делать запросы к базе по поводу user в двойном цикле?
4) нашел ошибки: переменные $cnt1 , $name , $usid могут быть неинициализированными

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

[PHP]
$name = $usid = '';
if( isset($_SESSION['user_id']) ){
$query = "SELECT * FROM `users` WHERE `id`='{$_SESSION['user_id']}' LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if( $res = mysql_fetch_assoc($sql) ){
$name = $res['login'];
$usid = $res['id'];
}
}

echo '<table border="1">';

$query = 'SELECT * FROM `galery` ORDER BY `id` DESC LIMIT 16';
$sql = mysql_query($query) or die(mysql_error());
$column = 4;

while( $row = mysql_fetch_assoc($sql) ){
if( $column == 4 ){
echo '<tr>';
$column = 1;
}
else $column++;
echo '<td valign="top"><img src="http://www.lit-art.net/galery/imgprev/'.
$row['picprev'].'" /><a href="http://www.lib-art.net/galery/view.php?id='.
$row['id'].'">'.$row['title'].'</a>['.$row['date'].']'.$row['theme'].
'<a href="http://www.lib-art.net/profile/'.
( $name == $row['author'] ? '?author='.$usid ? '' ).
'" title="Просмотреть страницу автора">'.$row['author'].'</a></td>'
if( $column == 4 )
echo '</tr>';
}

if( $column < 4 ){
echo '<td'. ( $column < 3 ? ' colspan="'.(4-$column).'"' : '' ) .'>&nbsp;</td></tr>';

echo '</table>';
[/PHP]

p.s. специально переменную $column сделал в таком виде чтобs вам было понятней
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
BoL4oNoK
BoL4oNoK
Topic Starter сообщение 2.2.2011, 23:26; Ответить: BoL4oNoK
Сообщение #7


Apay,можете подробнее расписать мои ошибки?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 3.2.2011, 12:08; Ответить: Apay
Сообщение #8


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

2) выборка всех строк в базе для подсчета количества строк - очень большой расход ресурсов (может занимать десятки секунд), гораздо правильнее возложить эту работу на субд. далее см. п. 1)

3) все что возможно надо вывести из цикла, иначе излишний и никчемный расход ресурсов. далее см. п. 1)

4) явная ошибка. переменные перед использованием должны быть всегда проинициализированны. у вас если $count равно 13, то $cnt1 непонятно чему равно. аналогично если нет пользователя то $name и $usid тоже непонятно чему равны

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Ручной обмен, ввод/вывод электронных валют | ЮMoney, WMZ, Крипта, Приват, Монобанк | Низкие комиссии, минимальные суммы сделок
быстро, удобно, по доступному курсу
200 Sostavitel 98206 11.2.2024, 21:07
автор: Wolfhound
Открытая тема (нет новых ответов) Sbitcoin.ru – Ввод, Вывод, Обмен: Qiwi, YD, Btc, Btc-e, PM, Cash IN, PR24, MG, WU, Нал (RU, UA).
9 sbitcoinru 6784 10.10.2023, 19:25
автор: Sbitcoin
Горячая тема (нет новых ответов) Обмен WebMoney - Яндекс - QIWI. Вывод/ввод Приват24 UAH
225 himin 132845 7.5.2023, 13:26
автор: Вера_Симонова
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлы«»101Crypta.com«»ВВОД/ВЫВОД/ОБМЕН«»BTC/ETH/QIWI/USDT/VISA/MC«»НАЛИЧНЫЕ/СНГ/ЕВРОПА«»
13 101Crypta 12160 18.4.2023, 23:15
автор: 101Crypta
Открытая тема (нет новых ответов) Нужен вывод в топ наших роликов Youtube
3 wep 1929 23.3.2023, 17:39
автор: distrib095


 



RSS Текстовая версия Сейчас: 20.4.2024, 13:03
Дизайн