| |
| * Link führt ins Internet |
|
| |
Wir hatten Ihnen bereits in Kapitel 5 einen Useronline-Counter vorgestellt. Ein ähnliches Prinzip lässt sich für die Datenbank gestützte Lösung verwenden. Auch in diesem Fall müssen wir eine IP-Zeitsperre nutzen, um zu ermitteln, wie viele Besucher sich tatsächlich auf der jeweiligen Seite befinden.
Die folgende Umsetzung basiert auf zwei wesentliche Skripte:
. config.inc.php - in diesem Skript befinden sich die wesentlichen Zugriffsdaten und der Verbindungsaufbau zur MySQL Datenbank. Sie werden diese Datei in sämtlichen PHP & MySQL Anwendungen aus dem Buch vorfinden.
. useron.php - in diesem Skript befinden sich die benötigten MySQL-Zugriffe, diese werden mit Hilfe von SQL-Befehlen realisiert, so dass die Besucher der Seite erfasst werden können. Die Verbindung zur MySQL-Datenbank wird durch die config.inc.php sichergestellt.
Zusätzlich wurde folgender Ordner angelegt:
. css - dieser enthält die CSS-Datei (main.css), welche für die Layout-Formatierung des Useronline-Counter zuständig ist.
Sie benötigen zum Betreiben des Useronline-Counter folgende MySQL-Datenbanktabelle:
CREATE TABLE usertab (
kid int(11) NOT NULL auto_increment,
id char(255) default NULL,
ip char(255) default NULL,
name char(255) default NULL,
zeitid char(255) default NULL,
PRIMARY KEY (kid)
)
|
1. config.inc.php
<?php
//Zugangsdaten
//Name (IP-Adr.) des Rechners mit MySQL
$dbserver = "localhost";
//Benutzername für den MySQL-Zugang
$nutzer = "";
//Passwort
$passwort = "";
//Name der Datenbank
$dbname = "praxisbuch";
$db_fehler1 = "
<html>
<head>
<title>Online-User</title>
<link rel='stylesheet' href='css/main.css' type='text/css'>
</head>
<body bgcolor='#FFFFFF' text='#000000'>
<table width='300' align='center'>
<tr>
<td align='center' class='latestnews' colspan='3'>- FEHLER - <br>
<p>Die Datenbank sind z.Z. nicht abrufbar.</p>
Versuchen Sie es bitte später nochmal!<br>
</td>
</tr>
</table>
</body>
</html>
";
$db_fehler2 = "
<html>
<head>
<title>Online-User</title>
<link rel='stylesheet' href='css/main.css' type='text/css'>
</head>
<body bgcolor='#FFFFFF' text='#000000'>
<table width='300' align='center'>
<tr>
<td align='center' class='latestnews' colspan='3'>- FEHLER - <br>
<p>Die Daten sind z.Z. nicht abrufbar.</p>
Versuchen Sie es bitte später nochmal!<br>
</td>
</tr>
</table>
</body>
</html>
";
//Verbindung aufbauen
@$db = mysql_connect($dbserver,$nutzer,$passwort) OR die($db_fehler1);
//Datenbank als Standard definieren
@mysql_select_db($dbname,$db) OR die($db_fehler2);
?>
|
Wie Sie sehen wurden im Skript auch Ausnahmefälle berücksichtigt, schliesslich sollte unsere Anwendung auch in der Lage sein entsprechend zu reagieren, wenn der Datenbankserver oder die Datenbank selbst nicht erreichbar sind. Die HTML-Formatierung für die jeweiligen Fehlermeldungen können Sie natürlich an Ihre eigenen Bedürfnisse anpassen.
2. useron.php
<html>
<head>
<title>Online-User</title>
<link rel='stylesheet' type='text/css' href='css/main.css'>
</head>
<body>
<?
require("config.inc.php");
// Onlineuser Tabelle
$logtab = "usertab";
// Zeitlimit in Sekunden
$zeitlimit = "600";
// Zeit und Datum
$aktzeit=date("d-m-Y H:i");
$zeit = explode( " ", microtime());
$userusek = (double)$zeit[0];
$usersek = (double)$zeit[1];
$User_Id = $usersek + $userusek;
$IP = getenv(REMOTE_ADDR);
// Onlineuser entfernen, sobald das Zeitlimit
// überschritten wurde
mysql_query("delete from $logtab where zeitid < $usersek -$zeitlimit");
// IP-Adresse prüfen
$satz = mysql_query("SELECT * FROM $logtab where ip like '$IP'");
@$userlog = mysql_fetch_row($satz);
// Neuen Onlineuser hinzufügen fals IP-Adresse
// noch nicht in der logtab vorhanden
if ($userlog == false) {
mysql_query("insert INTO $logtab (id,ip,name,zeitid)
VALUES('$User_Id','$IP','$_SERVER[HTTP_HOST]','$usersek')") or die($db_fehler2);
}
// Anzahl der Onlineuser ermitteln
$res_logtab = mysql_query("SELECT Count(*) as gesamt FROM $logtab");
$numberlogtab = mysql_fetch_array($res_logtab);
// Anzahl der Online-User ausgeben
if (!empty($numberlogtab[gesamt])){
echo "<font face='Verdana, Arial' size='-2'>
[ $numberlogtab[gesamt] User online ]<br>[ $aktzeit ]</font>";
}
?>
</body>
</html>
|
Wie sie sehen, die Funktion require() sorgt für die Verknüpfung zu den benötigten Zugriffsdaten, diese Art der Verbindung sollten Sie vorzugsweise nutzen. Die Angabe von Datum und Uhrzeit ist eher optional.
|
|
|
|
|
|
|