Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Постраничная навигация
 
 автор: TanTaL91   (23.10.2008 в 23:05)   письмо автору
 
 

Сижу 4 день пишу фотогалерею.

Осталось делать постраничную навигацию, и подогнать картинки((((

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

Вообщем такая беда.

База:
id_foto
headline
data
name
img
text


Код вывода фоток:


if($_GET['event'] == "fotogallery")

{


$tr="1";


echo "<table border=0 cellspacing=0 cellpadding=10 width=100% >";

if($tr=1)
{
echo "<tr width=100%>";
}

$foto = mysql_query("SELECT  * FROM fotogallery WHERE nooryes='no' " );

while ($fotoall = mysql_fetch_array($foto))

{


$id_foto = $fotoall['id_foto']; 
$headline = $fotoall['headline']; 
$date = $fotoall['data']; 
$name = $fotoall['name'];      
$img = $fotoall['img'];      
$text = $fotoall['text'];      


echo "

<td width='33%'>
<table border=1 cellspacing=0 cellpadding=5 width=100% height=200 align=left>
<tr height=98%><td><center><a href='fotogallery.php?event=fotomsg&id_foto=$id_foto'><img src='foto/$img' width=80% height=100%></center></a></td></tr>
<tr><td><a href='fotogallery.php?event=fotomsg&id_foto=$id_foto'>$headline</a></td></tr>
</table>
</td>

 ";

$tr++;

if ($tr == 4)
{
echo "</tr> ";
$tr = 1;
}

}

echo "</table>";

}


Он выводит по 3 фотки в строке, надо что бы еще по 3 строки было на страници.

Пожалуйста помогите, напишите самый наипростеший вариант реализации этой беды.

И если не трудно подпишите каждый шаг, что бы на будущее я знал... Заранее ОЧЕНЬ благодарен знаю что не бросите.

  Ответить  
 
 автор: sim5   (24.10.2008 в 06:11)   письмо автору
 
   для: TanTaL91   (23.10.2008 в 23:05)
 

Вам же предлагалось посмотреть примеры кода постраничной навигации - они вам подойдут практически на 100%. В этих примерах, просто замените запросы к базе своими запросами, с учетом того, что у вас вывод будет по 9 картинок, этим и будет определятся в запросе: LIMIT $offset, 9. Вы хотя бы попытайтесь такой пример кода под свой запрос переписать, и уж какие ошибки будут - вопрос на форум.

  Ответить  
 
 автор: TanTaL91   (28.10.2008 в 23:00)   письмо автору
 
   для: sim5   (24.10.2008 в 06:11)
 

Что не так... Подключите к своей базе, она будет как то не порусски все выдовать...

<?


$server 
'localhost'// ИМЯ СЕРВЕРА
$user 'root'// ПОЛЬЗОВАТЕЛЬ - НЕ ИСПОЛЬЗУЙТЕ ROOT ДЛЯ ВАШЕЙ ЖЕ БЕЗОПАСНОСТИ
$pass '123'// ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ

$db 'toldoru1_toldo'// БАЗА ДАННЫХ
$table 'subsection'// НАЗВАНИЕ ТАБЛИЦЫ

$chislo 5// ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ

// ДЛЯ УДОБСТВА ОБОЗНАЧИМ ПЕРЕМЕННУЮ С ТЕКСТОМ ОШИБКИ
$text_error '<br />Ошибочка вышла!'

// СОЕДЕНИМСЯ С MySQL
$connect mysql_connect ($server$user$pass);
if (!
$connect) {
echo 
$text_error;
exit;
}

// СОЕДЕНИЯЕМСЯ С БАЗОЙ ДАННЫХ
$select mysql_select_db($db);
if (!
$select) {
echo 
$text_error;
exit;
}


// СОЗДАЁМ ЗАПРОС
$result mysql_query("SELECT * from $table ORDER by id_subsection desc");
// СЧИТАЕМ КОЛЛИЧЕСТВО ЗАПИСЕЙ В ТАБЛИЦЕ - У МЕНЯ ИХ 20
$num_rows mysql_num_rows($result);

// А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО
$num_rows round($num_rows/$chislo); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :)


// ЗДЕСЬ МЫ ПРОВЕРЯЕМ НА КАКОЙ СТРАНИЦЕ СЕЙЧАС ПОЛЬЗОВАТЕЛЬ 
if (isset($_GET['str'])) {
$nav $_GET['str'];
}
else {
$nav 0;
}
$nav intval($nav); // ДЛЯ ЗАЩИТЫ ОТ НЕХОРОШИХ ДЯДЕНЕК МЫ ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ $GET['str']
echo 'Навигация: '

// А ТЕПЕРЬ ВЫВОДИМ НОМЕРА СТРАНЦ 
for ($i=1$i<$num_rows$i++) {
if (
$i != $nav) {
echo 
'<a href="'.$PHP_SELF.'?str='.$i.'">'.$i.'</a> ';
}
else {
// АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ
echo '<span>'.$i.'</span> ';
}
}

echo 
'<hr />'// ОТДЕЛИМ НАВИГАЦЮ ОТ КОНТЕНТА ДЛЯ НАГЛЯДНОСТИ

// НАЧИНАЕМ ВЫВОДИТЬ САМУ ИНФОРМАЦИЮ ПОСТРАНИЧНО :)
if (!isset($_GET['str'])) {
$str 0;
}
else { 
$str $_GET['str']*$chislo $chislo;
}
$nomer $str 5;
// ФОРМИРУЕМ ЗАПРОС НУЖНОЙ НАМ ЧАСТИ ИНФОРМАЦИИ 
$result mysql_query("SELECT * from $table ORDER by id_subsection asc limit $str$nomer");
// ИНАЧЕ ВЫВОДИМ ОШИБКУ
if (!$result) {
echo 
$text_error;
exit;
}

echo 
'<div style="width: 40%;">';
while (
$row mysql_fetch_array($result)) {
echo 
'<p>'.$row['id_subsection'].' - <strong>'.$row['name'].'</strong>
<br />
'
.substr($row['text'],0,100).'.. <a href="text.php?nomer='.$row['id_subsection'].'">>></a></p>';
}
echo 
'</div>';

mysql_close($connect);

?>

 

  Ответить  
 
 автор: Trianon   (28.10.2008 в 23:54)   письмо автору
 
   для: TanTaL91   (28.10.2008 в 23:00)
 

$nomer = $str + 5;

почему?

  Ответить  
 
 автор: TanTaL91   (29.10.2008 в 14:12)   письмо автору
 
   для: Trianon   (28.10.2008 в 23:54)
 

Потому что ЛИМИТ!!!

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=--=-=-=-=-=--=-=-=-=-=-=-=-=--=-




<?


$server 
'localhost'// ИМЯ СЕРВЕРА
$user 'root'// ПОЛЬЗОВАТЕЛЬ - НЕ ИСПОЛЬЗУЙТЕ ROOT ДЛЯ ВАШЕЙ ЖЕ БЕЗОПАСНОСТИ
$pass ''// ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ

$db 'primer'// БАЗА ДАННЫХ
$table 'primer'// НАЗВАНИЕ ТАБЛИЦЫ

$chislo 5// ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ

// ДЛЯ УДОБСТВА ОБОЗНАЧИМ ПЕРЕМЕННУЮ С ТЕКСТОМ ОШИБКИ
$text_error '<br />Ошибочка вышла!'

// СОЕДЕНИМСЯ С MySQL
$connect mysql_connect ($server$user$pass);
if (!
$connect) {
echo 
$text_error;
exit;
}

// СОЕДЕНИЯЕМСЯ С БАЗОЙ ДАННЫХ
$select mysql_select_db($db);
if (!
$select) {
echo 
$text_error;
exit;
}


// СОЗДАЁМ ЗАПРОС
$result mysql_query("SELECT * from $table ORDER by id desc");
// СЧИТАЕМ КОЛЛИЧЕСТВО ЗАПИСЕЙ В ТАБЛИЦЕ - У МЕНЯ ИХ 20
$num_rows mysql_num_rows($result);

// А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО
$num_rows round($num_rows/$chislo); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :)


// ЗДЕСЬ МЫ ПРОВЕРЯЕМ НА КАКОЙ СТРАНИЦЕ СЕЙЧАС ПОЛЬЗОВАТЕЛЬ 
if (isset($_GET['str'])) {
$nav $_GET['str'];
}
else {
$nav 0;
}
$nav intval($nav); // ДЛЯ ЗАЩИТЫ ОТ НЕХОРОШИХ ДЯДЕНЕК МЫ ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ $GET['str']
echo 'Навигация: '

// А ТЕПЕРЬ ВЫВОДИМ НОМЕРА СТРАНЦ 
for ($i=1$i<$num_rows$i++) {
if (
$i != $nav) {
echo 
'<a href="'.$PHP_SELF.'?str='.$i.'">'.$i.'</a> ';
}
else {
// АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ
echo '<span>'.$i.'</span> ';
}
}

echo 
'<hr />'// ОТДЕЛИМ НАВИГАЦЮ ОТ КОНТЕНТА ДЛЯ НАГЛЯДНОСТИ

// НАЧИНАЕМ ВЫВОДИТЬ САМУ ИНФОРМАЦИЮ ПОСТРАНИЧНО :)
if (!isset($_GET['str'])) {
$str 0;
}
else { 
$str $_GET['str']*$chislo $chislo;
}
$nomer $str 5;
// ФОРМИРУЕМ ЗАПРОС НУЖНОЙ НАМ ЧАСТИ ИНФОРМАЦИИ 
$result mysql_query("SELECT * from $table ORDER by id asc limit $str$nomer");
// ИНАЧЕ ВЫВОДИМ ОШИБКУ
if (!$result) {
echo 
$text_error;
exit;
}

echo 
'<div style="width: 40%;">';
while (
$row mysql_fetch_array($result)) {
echo 
'<p>'.$row['id'].' - <strong>'.$row['name'].'</strong>
<br />
'
.substr($row['text'],0,100).'.. <a href="text.php?nomer='.$row['id'].'">>></a></p>';
}
echo 
'</div>';

mysql_close($connect);

?>


Почему он лимит не учитывает???

$result = mysql_query("SELECT * from $table ORDER by id asc limit $str, $nomer");

Он его просто ингнорирует... Кто-нибудь подключите его к базе попробуйте... Пожалуйста

  Ответить  
 
 автор: spider-x   (30.10.2008 в 16:21)   письмо автору
 
   для: TanTaL91   (29.10.2008 в 14:12)
 

Может быть я не по теме скажу... но зачем в этом скрипте 2 зароса на выборку... сначала считаем количество затронутых строк а потом ещё раз выдераем маленький участок из базы... куда проще бло бы сделать только первый запрос а потом работать с матрицей значений?

Я не прав?

  Ответить  
 
 автор: Trianon   (30.10.2008 в 16:45)   письмо автору
 
   для: spider-x   (30.10.2008 в 16:21)
 

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

Работать со всем рядом значений может и не получиться, если их слишком много. А постраничка подразумевает, что их слишком много.

Есть еще в местном диалекте вариант SQL_CALC_FOUND_ROWS .
Впрочем LIMIT - тоже ж диалект, так что...

  Ответить  
 
 автор: spider-x   (30.10.2008 в 17:09)   письмо автору
 
   для: Trianon   (30.10.2008 в 16:45)
 

Да у них ща бум какойто... все начинают глупости творить... в соседнем посте человек считал количество строк следующим способом :

       $query=@mysql_query("SELECT id FROM counter_log");     
            $rows_col=0;             
            while($data=mysql_fetch_array($query, MYSQL_ASSOC)) 
            { 
                $rows_col++; 
            }

Хотя может это я чего-то не понимаю... и это такой писк моды?

Но такие конструкции меня убивают )))

  Ответить  
 
 автор: Trianon   (30.10.2008 в 16:43)   письмо автору
 
   для: TanTaL91   (29.10.2008 в 14:12)
 

