Unkaputtbare Hyperlinks

Wer das Publizieren im Internet nicht bloß als technische Spielerei oder gar eine Designtätigkeit auffasst, wird automatisch ein digitaler Bibliothekar

Unkaputtbare Hyperlinks

Wer das Publizieren im Internet nicht bloß als technische Spielerei oder gar eine Designtätigkeit auffasst, wird automatisch ein digitaler Bibliothekar: "Wie in aller Welt verbreite ich unbrechbare Hyperlinks?" Ein wenig PHP und MySQL kann helfen - mit den Beispielscripten auch dem Einsteiger in die Welt der Webscripte.

Die Idee ist, eine weitere Adressierungsschicht über die reine Information einer Webseite und deren Adrese zu legen.

Ist der Hyperlink erst einmal versendet (per E-Mail) oder gepostet (im Usenet) hat man keine Kontrolle mehr über die Information.

Es wird gemeinhin empfohlen, bei Relaunches einfach mittels der Datei .htaccess (auf dem Apache Server) weiterzuleiten. Daß dies anscheinend nicht praktikabel durchgeführt werden kann, zeigt sich bei Recherchen in Suchmaschinen leider allzuhäufig.

Mein Konzept für eine möglichst unterbrechungsfreie Distribution von Hyperlinks nenne ich Metacodes. Die Idee ist, eine weitere Adressierungsschicht über die reine Information einer Webseite und deren Adrese zu legen,

  1. deren Verweisziel vom Webmaster jederzeit geändert werden kann,
  2. die möglicherweise leichter merkbar ist als ein kompletter URI und
  3. den Benutzer zielgenau glücklich macht.

Um diese Überlegungen nun auf gesunde Füße zu stellen: In der Praxis sieht es so aus, daß ich im Rahmen meiner Tätigkeit als Reiseleiter Gästen ein beliebiges Kürzel, wie ROM-2002 und meine Internetadresse mitteile. Auf dieser finden Sie ein Formularfeld, wo der Metacode eingegeben wird und ich damit z.B. auf ein Bilderbuch weiterleite. Das kommt stets sehr gut an: Zum einen können sich die Gäste den (von mir passend gewählten) Metacode leicht merken, zum anderen beinhaltet es in diesem Anwedungsfall sogar eine Art Authentifizierung.

Besser noch: Die Verknüpfung Adresse-Information muß im Zeitpunkt des Visitenkartenausteilens noch gar nicht bestehen. Bis bsw. amerikanische Gäste wieder daheim sind, kann ich Adresse ind Information in aller Ruhe nachträglich verknüpfen.

Oder bildlich ausgedrückt:

--------------------------------------------------
´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
´´´´´´´´´´´´´´´´´´Adressraum´´´´´´´´´´´´´´´´´´´´´´
´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
--------------------------------------------------
....||..PHP..||.......||.......||.......||........
....||.......||..Verknüpfung...||.......||........
..../......./......./......./....My./.SQL....
--------------------------------------------------
´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
´´´´´´´´´´´´´´´´´´Information´´´´´´´´´´´´´´´´´´´´´
´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
--------------------------------------------------

Am Ende des Artikel werden wir feststellen, dass dieses Konzept im Internet unter anderem Namen in aller Munde ist... Bis dahin werden wir uns aber etwas näher mit der technischen Umsetzung beschäftigen. Von der Sinnhaftigkeit überzeugt? Dann packen wir es an!

Das Script

Zuerst der Aufbewahrungsort meiner Metainformationen: Zum Speichern meiner Metacodes benutze ich folgende MySQL-Tabelle, die sich z. B. mit Hilfe von phpMyAdmin leicht anlegen läßt:

CREATE TABLE metacodes ( 
    id int(10) unsigned NOT NULL default '0',
    metacode varchar(32) default NULL,
    uri varchar(255) default NULL,
    counter int(10) unsigned NOT NULL default '0',
    PRIMARY KEY (id),
    UNIQUE KEY metacode (metacode)
) TYPE=MyISAM;

INSERT INTO metacodes VALUES (1, 'SEX', 'http://google.de/?q=sex', 4711);
INSERT INTO metacodes VALUES (2, 'EKD', 'http://www.ekd.de/', 7);

