PHP-Logo
Druckansicht von http://www.php-homepage.de/artikel/artikel23.html

PHP-Logo
[ Main Menue ]
Homepage
Downloads
Artikel
Scripts
Forum
PHP-Manual
Links
News
Freelancer
Bücher
RuDolF
Suche
Misc
Über diese Seite
Kontakt
Wunschzettel
MyGuestbook
*
[ Suche ]
*
[ Partner ]


Domain Webhosting
*
[ Partner Sites ]
Dynamic-Webpages
PHP-Center
PHP-Welt
phpUG.de
Random Link
*
[ Autoren gesucht! ]
PHP-Homepage.de sucht laufend Autoren für News und Artikel
Interesse?
*

Follow on Twitter - @phphomepage

RSS Feed blogoscoop

Datenbankgestützte Links in Websites mit PHP und MySQL von Andreas Bender

Ihre Webseite wird mit der Zeit immer größer, auf verschiedenen Seiten befinden sich Links zu ein und derselben Seite und Sie wollen all Ihre Links nocheinmal auf einer Übersichtsseite zusammenfassen. Was hindert Sie daran? Zu viel Tipparbeit? Was ist, wenn sich ein Link ändert? Sicherlich haben Sie genauso wenig Lust dazu, alle Seiten nach zu ändernden Links zu durchsuchen, wie ich.
Zu diesem Zweck habe ich mir eine kleine, aber sehr nützliche Funktion gebaut, die mir den gewünschten Link aus einer MySQL-Datenbank holt und den fertigen HTML-Code in den Text einbaut.

Als erstes legen Sie die benötigten Tabellen, Listing 1 und 2, in Ihrer Datenbank an:

CREATE TABLE gruppe (
id int(3) DEFAULT \'0\' NOT NULL auto_increment,
g_name varchar(30),
sort int(2) DEFAULT \'0\' NOT NULL,
PRIMARY KEY (id)
);
Listing 1: Tabellenstruktur für Tabelle gruppe

Die Tabelle gruppe dient zur Gruppierung der Links in der Übersichtsseite. Wenn Sie die SQL-Befehle 1:1 übernehmen, können Sie maximal 999 Gruppen anlegen (id int(3)) und Gruppennamen von 30 Zeichen Länge vergeben (g_name varchar(30)). Sie sehen, die Zahl in der Klammer gibt die Feldlänge an. Das Feld sort wird in der Übersichtsseite gebraucht, wenn Sie eine feste Reihenfolge der Gruppen wünschen.
So könnte der Inhalt der Tabelle gruppe aussehen:

id     : 1
g_name : Kids
sort   : 3

CREATE TABLE links (
id int(4) DEFAULT \'0\' NOT NULL auto_increment,
gruppe int(3),
url varchar(255),
text varchar(255),
target varchar(10),
sort int(2) DEFAULT \'0\' NOT NULL,
bemerkung tinytext,
PRIMARY KEY (id)
);
Listing 2: Tabellenstruktur für Tabelle links

In der Tabelle links werden, wie sollte es anders sein, die Links gespeichert. Über das Feld gruppe werden später die tabellen links und gruppe verknüpft. Das Feld text beinhaltet den Text, der in Ihrer Homepage als Link markiert ist, target den Namen des Frames, in der der Link geöffnet wird, und bemerkung wird wieder für die Übersichtsseite gebraucht.
So könnte der Inhalt der Tabelle links aussehen:

id        : 9
gruppe    : 3
url       : http://www.derkleineeisbaer.de/
text      : Der kleine Eisbär
target    : _blank
sort      : 0
bemerkung : Ein klasse Film, nicht nur für die Kleinen.

Die PHP-Funktion aus Listing 3 speichern Sie der Übersicht halber in einer extra Datei ab. Diese wird später per include() in das HTML-Dokument eingebunden.