конструкция LIMIT работает совсем не так, как Вы считаете.
Её вторым аргуметном является число записей ( в Вашем случае - пятерка) , а не то, что Вы написали.

Будете кричать - вообще отвечать не стану .

  Ответить  
 
 автор: lorenberg   (30.10.2008 в 16:57)   письмо автору
 
   для: Trianon   (30.10.2008 в 16:43)
 

хахаха

  Ответить  
 
 автор: spider-x   (30.10.2008 в 16:59)   письмо автору
 
   для: TanTaL91   (29.10.2008 в 14:12)
 

и ещё
// А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО 
$num_rows = round($num_rows/$chislo); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :)


замените на

// А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО 
if(round($num_rows/$chislo)==($num_rows/$chislo))
$num_rows = round($num_rows/$chislo); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :) 
else
$num_rows = round($num_rows/$chislo)+1;

ибо раунд округляет в меньшую сторону...

Хотя может вы специально хотите скрывать последние фотки а потом с каждым выкладыванием будут отображаться новые?? O_O

  Ответить  
 
 автор: sl1p   (30.10.2008 в 17:13)   письмо автору
 
   для: spider-x   (30.10.2008 в 16:59)
 

а не легче использовать ceil() вместо round()?:D

  Ответить  
 
 автор: TanTaL91   (04.11.2008 в 22:14)   письмо автору
 
   для: sl1p   (30.10.2008 в 17:13)
 

