Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Ссылки на содержимое ячеек БД


Автор: lurnette 16.3.2013, 06:48
Всем доброго времени суток!
Вот такая проблема у меня возникла: есть таблица в MySQL, которая состоит из трех столбцов ("id", "title" и "description"). И есть программа,  которая выводит содержимое столбца "title" в виде списка. Нужно оформить этот список в форме ссылок, при нажатии на которые выводится содержимое соответствующих строк, но из столбца "description".
Вот код, все работает правильно, навигация по страницам имеется, только вот с ссылками беда.
Код

<?php
define('HOST', '127.0.0.1');
define('USER', 'root');
define('PASSWORD', '');
define('NAME_BD', 'db');

function yandex_link_bar($page, $count, $pages_count, $show_link)
{
// Если страница всего одна, то ничего не выводим
if ($pages_count == 1) return false;

$sperator = ' '; // Разделитель ссылок

// Сам постраничный вывод
// Если количество отображаемых ссылок больше кол-ва страниц
if ($pages_count <= $show_link + 1) $show_dots = 'no';
// Вывод ссылки на первую страницу
if (($begin > 2) && ($pages_count - $show_link > 2)) {
echo '<a href='.$_SERVER['php_self'].'?page=1> |< </a> ';
}
for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
{
$i = $begin + $j; // Номер ссылки
// Если страница рядом с началом, то увеличить цикл
if ($i < 1) continue;

if (!isset($show_dots) && $begin > 1) {
echo ' <a href='.$_SERVER['php_self'].'?page='.($i-1).'><b>...</b></a> ';
$show_dots = "no";
}
// Если номер ссылки больше возможного количества страниц
if ($i > $pages_count) break;
if ($i == $page) {
echo ' <a href><b>'.$i.'</b></a> ';
} else {
echo ' <a href='.$_SERVER['php_self'].'?page='.$i.'>'.$i.'</a> ';
}
// Если номер ссылки не равен кол-ву страниц и это не последняя ссылка
if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
// Вывод "..." в конце
if (($j == $show_link) && ($i < $pages_count)) {
echo ' <a href='.$_SERVER['php_self'].'?page='.($i+1).'><b>...</b></a> ';
}
}
// Вывод ссылки на последнюю страницу
if ($begin + $show_link + 1 < $pages_count) {
echo ' <a href='.$_SERVER['php_self'].'?page='.$pages_count.'> >| </a>';
}
return true;
} // Конец функции

// Подключение к базе данных
$connect = mysql_connect(HOST, USER, PASSWORD)
or die("No connect with database"        .mysql_error( ));
print ("Yes! Connected with database <br><br>");

mysql_select_db(NAME_BD, $connect)
or die ("No database"        .mysql_error( ));

// Подготовка к постраничному выводу
$perpage = 10; // Количество отображаемых данных из БД
if (empty($_GET['page']) || ($_GET['page'] <= 0)) {
$page = 1;
} else {
$page = (int) $_GET['page']; // Считывание текущей страницы
}
// Общее количество информации
$res = mysql_query("select count(id) as count from `table`") or die(mysql_error());
$row = mysql_fetch_assoc($res);
$count = $row['count'];
$pages_count = ceil($count / $perpage); // Количество страниц
// Если номер страницы оказался больше количества страниц
if ($page == 0) {
    $start_post = 0;
} else {
    $start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД
}
// Вызов функции, для вывода ссылок на экран
yandex_link_bar($page, $count, $pages_count, 10);

// Вывод информации из базы данных
echo '<p><b>Data output!</b></p>';
$query = 'select * from `table` limit '.$start_pos.', '.$perpage;
var_dump($query);
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
    // вот тут я пытался оформить ссылки, ссылки есть, но ссылаются не туда, куда надо
    echo '<p><a href="./?db=', $row['title'], '" target="_blank">', $row['title'], '</a></p>'; 
}
?>

Автор: Gold Dragon 16.3.2013, 09:29
для начала,  а попробуй ка вместо запятых точки поставить
Код

echo '<p><a href="./?db='. $row['title']. '" target="_blank">'. $row['title']. '</a></p>'; 

Автор: lurnette 16.3.2013, 15:22
Большое спасибо за ответ, но, к сожалению, ничего не изменилось(

Автор: Arantir 16.3.2013, 15:45
Цитата(lurnette @  16.3.2013,  05:48 Найти цитируемый пост)
echo '<p><a href="./?db=', $row['title'], '" target="_blank">', $row['title'], '</a></p>'; 

Ссылка — не путь к файлу на диске. Она должна быть либо абсолютной, либо относительно корня сайта. То есть, в ней не может быть никаких "." и "..".

Автор: lurnette 16.3.2013, 16:44
Хорошо, это я понимаю, но как это сделать?

Автор: Gold Dragon 16.3.2013, 18:06
Цитата(lurnette @  16.3.2013,  17:44 Найти цитируемый пост)
Хорошо, это я понимаю, но как это сделать? 
допустим у тебя title примерно так: "Это самый лучший форум" и тогда что у тебя будет за ссылка???
Цитата

./?db=%D0%AD%D1%82%D0%BE%20%D1%81%D0%B0%D0%BC%D1%8B%D0%B9%20%D0%BB%D1%83%D1%87%D1%88%D0%B8%D0%B9%20%D1%84%D0%BE%D1%80%D1%83%D0%BC%0A

Так не бывает...

как минимум должно быть так
Цитата

index.php?db=%D0%AD%D1%82%D0%BE%20%D1%81%D0%B0%D0%BC%D1%8B%D0%B9%20%D0%BB%D1%83%D1%87%D1%88%D0%B8%D0%B9%20%D1%84%D0%BE%D1%80%D1%83%D0%BC%0A

а лучше так конечно
Цитата

http://mysite.ru/index.php?db=%D0%AD%D1%82%D0%BE%20%D1%81%D0%B0%D0%BC%D1%8B%D0%B9%20%D0%BB%D1%83%D1%87%D1%88%D0%B8%D0%B9%20%D1%84%D0%BE%D1%80%D1%83%D0%BC%0A


Но вот чувствую что это бред... привязывать нужно к идентификатору, т.е. примерно так
Цитата

http://mysite.ru/index.php?db=123


А если используется ЧПУ то так
Цитата

http://mysite.ru/db/jeto-samyj-luchshij-forum.html


Автор: lurnette 16.3.2013, 19:21
я тут немного поковырялся, и вот что получилось:
Код

echo '<p><a href="http://localhost/phpmyadmin/index.php?db='. $row['description']. '" target="_blank">'. $row['title']. '</a></p>'; 


теперь при нажатии на ссылку открывается моя БД в phpMyAdmin и слева выводится содержимое нужной ячейки (правда, при этом он пытается найти таблицу в БД с таким названием). Так не пойдет, мне не нужно чтобы ссылка была в БД, я хочу, чтобы содержимое из БД выводилось.

Автор: Gold Dragon 17.3.2013, 17:07
что за бред?  smile что должно открываться если нажать на ссылку?
Передавать описание через GET по меньшей мере очень глупо  при условии что есть ID

Передаёшь ID
Получаешь ID из GET
Делаешь запрос к базе, в условие ставишь ID
И получаешь описание


PS
пример какой-то очень древний или из очень старого "учебника"... 
Во-первых, всё в одной куче
Во-вторых, MySQL - уже устарел.. Используй или MySQLi ну или PDO

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)