[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скрипт галереи
wmasternikita
Здравствуйте!

Есть таблица с значениями:
id, meta_k, title, mini_img, cat

Есть файл gall.php

Необходимо следующее.
При переходе на gall.php переменная id (если её нет) становится равной 1, если же есть вытаскивается из адресной строки. Аналогично и с cat.
После чего из бд вытаскиваются значения соответствующие переменым и выводится картинка.
Ниже картинки Две кнопочки:
Следующее изображение в галереи
И предыдущее

Есть код:


$db = mysql_connect ("localhost","mrguest","2222222222");
mysql_select_db("mrguest_p",$db);

if (isset($_GET['cat'])) {$cat = $_GET['cat']; }
if (!isset($cat)) {$cat = 1;}
if (isset($_GET['id'])) {$id = $_GET['id']; }
$result = mysql_query("SELECT * FROM pictures WHERE id='$id'",$db);
$myrow = mysql_fetch_array($result);

$result2 = mysql_query("SELECT * FROM pictures WHERE cat='$cat'",$db);
$myrow2 = mysql_fetch_array($result2);

$old_id = $myrow2["id"] - 1;
$new_id = $myrow2["id"] + 1;

$random=rand(1,1000);

printf ("
%s
<img src='%s'></a>
<br>
<a title='Предыдущее изображение' href='gall.php?id=%s&cat=%s'><img src='Images/leftarrow.gif'/></a>
<a title='Следующее изображение' href='gall.php?id=%s&cat=%s'><img src='Images/rightarrow.gif'/> <br>
<a href='gall.php?id=%s&cat=%s' class='contentlink'>Случайное фото</a> <br><a href='%s' class='contentlink'>Скачать картинку</a>
</p></td>
</tr>
<table>
"
, $myrow2["title"], $myrow2["mini_img"], $old_id, $cat, $new_id, $cat, $random, $cat, $myrow2["mini_img"]);
?>


Собственно проблема в следующем.
Как сделать ссылку на предыдущее и следующее изображение, чтобы учитывалась открытая пользователем категория?
Заранее плюсую и благодарю :)



Спустя 54 минуты, 35 секунд (17.10.2011 - 18:34) kovaldm написал(а):
Цитата
Как сделать ссылку на предыдущее и следующее изображение, чтобы учитывалась открытая пользователем категория?

Передача параметров GETом.
Вперед
<a href="gall.php?id=3&cat=%s">

Назад
<a href="gall.php?id=1&cat=%s">

Спустя 8 минут, 11 секунд (17.10.2011 - 18:42) wmasternikita написал(а):
Так и было сделано.
$old_id = $myrow2["id"] - 1;
$new_id = $myrow2["id"] + 1;

Объясню поточнее.
Требуется вытащить каким-то образом из дб следующий и предыдущий id относительно текущего С ТЕМ ЖЕ параметром cat, что задал пользователь. Вроде понятно :)


И ещё такой вопросец. По какой причине id всегда становится равным единице, даже когда переходишь допустим по адресу: "gall.php?id=4&cat=1"?
if (isset($_GET['id'])) {$id = $_GET['id']; }

Вроде вытаскивает его из адресной строки, или я не прав?

Спустя 46 минут, 4 секунды (17.10.2011 - 19:28) kovaldm написал(а):
Цитата
Требуется вытащить каким-то образом из дб следующий и предыдущий id относительно текущего С ТЕМ ЖЕ параметром cat, что задал пользователь.

"SELECT id FROM tbl_name WHERE cat = $_GET['cat']"

Получится массив с id шниками данной категории.

Вот это

if (isset($_GET['cat'])) {$cat = $_GET['cat']; }
if (!isset($cat)) {$cat = 1;}


замени на

$cat = (empty($_GET['cat']))? 1 : $_GET['cat'];

Спустя 21 час, 12 минут, 11 секунд (18.10.2011 - 16:40) wmasternikita написал(а):
Благодарю, почти получилось. :)

Теперь следующий вопрос:
$id = (empty($_GET['id']))? 1 : $_GET['id'];

Как в этом моменте при отсутствующем id сделать его равным не единице, а минимальному id с параметром cat='$cat'?


Аналогично, как сделать кнопку следующее/предыдущее изображение?
Например есть изображения с cat 1 и id
1 2 3 5 6
А у изображения с id= 4 - cat= 2.
Как узнать следующий и предыдущий id относительно переменной $id из определённой категории и вывести их?

Надеюсь понятно объяснил

Спустя 4 минуты, 56 секунд (18.10.2011 - 16:45) imbalance_hero написал(а):
WHERE `id` > $_GET['id'] ORDER BY `id` LIMIT 1;
WHERE `id` < $_GET['id'] ORDER BY `id` DESC LIMIT 1;