<?php
function insert_link($id) {
$database = "links"; // Name Ihrer Datenbank
$server = "localhost"; // Name des Datenbankservers (meist localhost)
$user = "www"; // Ihr User
$passwd = ""; // Passwort des Users

// die Abfrage der Datenbank selbst
$result = mysql_connect($server,$user,$passwd);
$query = "SELECT url, text, target FROM links WHERE id=$id;";
$result = mysql_db_query($database,$query);

// Das Abfrageergebnis wird in Variablen gespeichert
list($url, $text, $target) = mysql_fetch_array($result);

// Der HTML-Code wird erzeugt und ...
$link = "<a href=\"$url\" target=\"$target\">$text</a>\n";

// ... an der Stelle eingebunden, von der die Funktion aufgerufen wurde
return $link;
}
?>

Listing 3: fnc_insert_link.php

Und so könnte Ihre HTML-Datei aussehen (Listing 4). Wenn Sie mit dem include() Probleme haben sollten, packen Sie an dessen Stelle einfach den Quelltext der kompletten Funktion (Listing 3).

<?php
include("fnc_insert_link.php");
?>

<html>
<head>
</head>
<body>
Wenn auch Sie in den Film <?php echo insert_link(9); ?> gehen wollen, werden sich Ihre Kinder sicherlich freuen.
</body>
</html>

Listing 4: Ihre HTML-Datei

Und? Haben Sie es ausprobiert?
Wenn alles läuft, können wir uns ja jetzt der Link-Übersicht (Listing 5) widmen. Vielleicht schauen Sie sich das Script erst einmal an. Es handelt sich nur um die Tabelle mit der Linkübersicht, die in eine vorhandene HTML-Seite einzubinden ist.

<table border="0" width="100%" cellspacing="0" cellpadding="5">

<?php
$database = "links";
$server = "localhost";
$user = "www";
$passwd = "";

$result = mysql_connect($server,$user,$passwd);
$query = "SELECT id, g_name FROM gruppe ORDER BY g_name;";
$result_gruppe = mysql_db_query($database,$query);

while ($row_gruppe = mysql_fetch_array($result_gruppe)) {

echo "<tr>\n";
echo "<th class=\"beige\" colspan=\"2\">$row_gruppe[g_name]</th>\n";
echo "</tr>\n";

$query = "SELECT url, text, target, bemerkung FROM links WHERE gruppe=$row_gruppe[id] ORDER BY text;";
$result_link = mysql_db_query($database,$query);

while ($row_link = mysql_fetch_array($result_link)) {

echo "<tr>\n";
echo "<td valign=\"top\"><a href=\"$row_link[url]\" target=\"$row_link[target]\">$row_link[text]</a></td>\n";
echo "<td>$row_link[bemerkung]</td>\n";
echo "</tr>\n";
}
echo "<tr><td colspan=\"2\"> </td></tr>\n";
}
?>
</table>

Listing 5: Übersichtsseite aller Links

Was passiert? Als erstes kommt die Abfrage der Tabelle gruppe. So, wie der Select-Befehl geschrieben ist, sortiert MySQL die Daten nach dem Gruppennamen (ORDER BY g_name). Sie erinnern sich, wir haben in dieser Tabelle auch ein Feld sort, womit eine andere Sortierung festgelegt werden kann. Möchten Sie diese verwenden, anstatt nach dem Gruppennamen zu sortieren, tauschen Sie g_name einfach gegen sort aus. Gleiches gilt natürlich auch für den zweiten Select-Befehl, der die zur jeweiligen Gruppe gehörigen Links aus der Tabelle links holt. Die While-Schleife wird sooft durchlaufen, bis alle Links für die entsprechende Gruppe gefunden sind. Dann ist die nächste Gruppe an der Reihe usw.

© 2002 by Andreas Bender - www.bender.li'
Die hier dargestellte Funktion darf frei verwendet und geändert werden, der Artikel nicht.

Zurück zur Übersicht
© Copyright 1999 - 2011 by Mark Kronsbein | Impressum | NutzungsbedingungenWeiterempfehlen | Seitenanfang
0.0202