Definitionsgemäß ist der Besucher unserer Seiten zunächst in einer Bringschuld: Er muß den Metacode entweder in eine Form eingeben oder ihn schlichtweg durch Klick auf einen Link übermitteln. Wie dies geschieht, ist egal, Hauptsache, wir fangen es ab. Zum Beispiel so:

<?php
$metacode
='';
if(!empty(
$_POST['metacode']))
$metacode strtoupper($_POST['metacode']);
else if(!empty(
$_GET['metacode']))
$metacode strtoupper($_GET['metacode']);
//else if (!empty($_ENV['QUERY_STRING']))
//$metacode = strtoupper($_ENV['QUERY_STRING']);
else $metacode FALSE;
?>

Die beiden auskommentierten Zeilen dienen dazu, dieses Script in einem eigenen Verzeichnis als index.php laufen zu lassen. Möglicherweise hast Du wie ich eine Subdomain für alle administrativen Aufgaben, dort passt ein /metacode/ gut hinein.

Da bei mir alle Metacodes in Großbuchstaben in der Datenbank liegen, konvertiere ich der Genauigkeit halber den Eingabestring. Außerdem habe ich die Konvention, dass meine Angaben in der Datenbank alphanumerisch sind. Ich ersetze daher bei mir mit preg_replace alle Leerzeichen und andere Füllzeichen, die ich u. U. weitergebe. Aber das ist an dieser Stelle für das Konzept ohne Bedeutung. Jadenfalls: Wenn eine der obigen Bedingungen erfüllt wird, hat der Kommunikationssuchende seine Bringschuld erfüllt. Wir sind dran:

<?php
    
if($metacode != FALSE)
        @
mysql_connect ($host$user$pass) or die ("db conn schlug fehl"); 
        @
mysql_select_db($name) or die ("Falscher Datenbankname"); 
        
$result = @mysql_query("SELECT uri FROM metalinks WHERE metacode = '$metacode'"); 
        if (
$row = @mysql_fetch_assoc($result)) { 
            @
mysql_query("update metalinks set counter = counter+1 WHERE metacode ='$metacode'"); 
            
header("Location: $res[uri]"); 
            exit; 
        } 
        else
            
$metacode FALSE;
    }
// end if $metacode != FALSE
    
?>

Da die Benutzereingabe lediglich mit der Datenbank verglichen wird, sparen wir uns hier (und wirklich nur hier!) jede weitergehende Validierung. Ich deutete weiter oben ja schon eine abweichende Behandlung an, bei mir läuft alles noch durch drei/vier reguläre Ausdrücke.

Die Fehlerbehandlung:

Sollte trotz genauer Pflege unserer Daten in der Tabelle zur Laufzeit ein Fehler aufgetreten sein, behandeln wir diesen noch abschließend. Meinen Erfahrungen nach ist aber -wie bei Yahoo, Google et al.- der Grund zu 99% eine leere Variable. Wer in aller Welt verschwendet seine Onlinezeit eigentlich mit dem sinnentleerten Absenden leerer Formulare?

<?php
if($metacode == FALSE) {

    
//mail('user@example.com', 'Metacode alert', 
    //    "Metacode:rnEingabe nicht gefundenrnMetacode: $metacode",
    //    'From: Metacode alert <user@example.com>');

    //$_SESSION['metacodefehler'] = $metacode;

    
$output '<p>Ein Fehler trat auf!</p>';
    
$output.= '<p>Zählen Sie bis drei und <a href="'.$HTTP_REFERER;
    
$output.= '">gehen Sie zurück</a> auf die Seite, wo Sie hergekommen sind.';
    echo 
$output;
    exit;
}
?>

Wenn wir bereits eine Session gestartet haben, könnten wir den Fehler darin vermerken, oder sonst eine Fehlermeldung innerhalb unserer Seite auszugeben. Ich selbst habe dieses kurze Script im meiner autoprepend.ph liegen, durch die if-Bedingungen kostet es ja nicht viel Rechenzeit.

Weitere Verwendung

Du erinnerst Dich an die Überprüfung auf $_GET['metacode?']? Nun, mit dieser Zeile kann man das beschreibene System ungeahnt ausweiten. Denn leichter merkbar geht ja auch i. d. R. mit kürzer zu schreiben einher. Man macht den Link also kürzer. Oder auf neudeutsch: shorter. Do we make it? Yes, we do - we makeaShorterLink! In der Tat: Jede der "Wir machen Hyperlinks E-Mail-Fenster-tauglich" Seiten ist nichts anderes als solch ein Metasystem!
Auch sonst gibt es einige Ansatzpunkte, mit dem Hyperlink etwas vielfältiger umzugehen, etwa das PROJECT XANADU® oder auch die Xlinks in XML. Sollte einmal der Hyperlink abgeschaftt werden, brauchen wir nach diesem Tutorial lediglich die MySQL-Tabelle zu ändern.