Спустя 1 минута, 26 секунд (18.10.2011 - 16:47) imbalance_hero написал(а):
wmasternikita
"Как в этом моменте при отсутствующем id сделать его равным не единице, а минимальному id с параметром cat='$cat'?"
if(empty)
тут запрос на MIN(`id`)
else
$_GET['id']

Спустя 14 минут, 43 секунды (18.10.2011 - 17:02) kovaldm написал(а):
Цитата
Как в этом моменте при отсутствующем id сделать его равным не единице, а минимальному id с параметром cat='$cat'?

SELECT MIN(id) FROM tbl_name WHERE cat = $cat

Спустя 2 часа, 2 минуты, 3 секунды (18.10.2011 - 19:04) wmasternikita написал(а):
Парни, нереальное спасибо. Почти всё дописал.
Последнее "но"


if(empty($id))
{
$result4 = mysql_query ("SELECT MIN(id) FROM pictures WHERE cat='$cat'",$db);
$myrow4 = mysql_fetch_array($result4);

$id = $myrow4['id'];
}
else
{
$id = $_GET['id'];
}


Вроде id должно браться из адресной строки, если не получается из дб, однако оно попросту обращется в 0. В чём ошибка?

Спустя 17 минут, 37 секунд (18.10.2011 - 19:21) imbalance_hero написал(а):
$id = $myrow4['id']; - возвращает FALSE, а не id.
echo '<pre>'.print_r($myrow4,1).'</pre>';

Сделай, сразу после $id = myrow4['id']; и ты увидешь, что MIN(id) возвращает не `id`. :)
Как правильно записать - сейчас не подскажу, сначала сам проверь, а потом возвращайся.

Спустя 48 минут, 59 секунд (18.10.2011 - 20:10) kovaldm написал(а):
Запрос такой сделай
"SELECT MIN(id) AS id FROM pictures WHERE cat=". $cat

Здесь лутше так
$myrow4 = mysql_fetch_assoc($result4); 

Спустя 1 час, 1 минута, 36 секунд (18.10.2011 - 21:12) imbalance_hero написал(а):
kovaldm
Вот приблизительно тоже самое я хотел написать уже после того, как человек запустит и проверит, какие данные у него были выбраны из БД smile.gif

Спустя 8 минут, 58 секунд (18.10.2011 - 21:21) kovaldm написал(а):
Опередил. tongue.gif

Спустя 5 минут, 19 секунд (18.10.2011 - 21:26) imbalance_hero написал(а):
kovaldm
Нее, я просто ждал ответа на мой вопрос smile.gif

Спустя 13 часов, 8 минут, 56 секунд (19.10.2011 - 10:35) wmasternikita написал(а):
imbalance_hero, проверил. осознал что возвращается далеко не id, а нечто странное))
kovaldm, сенк, сделал так:
if(empty($id))
{
$result4 = mysql_query ("SELECT MIN(id) AS id FROM pictures WHERE cat=". $cat);
$myrow4 = mysql_fetch_assoc($result4);
$id= $myrow4['id'];

}
else
{
$_GET['id'];
}

Но id всегда обращается в еденицу на странице. Почему? :)

Спустя 5 часов, 58 минут, 2 секунды (19.10.2011 - 16:33) imbalance_hero написал(а):
Может быть потому что минимальная запись = 1 ? smile.gif

Спустя 16 минут, 11 секунд (19.10.2011 - 16:49) kovaldm написал(а):
Покажите какой код получился.

Спустя 30 минут, 43 секунды (19.10.2011 - 17:20) Guest написал(а):
а нет, вру.
не в еденицу, а в MIN(id) из указанной категории.
хотя такое должно происходить только когда id отсутствует. blink.gif

Спустя 6 минут, 46 секунд (19.10.2011 - 17:27) Guest написал(а):
imbalance_hero, именно так. но оно должно принимать значение минимальной записи только тогда, когда в адресной строке нет переменной, а если же там есть id, GETaть его оттуда.


$db = mysql_connect ("localhost","gegegge","egegeg");
mysql_select_db("mrguest_pophone",$db);

$cat = (empty($_GET['cat']))? 1 : $_GET['cat'];

if(empty($id))
{
$result4 = mysql_query ("SELECT MIN(id) AS id FROM pictures WHERE cat=". $cat);
$myrow4 = mysql_fetch_assoc($result4);

}
else
{
$_GET['id'];
}

$result = mysql_query("SELECT * FROM pictures WHERE id='$id' AND cat='$cat'",$db);
$myrow = mysql_fetch_array($result);


Код.

Спустя 21 минута, 4 секунды (19.10.2011 - 17:48) kovaldm написал(а):
Ну дык он нигде не идентифицируется.