В чем беда... Все работает на ура (накоец то...)

Но в чем сама беда, что если сообщений меньше половины, то цифра не ставиться.
А нужно что бы если было хоть 1 лишнее сообщение оно выдавало под него отдельную цифру...

<?
$server 
'localhost'// ИМЯ СЕРВЕРА
$user 'root'// ПОЛЬЗОВАТЕЛЬ - НЕ ИСПОЛЬЗУЙТЕ ROOT ДЛЯ ВАШЕЙ ЖЕ БЕЗОПАСНОСТИ
$pass ''// ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ

$db 'primer'// БАЗА ДАННЫХ
$table 'primer'// НАЗВАНИЕ ТАБЛИЦЫ

$chislo 5// ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ


// СОЕДЕНИМСЯ С MySQL
$connect mysql_connect ($server$user$pass);

// СОЕДЕНИЯЕМСЯ С БАЗОЙ ДАННЫХ
$select mysql_select_db($db);


// делаем запрос, сколько всего записей
$result mysql_query("SELECT * from $table ORDER by id_com desc");
if (!
$result) {
echo 
$text_error;
exit;
}
$num_rows mysql_num_rows($result);
// end 


$num_rows round($num_rows/$chislo); // 20 ДЕЛИМ НА $chislo. СКОЛЬКО? :)



