|
|
|
| Сижу 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 строки было на страници.
Пожалуйста помогите, напишите самый наипростеший вариант реализации этой беды.
И если не трудно подпишите каждый шаг, что бы на будущее я знал... Заранее ОЧЕНЬ благодарен знаю что не бросите. | |
|
|
|
|
|
|
|
для: TanTaL91
(23.10.2008 в 23:05)
| | Вам же предлагалось посмотреть примеры кода постраничной навигации - они вам подойдут практически на 100%. В этих примерах, просто замените запросы к базе своими запросами, с учетом того, что у вас вывод будет по 9 картинок, этим и будет определятся в запросе: LIMIT $offset, 9. Вы хотя бы попытайтесь такой пример кода под свой запрос переписать, и уж какие ошибки будут - вопрос на форум. | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: TanTaL91
(28.10.2008 в 23:00)
| | $nomer = $str + 5;
почему? | |
|
|
|
|
|
|
|
для: 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");
Он его просто ингнорирует... Кто-нибудь подключите его к базе попробуйте... Пожалуйста | |
|
|
|
|
|
|
|
для: TanTaL91
(29.10.2008 в 14:12)
| | Может быть я не по теме скажу... но зачем в этом скрипте 2 зароса на выборку... сначала считаем количество затронутых строк а потом ещё раз выдераем маленький участок из базы... куда проще бло бы сделать только первый запрос а потом работать с матрицей значений?
Я не прав? | |
|
|
|
|
|
|
|
для: spider-x
(30.10.2008 в 16:21)
| | первым запросом нужно было получить число строк, а не сами строки. Но человек этого походу делать не научился еще.
Работать со всем рядом значений может и не получиться, если их слишком много. А постраничка подразумевает, что их слишком много.
Есть еще в местном диалекте вариант SQL_CALC_FOUND_ROWS .
Впрочем LIMIT - тоже ж диалект, так что... | |
|
|
|
|
|
|
|
для: 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++;
}
|
Хотя может это я чего-то не понимаю... и это такой писк моды?
Но такие конструкции меня убивают ))) | |
|
|
|
|
|
|
|
для: TanTaL91
(29.10.2008 в 14:12)
| | конструкция LIMIT работает совсем не так, как Вы считаете.
Её вторым аргуметном является число записей ( в Вашем случае - пятерка) , а не то, что Вы написали.
Будете кричать - вообще отвечать не стану . | |
|
|
|
|
|
|
|
для: Trianon
(30.10.2008 в 16:43)
| | хахаха | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: spider-x
(30.10.2008 в 16:59)
| | а не легче использовать ceil() вместо round()?:D | |
|
|
|
|
|
|
|
для: 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>";
}
?>
|
| |
|
|
|