Moin!
Kommentare stehen im Code.
Ursache für deinen beobachteten Effekt dürfte aber die Abwesenheit von jeglichem prüfenden Code sein, ob die übergebenen Parameter auch stimmen.
> <?PHP
> $sql_database = "+++";
> $sql_host = "+++";
> $sql_user = "+++";
> $sql_pass = "+++";
// Ich halte es für sehr empfehlenswert, wenn man solche Angaben, die sich im gesamten Skript nie mehr ändern werden und auch nicht sollen, als Konstanten definiert.
>
> $db = mysql_connect($sql_host,$sql_user,$sql_pass) OR DIE ("<br>Keine Verbindung zur SQL-Datenbank!");
> mysql_select_db($sql_database,$db) OR DIE ("<br>Konnte Datenbank nicht finden!");
>
> if(isset($id)) {
// Über die negativen Auswirkungen von register_globals=on wurde schon etwas gesagt. $_GET['id'] wäre hier der richtige Wert, auf den man zugreifen muß.
> $count = mysql_query("SELECT * FROM links WHERE id = '$id'");
// "SELECT *" ist immer schlecht. Schreibe explizit die Spalten auf, welche du abfragen willst. Damit definierst du gleichzeitig auch die Reihenfolge, in der die Spalten im Ergebnis erscheinen, denn...
> $wert = mysql_fetch_row($count);
>
> $ip_alt = $wert[5];
// ...an dieser Stelle vertraust du darauf, dass die fünfte Spalte deines "SELECT *" auch tatsächlich die IP-Adresse ist - es könnte aber auch was ganz anderes sein, ohne dass du es bemerken würdest. Deshalb:
// 1. Nie "SELECT *". Immer "SELECT id, ip, url".
// 2. Nie mysql_fetch_row(), immer mysql_fetch_array() bzw. mysql_fetch_assoc().
// 3. Der Zugriff auf die Ergebniszeile geht dann mit $wert['ip'] - da sieht man sofort, welche _Bedeutung_ die Spalte hat. Das erleichtert auch die Fehlersuche.
> $ip_neu = getenv("REMOTE_ADDR");
> $link = $wert[1];
// Hier genau dasselbe. $wert['link'] wäre schlauer, das Umkopieren in eine neue Variable kann man sich sparen.
>
> if ($ip_alt != $ip_neu)
> {
> $hits = $wert[4]; $hits++;
// Umständlich. Einfacher ist $hits = $wert['hits'] + 1; Oder gar $wert['hits']++;
> $update="REPLACE INTO links SET id = '$wert[0]', url = '$wert[1]', name = '$wert[2]', text = '$wert[3]', klicks = '$hits', ip = '$ip_neu'";
// Nun ja, wenn hier mal keine Variablen durcheinander kommen.
> mysql_query($update) OR DIE(" ".mysql_error());
> }
>
> header("Location: $link");
// Ist der Link eigentlich eine vollwertige HTTP-URL? Die Tabelle oben hatte keine Protokollangabe.
> exit;
> }
>
> $seitentitel = "Treffpage » Start » Links";
> $kategorie = "start";
> include("/web/header.php");
>
> echo "Die Links in unserer Linkliste sind nach ihrer Beliebtheit sortiert. Das heißt im Klartext: Je öfter ein Link von Besuchern angeklickt wurde, desto weiter oben steht er in der Linkliste.";
>
> $data = mysql_query("SELECT * FROM links ORDER BY klicks DESC");
// "SELECT *" schon wieder...
> $zaehler = "1";
> while($zeile = mysql_fetch_row($data)) {
// mysql_fetch_row() schon wieder...
>
> echo "<div style=\"margin-top: 15px;\"><b>$zaehler. <a href=\"index.php?id=$zeile[0]\" target=\"_blank\">$zeile[2]</a></b> ($zeile[4] Aufrufe)<br>
>
> \n$zeile[3]</div>\n";
> $zaehler++;
> }
>
> include("/web/footer.php");
> ?>
- Sven Rautenberg