// ЗДЕСЬ МЫ ПРОВЕРЯЕМ НА КАКОЙ СТРАНИЦЕ СЕЙЧАС ПОЛЬЗОВАТЕЛЬ 
if (isset($_GET['page'])) {
$nav $_GET['page'];
}
else {
$nav 1;
}
$nav intval($nav); // ДЛЯ ЗАЩИТЫ ОТ НЕХОРОШИХ ДЯДЕНЕК МЫ ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ $GET['str']



echo 'Навигация: ';

// выводим саму навигацию
$num_rows++;

for (
$i=1$i<$num_rows$i++)
{
if (
$i != $nav)
{
echo 
"<a href='?page=$i'>$i</a>";
}
else
{
echo 
"<span> $i </span>";
}
}

// end 
echo '<hr />';


if (!isset(
$_GET['page'])) {
$page 0;
}
else { 
$page $_GET['page']*$chislo $chislo;
}

$nomer $page+$chislo;

$res mysql_query("SELECT * from $table ORDER by id_com limit $page$chislo");
if (!
$result) {
echo 
$text_error;
exit;
}

// выводим саму информацию 
while ($row mysql_fetch_array($res)) 
{
$name $row['name'];
$date $row['date'];
$com $row['com'];

echo 
"<table border=0 cellspacing=0 cellpadding=5 width=100%>
<tr bgcolor=#eeeeee><td class=td>
$name ($date)</td></tr>
<tr bgcolor=#d2e8ff><td class=td>
$com</td></tr>
</table> <br>"
;
 
}


?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования