Написать самому скрипт Каталога ссылок

Разработка своих веб-приложений и страничек

Написать самому скрипт Каталога ссылок

Сообщение Exet » 02 фев 2009, 03:49

Нужно сперва создать 3 таблицы, в 1-ой (категории) будут храниться названия категорий, во 2-ой (sub_categories) будут подкатегории, а уже в 3-ей (links) сами ссылки. Создаем:

Код: Выделить всёРазвернуть
CREATE TABLE categories (
id int(11) NOT NULL auto_increment, # уникальный идентификатор
name varchar(255) NOT NULL default '', # название категории
PRIMARY KEY (id), UNIQUE KEY id (id,name)
)

CREATE TABLE sub_categories (
id int(11) NOT NULL auto_increment, # уникальный идентификатор подкатегории
cid int(11) NOT NULL default '0', # идентификатор категории, куда входит данная подкатегория
name varchar(255) NOT NULL default '', # название подкатегории
PRIMARY KEY (id), UNIQUE KEY id (id)
)

CREATE TABLE links (
id int(11) NOT NULL auto_increment, # уник. идент-р
name varchar(100) NOT NULL default '', # краткое название ссылки
url varchar(255) NOT NULL default '', # адрес в интернете (http://vasya.pupkin.ru)
description text, # полное описание ссылки
sid int(11) NOT NULL default '0', # идентификатор подкатегории
counter int(11) NOT NULL default '0', # счетчик посещений ссылки с Вашего сайта
PRIMARY KEY (id), UNIQUE KEY id (id)
)

