phpbar.de logo

Mailinglisten-Archive

[php] Finden einer URL innerhalb einer Variablen

[php] Finden einer URL innerhalb einer Variablen

Nico Haase php_(at)_phpcenter.de
Thu, 27 Jun 2002 10:13:58 +0200


Hallo Gregor,

> > Hallo Liste,
> > ich bekomme als MySQL-Suchergebnis einer Tabelle bspw. folgenden Inhalt:
> >
> > Jugendroman zur Jugend-Soap &quot;<a
> > href="http://www.schloss-einstein.de/"
> > target="_blank">Schloss Einstein</a>&quot;
> >
> > Wie kann ich PHP jetzt dazu veranlassen, alle Links durch einen
> PHP-Befehl
> > zu ersetzen? Es sollte dann also das folgende Ergebnis herauskommen:
> >
> 	Hi Nico!
>
> 	Du kannst das Suchergebnis doch mit dem print"" Befehl ausgeben
> lassen. Du müsstest dann aus dem String nur die Anführungszeichen löschen
> und fertig!
>
> 	zB:
> 	$Suchergebnis=str_replace('"','',$Suchergebnis); // " durch "Nichts"
> ersetzt
> 	print $Suchergebnis;

ich will das Ergebnis gar nicht ausgeben lassen. Die Links, die im
Suchergebnis vorhanden sind, sollen durch einen PHP-Befehl ersetzt werden,
der dann auch ausgeführt werden soll. Dabei geht es speziell um das Zählen
der Klicks auf einen Link. Dabei habe ich mir eine Funktion, zusammen mit
Thomas Gigold aus der Liste, geschrieben. An diese wird folgendes übergeben:

<schnipp>
<?php makelink ("Adresse","Text"); ?>
</schnapp>

Rückgabe:
Link in folgender Form:

<schnipp>
<a href=link.php?id=58b4c02436b7da1bc19986d5c01f8778 target=_blank>TEXT aus
Funktionsaufruf</a>
</schnapp>

Mit Klick auf diesen Link, also Aufruf von link.php?id=... wird die MySQL-DB
dazu veranlasst, die URL zur 16stelligen, nur einmal vergebenen ID
herauszufiltern und einen Header("Location: ")... Befehl auszuführen. Der
Benutzer muss also, um zur verlinkten Seite zu gelangen, zwangsläufig auf
den Link klicken, wenn er die Adresse nicht kennt. Ein Mitloggen der Klicks
ist also zu 99% möglich.
Jetzt wird diese ID aber dynamisch erzeugt:
if ($url steht in DB drin) nehme die ID dazu
if ($url steht nicht in DB drin) mache neue ID, solange, bis eine wirklich
neue gefunden ist, die noch nicht vergeben ist
Und das ermöglicht einen wirklich universellen Einsatz, ohne den Link vorher
definiert zu haben.
Jetzt kommen als SELECT-Ergebnis aus der DB die Links noch in der alten Form
und sollen in die neue umgesetzt werden, was aber ja so nicht geht.... Da
kommt wieder mein Problem. Um es nochmals zu verdeutlichen, unten der
Quelltext der Link-Zähl-Datei (zum Kopieren, bei Einsatz bitte Mail an
mich).

Also, Problem in Kurzform: MySQL liefert aus Select tw. Adressen in Form von
<a href=http://www.adresse.de>Adressentext</a>. Dies soll umgeformt werden
in einen PHP-Befehl [makelink("http://www.adresse.de","Adressentext");], der
dann direkt ausgeführt werden soll.
In der Hoffnung, eine Lösung zu finden
Nico


<schnipp>
function makelink($url, $text)
 {
  start(); // startet MySQL
  $web = trim ($url);

  $query = mysql_query("SELECT id FROM redir_url WHERE url='$web'");
  if(mysql_num_rows($query)>0)
   {
    $row=mysql_fetch_array($query);
    $id = $row["id"];
   }
  else
   {
    $ok = FALSE;

    while ($ok == FALSE)
     {
      $id = md5 (uniqid (rand()));
      $query = mysql_query("SELECT id FROM redir_url WHERE id ='$id'");
      if (mysql_num_rows($query)==0) $ok = TRUE;
     }
    mysql_query("INSERT INTO redir_url ( id, url ) VALUES ( '$id',
'$url')");
   }

  echo "<a href=\"".DATEINAME."?id=".$id."\"
target=\"_blank\">".$text."</a>";
 }

// goto schickt zur URL, die mit $id verknuepft ist

function goto($id)
 {
  start(); // startet MySQL
  $moment = time();

  mysql_query("UPDATE redir_url SET sum_visit=sum_visit+1,
last_visit='$moment' WHERE id='$id'");
  $url = mysql_query("SELECT url FROM redir_url WHERE id='$id'");
  $url = mysql_fetch_array($url);
  $web = $url[0];

  // echo "Datei: ".$web;
  header("Location: http://".$web );
  exit();
  die();
 }

// wenn $id per GET uebergeben, goto.... ausfuehren
if (isset($_GET["id"])) goto($_GET["id"]);
if (isset($HTTP_GET_VARS["id"])) goto($HTTP_GET_VARS["id"]);
</schnapp>


php::bar PHP Wiki   -   Listenarchive