Спустя 5 минут, 58 секунд (19.10.2011 - 17:54) imbalance_hero написал(а):
WHERE id='$id'

Но я не вижу в скирпте, откуда ПОЯВИЛАСЬ $id, её попросту нет!

Спустя 6 минут, 31 секунда (19.10.2011 - 18:00) wmasternikita написал(а):
Сделал так:
if(empty($id))
{
$result4 = mysql_query ("SELECT MIN(id) AS id FROM pictures WHERE cat=". $cat);
$myrow4 = mysql_fetch_assoc($result4);
$id = $myrow4['id'];

}
else
{
$id = $_GET['id'];
}


Всё равно id всегда равно MIN(id) WHERE cat=$cat,
даже когда в адресной строке
gall.php?id=6&cat=1

Спустя 9 минут, 2 секунды (19.10.2011 - 18:09) imbalance_hero написал(а):
Вернёмся на начало, перед условием откуда у тебя появляется $id ? Я не нашел инициализацию переменной.
Может быть ты путаешь её с суперглобальной переменной $_GET['id'], хотя врядли, они же имеют абсолютно разные правописания smile.gif

Спустя 20 минут, 34 секунды (19.10.2011 - 18:30) wmasternikita написал(а):
Точно. Вот задать её я забыл.
<? 
$db = mysql_connect ("localhost","mrguest","5224551");
mysql_select_db("mrguest_pophone",$db);

$cat = (empty($_GET['cat']))? 1 : $_GET['cat'];
$id = 0;

if(empty($id))
{
$result4 = mysql_query ("SELECT MIN(id) AS id FROM pictures WHERE cat=". $cat);
$myrow4 = mysql_fetch_assoc($result4);
$id = $myrow4['id'];

}
else
{
$id = $_GET['id'];
}

$result = mysql_query("SELECT * FROM pictures WHERE id='$id' AND cat='$cat'",$db);
$myrow = mysql_fetch_array($result);

?>

Правильно?

Хотя всё равно id не принимает значение из адресной строки.

Спустя 2 минуты, 38 секунд (19.10.2011 - 18:32) Winston написал(а):
Цитата (wmasternikita @ 19.10.2011 - 18:30)
Хотя всё равно id не принимает значение из адресной строки.

А написать
print_r($_GET);

И передать в адресную строку, потом посмотрите, что выдаст.

Спустя 11 минут, 44 секунды (19.10.2011 - 18:44) kovaldm написал(а):
$id = 0;

if(empty($id))
{
$result4 = mysql_query ("SELECT MIN(id) AS id FROM pictures WHERE cat=". $cat);
$myrow4 = mysql_fetch_assoc($result4);
$id = $myrow4['id'];

}
else
{
$id = $_GET['id'];
}

Проверьте какой блок кода ВСЕГДА будет отрабатывать при
$id = 0;

Спустя 5 минут, 16 секунд (19.10.2011 - 18:49) wmasternikita написал(а):
kovaldm, при id = 0 обрабатывает
$result4 = mysql_query ("SELECT MIN(id) AS id FROM pictures WHERE cat=". $cat);
$myrow4 = mysql_fetch_assoc($result4);
$id = $myrow4['id'];

игнорируя else.

Цитата
И передать в адресную строку

не совсем понял что имеете в виду.

Спустя 9 минут, 53 секунды (19.10.2011 - 18:59) kovaldm написал(а):
Значит надо как-то по другому инициализировать $id.

Спустя 3 минуты, 50 секунд (19.10.2011 - 19:03) wmasternikita написал(а):
Как например?

Спустя 3 минуты, 16 секунд (19.10.2011 - 19:06) kovaldm написал(а):
Ты присваиваешь $id = 0 и затем проверяешь его на пустоту. Зачем?

Спустя 5 минут, 29 секунд (19.10.2011 - 19:12) wmasternikita написал(а):
kovaldm, опа.
Всё, парни.

Сделал таким образом:

$cat = (empty($_GET['cat']))? 1 : $_GET['cat'];
$id = 0;

if(empty($_GET ['id']))
{
$result4 = mysql_query ("SELECT MIN(id) AS id FROM pictures WHERE cat=". $cat);
$myrow4 = mysql_fetch_assoc($result4);
$id = $myrow4['id'];

}
else
{
$id = $_GET['id'];
}


Заместо $_GET ['id'] я пытался проверить по сути своей 0, вот в чём ошибка.

Благодарю kovaldm и imbalance_hero, без Вас бы точно не разобрался во всём этом ;)

Спустя 49 минут (19.10.2011 - 20:01) imbalance_hero написал(а):
$_GET - это суперглобальный массив, который приходит из адресной строки. Обычные переменные к нему не имеют отношения.
Быстрый ответ:

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