Laura: Linkverwaltung

Hallo,

ich habe über PHP eine kl. Linkverwalt. aufgebaut, über die sämtl. LINKS in einer SQL-Datenbank hinterlegt und auf Abfrage "echo insert_link($id)" ausgegeben werden - siehe folgender Quellcode.

Leider ist es mir mit Hilfe dieses Script nicht gelungen aus einer anderen Tabelle (=benutzer) die Daten für den Part "usrname=$usrname" (siehe Link) einzubetten, so dass auch tatsächl. Daten aus der 2ten Tabelle ausgelesen werden. Wie müsste die Abfrage aussehen bzw. wo müsste Sie integr. werden ?

Vielen Dank schon mal im voraus.

Hier der Code:

function insert_link($id)
{
$sqlhost        =   // SQL Host
$sqluser        =   // SQL User
$sqlpwd         =   // SQL Passwort
$database       =   // SQL Datenbank

mysql_connect($sqlhost,$sqluser,$sqlpwd );
mysql_select_db($database);

$abfrage = "SELECT id, url, text, target ,sid FROM links WHERE id='".$id."'";
$result = mysql_query($abfrage)or die(mysql_error());

while(list($id, $url, $text, $target, $sid) = mysql_fetch_row($result))
 {
 if ($text!="")
    {
    $code = md5($sid);
    $link_q = "UPDATE links SET sid = '$code' WHERE id='".$id."'";
    $link_r = mysql_query($link_q)or die(mysql_error());

$link = "<a href="$url?usrname=$usrname?sid=$code" target="$target"><img border='0' src="$image" alt="$alt"></a>";
    return $link;
    }
 }
}

?>

  1. Leider ist es mir mit Hilfe dieses Script nicht gelungen aus einer anderen Tabelle (=benutzer) die Daten für den Part "usrname=$usrname" (siehe Link) einzubetten, so dass auch tatsächl. Daten aus der 2ten Tabelle ausgelesen werden.

    mysql_connect($sqlhost,$sqluser,$sqlpwd );
    mysql_select_db($database);

    Die Zeile(n), in der geprüft wird, ob das bis hierhin erfolgreich war, hast Du sicher nur weggelassen?

    $abfrage = "SELECT id, url, text, target ,sid FROM links WHERE id='".$id."'";
    $result = mysql_query($abfrage)or die(mysql_error());

    Die Zeile, in der geprüft wird, ob mysql_query() erfolgreich war, hast Du sicher nur weggelassen?

    while(list($id, $url, $text, $target, $sid) = mysql_fetch_row($result))

    Tipp: Verwende statt mysql_fetch_row() mysql_fetch_assoc(). Damit erhälst Du ein Feld mit Einträgen à la $row["id"], $row["url"], $row["text"], etc und bekommst a) keine Probleme, falls Du mal die SELECT-Abfrage änderst und vergisst, list() ebenfalls anzupassen und "verschmutzt" Dir b) nicht den Variablenraum mit lauter einzelnen Variablen, die eigentlich alle zusammengehören.

    {
    if ($text!="")
        {
        $code = md5($sid);
        $link_q = "UPDATE links SET sid = '$code' WHERE id='".$id."'";
        $link_r = mysql_query($link_q)or die(mysql_error());

    Aha, Du hast die Fehlerprüfungen oben also tatsächlich nur der Übersichthalber weggelassen.. ;)

    Hier muß wohl Deine Abfrage der zweiten Tabelle rein. Du hast leider vergessen zu erwähnen, was Du eigentlich genau abfragen willst, insofern ist das nur eine Vermutung.

    $link = "<a href="$url?usrname=$usrname?sid=$code"

    In eine URL gehört nur _ein_ Fragezeichen. Trenne einzelne Parameter in der URL durch & (im HTML-Quelltext _nicht_ & verwenden) oder besser noch, sofern Dein Server es akzeptiert, das Semikolon (dann hast Du nicht das Problem mit & und &).

    Weiterhin solltest Du tunlichst darauf achten, alle Ausgaben durch htmlentities() zu machen, sofern nicht absolut sicher ist, daß die Daten nur die Buchstaben a bis z (groß wie klein) sowie die Ziffern 0 bis 9 enthalten. So ziemlich alles andere sollte in HTML als Sonderzeichen behandelt und mittels htmlentities() entsprechend maskiert werden:

    $link="<a href="".$url."?"usrname=".htmlentities($usrname)"&sid=$code" [..]

    Gruß,
      soenk.e