Und wer genau hingesehen hat, bemerkt die elegante Möglichkeit, jemandem einen Click-Tracking Link unterzuschieben... Ein zusätzliches Auslösen einer E-Mail Benachrichtigung wird nicht schwer fallen.

Ich schließe daher dieses kleine Tutorial mit dem Quellcode für ein Eingabeformular ab. Wer meine Webseite a.prior-I.De besucht, kann dort ja mal ZOOM eingeben. Oder den gerade beworbenen Metacode ansurfen...

<form action="<?=$PHP_SELF?>" method="POST">
<input type="text" name="metacode" size="7" maxlength="32" />
<input type="submit" name="submit" value="Hinsurfen!" />
<?php
if($_SESSION['metacodefehler']) {
    echo 
'<p>Ein Fehler trat auf!<p>';
    
$_SESSION['metacodefehler'] == FALSE;
}
?>
</form>

<form action="<?=$PHP_SELF?>" method="POST">
<input type="text" name="metacode" size="7" maxlength="32" />
<input type="submit" name="submit" value="Hinsurfen!" />
<?php
if($_SESSION['metacodefehler']) {
    echo 
'<p>Ein Fehler trat auf!<p>';
    
$_SESSION['metacodefehler'] == FALSE;
}
?>
</form>

Ratings

There are no comments available yet.

Here you can write a comment


Please enter at least 10 characters.
Loading... Please wait.
* Pflichtangabe

Related topics

How to effectively perform complex queries with SQL queries in MySQLi?

This MySQL tutorial explains how to efficiently perform complex SQL queries in MySQLi. We will look at various aspects of database querying and learn specific methods to fully utilise the power of MySQLi. ...

TheMax

Autor : TheMax
Category: mySQL-Tutorials

Migration einer PHP 5 App auf PHP 7

Dieses PHP 7 Tutorial zeigt dir, wie du dein PHP5 Script auf PHP7 umstellst. ...

admin

Autor : admin
Category: PHP-Tutorials

MySQL Klasse

In meinem kleinen Tutorial zeige ich euch, wie ihr ganz einfach eine kleine MySQL Klasse schreiben könnt. ...

Borlabs

Autor : Borlabs
Category: mySQL-Tutorials

Datenbankinhalt für Suchmaschinen aufbereiten

Sie haben eine Datenbankanwendung geschrieben und keiner weiß, welche Daten bei Ihnen zu finden sind. Suchmaschinen gehen natürlich nicht so weit, daß sie Abfragen an die Datenbank senden. Somit bleibt der Inhalt Ihrer Tabelle für Suchmaschinen unsichtbar ...

Wolfgang13

Autor : Wolfgang13
Category: SEO Tutorials

E-Mailprüfung mit JavaScript

In diesem Tutorial wird gezeigt, wie eine E-Mailüberprüfung in JavaScript realisiert werden kann ...

andy@

Autor : andy@
Category: Other tutorials

Login mit Hilfe von PHP und mySQL

Dieses Tutorial soll die Grundzüge eines Login-Systems auf der Basis von PHP und mySQL unter Zuhilfenahme von Sessions klären. ...

razorblade

Autor : razorblade
Category: PHP-Tutorials

Hier ein kleines allgemeines Tutorial zu PHP

Die Einleitung ist in folgende Themen aufgeteilt: -Einleitung -Variablen -Parameterübergabe -Funktionen -Schleifen -IF-Abfragen Am besten Sie schauen sie sich der Reihenfolge nach an. ...

demiangrandt@

Autor : demiangrandt@
Category: PHP-Tutorials

Joomla! Starterhilfe

Dieses Tutorial begleitet Sie bei dem Einstieg in die Welt von dem CMS Joomla!. ...

werninator

Autor : werninator
Category: mySQL-Tutorials

Publish a tutorial

Share your knowledge with other developers worldwide

Share your knowledge with other developers worldwide

You are a professional in your field and want to share your knowledge, then sign up now and share it with our PHP community

learn more

Publish a tutorial