Все эти таблицы можно создать с помощью очень удобного phpMyAdmin (http://phpwizard.net/phpMyAdmin) или следующим скриптом (прилагается install.php)

Код: Выделить всёРазвернуть
<?
include "config.php"; // здесь идет подключение к БД
mysql_query("CREATE TABLE categories (id int(11) NOT NULL auto_increment,
name varchar(255) NOT NULL default '', PRIMARY KEY (id), UNIQUE KEY id (id,name))");
mysql_query("CREATE TABLE sub_categories (id int(11) NOT NULL auto_increment,
cid int(11) NOT NULL default '0', name varchar(255) NOT NULL default '',
PRIMARY KEY (id), UNIQUE KEY id (id))");
mysql_query("CREATE TABLE links (id int(11) NOT NULL auto_increment,
name varchar(100) NOT NULL default '',
url varchar(255) NOT NULL default '', description text, sid int(11) NOT NULL default '0',
counter int(11) NOT NULL default '0', PRIMARY KEY (id), UNIQUE KEY id (id))");
?>

Создаются скрипты (index.php, add.php, config.php, go.php).

Рассмотрим сначала index.php

Код: Выделить всёРазвернуть
[code]<?
include "config.php";
include "header.inc.php"; // шапка страницы
[/code]
// если не указана категория (cid) или подкатегория (sid)
выводим список всех основных категорий (главная страница)
[code]if(!isset($cid) && !isset($sid)) {[/code]
// выясняем кол-во категорий
[code]$cats = tablecount($t_category);

$i = 0;[/code]
// посылаем запрос выборки категорий из базы данных
[code]$qc = mysql_query("select * from $t_category order by name");

print "<div align=center>n";
print "<table width=600 cellspacing=2 cellpadding=2 border=0>n";
[/code]
// последовательно обходим все категории
[code]while($qcrow = mysql_fetch_array($qc)) {
// если четный индекс у категории значит начинаем новую строку в таблице
if($i%2 == 0) { print "<tr>n"; }

print "<td width=50%>n";[/code]

// выводим ссылку на список подкатегорий в данной категории

[code]print "<b><a href="index.php?cid=".$qcrow["id"].
"">".$qcrow["name"]."</a></b><br>n";[/code]

// здесь происходит выборка подкатегорий для данной категории
// и ограничиваемся первыми пятью (далее стоит условие)
[code]$qs = mysql_query("select * from $t_subcategory where
cid='".$qcrow["id"]."' order by name");
$k = 0;
while($qsrow = mysql_fetch_array($qs)) {
if($k == 5) {
// если это шестой по счету выводим ссылку на список всех подкатегорий
print "<a href="index.php?cid=".$qcrow["id"]."">...</a>";
break;
}
print "<a href="index.php?sid=".$qsrow["id"]."">".$qsrow["name"]."</a>n";
$k++;
}
print "</td>n";[/code]
// если это последняя подкатегория и их общее кол-во нечетное выводим пустой эл-т таблицы
i[code]f($i+1 == $cats) { if($cats%2 != 0) { print "<td> </td>n"; } }[/code]

// если нечетная, выводим конец строки
[code]if($i%2 != 0) { print "</tr>n"; }
$i++;
}
print "</table>n";
print "</div>n";
} elseif(isset($cid)) {[/code]
// Выводим список всех подкатегорий для указанной категории $cid

// получаем общее кол-во подкатегорий для $cid, эта ф-я находится в файле config.php
[code]$cats = tablecount($t_subcategory, " where cid=$cid");[/code]

// запрос на выборку категории из таблицы (чтобы получить ее имя)
[code]$qn = mysql_query("select * from $t_category where id='$cid' order by name");[/code]
// получаем первую категорию (всего одна :))
[code]$qnrow = mysql_fetch_array($qn);[/code]
// выбираем _все_ подкатегории для $cid
[code]$qs = mysql_query("select * from $t_subcategory where cid='$cid' order by name");
$i = 0;

print "<div align=center>n";
print "<b><a href="index.php">Главная </a> » ".$qnrow["name"]."</b><br><br>n";
print "<table width=600 cellspacing=2 cellpadding=2 border=0>n";
// обходим все подкатегории и выводим их в браузер (принцип такой же как и для категорий)
while($qsrow = mysql_fetch_array($qs)) {
if($i%2 == 0) { print "<tr>n"; }
print "<td width=50%>n";
print "<a href="index.php?sid=".$qsrow["id"]."">".$qsrow["name"]."</a>n";
print "</td>n";
if($i+1 == $cats) { if($cats%2 != 0) { print "<td> </td>n"; } }
if($i%2 != 0) { print "</tr>n"; }
$i++;
}
print "</table></div>n";
} elseif(isset($sid)) {[/code]
// А здесь, собственно, уже выводим все ссылки

// берем подкатегорию $sid (для выяснения названия подкатегории)
[code]$qs = mysql_query("select * from $t_subcategory where id='$sid' order by name");
$qsrow = mysql_fetch_array($qs);
// а здесь выясняем название категории
$qc = mysql_query("select * from $t_category where id='".$qsrow["cid"]."' order by name");
$qcrow = mysql_fetch_array($qc);[/code]

// Выводим местонахождение и начало таблицы
[code]print "<div align=center>n";
print "<b><a href="index.php">Главная </a> »
<a href="index.php?cid=".$qcrow["id"]."">".$qcrow["name"]."</a> » ".$qsrow["name"]."
</b><br><br>n";

print "<table width=600 cellspacing=2 cellpadding=2 border=0>n";
[/code]
// запрос на все ссылки для данной подкатегории $sid с сортировкой по имени
// можно конечно выводит как и самый популярный (больше всего кликов - order by counter)
[code]$ql = mysql_query("select * from $t_links where sid='$sid' order by name");

// если полученное кол-во ссылок 0, то сообщаем об этом
if(mysql_num_rows($ql) == 0) { print "<tr><td>Нет ссылок</td></tr>"; }
else {
// теперь обходим все ссылки по-очереди и выводим их.
while($qlrow = mysql_fetch_array($ql)) {
print "<tr>n";
print "<td>n";

print "Название: <b><a target=_blank href="go.php?id=".$qlrow["id"]."">".
>$qlrow["name"]."</a></b><br><br>n";
print "Описание: ".$qlrow["description"]."<br><br>";
print "Кликов: ".$qlrow["counter"];
print "</td>n";
print "</tr>n";
}
}
print "</table>n</div>n";
}
include "footer.inc.php";
?>[/code]

add.php - скрипт для добавления категорий/подкатегорий (add.php?what=category) и самих ссылок (add.php?what=link).

<?
include "config.php";
include "header.inc.php";

print "<div align=center>n";
print "<table width=600 cellspaing=2 cellpadding=2 border=0>n";


// переменная what хранит значение category/link чтобы знать что добавлять
Код: Выделить всёРазвернуть
if(@$what == "category") { //
if(!isset($submit)) { // если не нажата кнопка "Добавить" (Submit) выводим форму для заполнения
?>
<form method=post action="add.php?what=category">
<tr><td width=50%>Выберите категорию, в которую добавлять подкатегорию:<br>Или введите новую</td>
<td width=50%>
<select class=select name=category size=1 style="width: 100%;">
<option selected value=#>Выберите категорию</option>
<? // выводим все категории
$qc = mysql_query("select * from $t_category");
while($qcrow = mysql_fetch_array($qc)) {
print "<option value=".$qcrow["id"].">".$qcrow["name"]."</option>n";
}
?>
</select>
<input type=text name=categorystr value="" style="width: 100%">
</td></tr>
<tr><td width=50%>Введите название подкатегории</td>
<td width=50%>
<input type=text name=subcategory value="" style="width: 100%">
</td></tr>
<tr><td colspan=2><input type=submit name=submit value="Добавить">
</td></tr>
</form>
<?
} else { // обрабатываем нажатие кнопки "Добавить"
if($categorystr != "") {
// узнаем, есть ли такая категория уже в таблице
$qcheck = mysql_query("select * from $t_category where name='$categorystr'");
if(mysql_num_rows($qcheck) == 0) { // нет
// Если введено название новой категории то добавляем ее
$qi = mysql_query("insert into $t_category values('', '$categorystr')");
$category = mysql_insert_id(); // узнаем id для новой категории
// выводим сообщение о том что добавлена.
print "<tr><td>Новая категория добавлена (<i>$categorystr</i>)</td><tr>n";
} else {

// если категория уже существует, значит узнаем
// ее идентификатор и записываем в $category
Код: Выделить всёРазвернуть
$qcrow = mysql_fetch_array($qcheck);
$category = $qcrow["id"];
}
if($subcategory != "") { // добавляем подкатегорию, если ее ввели
mysql_query("insert into $t_subcategory values('', '$category', '$subcategory')");
print "<tr><td>Подкатегория <i>$subcategory</i> добавлена.</td></tr>";
}
}
} elseif(@$what == "link") {
// Добавление новой ссылки
if(!isset($submit)) { // если не нажата кнопка Добавить выводим форму для ввода
?>
<form method=post action="add.php?what=link">
<tr><td width=50%>Добавлять в:</td>
<td>
<?
print "<select name=category size=1 style="width: 100%;">";
print "<option selected value="#">Выберите категорию</option>n";

// Выводим все категории в следующем формате Кат1 -> подкат1, Кат1 -> подкат2 ну и т.д.
Код: Выделить всёРазвернуть
$qc = mysql_query("select * from $t_category order by name");
while($qcrow = mysql_fetch_array($qc)) {
$qs = mysql_query("select * from $t_subcategory where cid = '".
$qcrow["id"]."' order by name");

while($qsrow = mysql_fetch_array($qs)) {
print "<option value=".$qsrow["id"].">".$qcrow["name"]." » ".
$qsrow["name"]."</option>n";
}
}
print "</select>n";
?>
</td>
</tr>
<tr>
<td>Название сайта:</td>
<td><input type=text name=name value="" style="width: 100%"></td>
</tr>
<tr>
<td>Адрес сайта (url):</td>
<td><input type=text name=url value="" style="width: 100%"></td>
</tr>
<tr>
<td>Описание сайта:</td>
<td><textarea name=description rows=5 style="width: 100%"></textarea></td>
</tr>
<tr>
<td colspan=2><input type=submit name=submit value="Добавить"></td>
</tr>
<?
} else { // обрабатываем нажатие на кнопку "Добавить"

// Добавляем в таблицу новую ссылку
Код: Выделить всёРазвернуть
mysql_query("insert into $t_links values('', '$name', '$url', '$description',
'$category', '0')");
print "<tr><td>Ссылка добавлена в каталог.
<a href="index.php?sid=$category">Перейти в подкатегорию</a></td></tr>n";
}
}
print "</table>n";
print "</div>n";

include "footer.inc.php";
?>

go.php - скрипт для перенаправления браузера на ссылку и увеличения счетка (counter)

<?
include "config.php";

$error = 0; // устанавливаем флаг ошибки в 0
if(!isset($id)) $error = 1; // если не указан идентификатор ссылки, след-но ошибка
else {
// выбираем ссылку из таблицы (должна быть всего одна, поэтому ограничиваем выборку - limit 1)
$result = mysql_query("select * from $t_links where id = '$id' limit 1");

// если не найдена ссылка с таким идентификатором, значит ошибка
if(mysql_num_rows($result) == 0) {
$error = 2;
} else {
// получаем строку из таблицы об указанной ссылке
$row = mysql_fetch_array($result);
// увеличиваем счетчик и записываем его обратно в таблицу (update)
$counter = $row["counter"];
$counter++;
$url = $row["url"];
$resultu = mysql_query("update $t_links set counter=$counter where id=$id");
// перенаправляем на нашу найденную ссылку
header("Location: $url");
}
}
// Обрабатываем ошибки и сообщаем о них.
if($error != 0) {
print "<font size=+1><b>";
switch($error) {
case 1: print "Вы не указали идентификатор"; break;
case 2: print "Вы указали неверный идентификатор"; break;
}
print "</font></b>";
}
?>


А в скрипте config.php идет простое подключение к БД MySQL и функция для получения общего кол-ва строк в таблице:

Код: Выделить всёРазвернуть
<?
$database["name"] = "mysql";
$database["host"] = "localhost";
$database["database"] = "links";
$database["user"] = "root";
$database["password"] = "";

$t_category = "categories";
$t_subcategory = "sub_categories";
$t_links = "links";

$db = mysql_connect($database["host"], $database["user"], $database["password"]);
mysql_select_db($database["database"], $db);

function tablecount($name, $cond = "") {
$q = mysql_query("select count(*) as total from $name $cond");
if(mysql_num_rows($q) == 0) return 0;

$qrow = mysql_fetch_array($q);
return $qrow["total"];
}
?>


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

Все скрипты прилагаются и являются рабочими. Надо только настроить правильно информацию для БД и создать таблицы в указанной базе данных. (install.php
Последний раз редактировалось Exet 02 фев 2009, 17:54, всего редактировалось 4 раз(а).
Изображение
Аватара пользователя
Exet
Активный участник
 
Сообщения: 131
Зарегистрирован: 07 дек 2007, 16:43
Откуда: Volsk Style Records
Домен: http://mc-style.vfose.ru/

Re: Написать самому скрипт Каталога ссылок

Сообщение DPX-Infinity » 02 фев 2009, 09:25

Тег [ code] не используешь специально или потому что забыл? Исправь!
Изображение
Переходите на Jabber! За ним будущее!
Желаю вам опенсорса!
Аватара пользователя
DPX-Infinity
Активный участник
 
Сообщения: 723
Зарегистрирован: 02 сен 2007, 20:45
Откуда: Саратов

Re: Написать самому скрипт Каталога ссылок

Сообщение Костик » 02 фев 2009, 09:27

потому что копипастер ленивый 8)
FreeBSD 9.2 and Fedora 18 user
Аватара пользователя
Костик
Активный участник
 
Сообщения: 1944
Зарегистрирован: 03 сен 2007, 02:15

Re: Написать самому скрипт Каталога ссылок

Сообщение Exet » 02 фев 2009, 09:47

эта статья копирована из интернета я думаю она каму нибудь она пригодится
Изображение
Аватара пользователя
Exet
Активный участник
 
Сообщения: 131
Зарегистрирован: 07 дек 2007, 16:43
Откуда: Volsk Style Records
Домен: http://mc-style.vfose.ru/

Re: Написать самому скрипт Каталога ссылок

Сообщение JavaExport » 02 фев 2009, 12:22

Exet писал(а):эта статья копирована из интернета я думаю она каму нибудь она пригодится
А я думаю нет. Так как не кто не будет разбирать где тут код а где описание.
Ты посмари на мою темку рядом как она написана даже не одного вопроса не возникло. :)
JavaExport
Активный участник
 
Сообщения: 937
Зарегистрирован: 15 сен 2008, 18:45
Домен: http://mobilephone.ixbb.r

Re: Написать самому скрипт Каталога ссылок

Сообщение Exet » 02 фев 2009, 13:04

кому нада тот поймет :crazy:
Изображение
Аватара пользователя
Exet
Активный участник
 
Сообщения: 131
Зарегистрирован: 07 дек 2007, 16:43
Откуда: Volsk Style Records
Домен: http://mc-style.vfose.ru/

Re: Написать самому скрипт Каталога ссылок

Сообщение Conteo » 02 фев 2009, 13:10

Ты неумный штоле? Оформи нормально
Изображение
Пользователи федоры - как тараканы. Слабые духом и нервами давно вымерли, а оставшихся в живых уже ничем не взять.
Аватара пользователя
Conteo
Активный участник
 
Сообщения: 1813
Зарегистрирован: 14 мар 2008, 13:21
Откуда: Саратов, Заводской район
Домен: http://conteo.vfose.ru

Re: Написать самому скрипт Каталога ссылок

Сообщение Rostov114 » 02 фев 2009, 14:31

>_< ужос...
Некоммерческий проект «HSDN»
Аватара пользователя
Rostov114
Автор
 
Сообщения: 3198
Зарегистрирован: 18 окт 2007, 02:21


Вернуться в PHP, HTML, CSS...

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 162