Suche Hilfe für ein PHP Code :-(

Soweit ich verstanden habe, soll zum einen (unabhängig vom User) gezählt werden, wie oft eine Seite aufgerufen wurde. Zum anderen soll gezählt werden, wie oft sich ein User eingeloggt hat.
Und dafür würden meines Erachtens nach 2 Tabellen reichen.

redlama
 
Oh man ich kapier jetzt gar nichts mehr einer redet von drei Tabellen und der andere wieder von nur Zwei :-( Was soll ich denn jetzt machen?

Also nochmals:

ich will in einer Tabell nur drin haben den User Name und wie oft sich der angemeldet hat. Also nicht mehr die anderen Daten stehen schon in einer andere Tabell mit dem Passwort und so.

in der zweiten Tabelle will ich nur die Seitenaufrufe haben. Also wenn ich z.B. auf die Seite Bilder gehe, dann soll in der Datenbank bei Seite stehen Bilder und dann soll immer die Zahl um eines erhö werden wenn der Seitenname schon drin ist dann soll einfach nur die zahl erhöt werden.

Das Anmelde Schript sieht so aus:

PHP:
<?php
 //Konfigurations Datei einbinden
 include "../data/config.php";
 
 //Page Titel für <title> festlegen:
 $page_title = "Community Login";
 
 session_start();
 
 
 
 if(isset($_SESSION['rights']))
 
 {
 
 	header("Location: ".HOST_DE."/community/intern/index.php");
 
 	exit;
 
 }
 
 
 
 //Verbindung herstellen und Datenbank auswählen
 
 @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Bei dem Verbindungsaufbau mit der Datenbank ist ein Fehler aufgetreten.<br>MySQL hat folgende Fehlermeldung ausgegeben: <tt>".mysql_error()."</tt><br>Bitte probieren Sie es später noch einmal.");
 
 mysql_select_db(MYSQL_DATABASE) OR die("Die Verbindung mit der Datenbank konnte zwar hergestellt werden, jedoch gab es Probleme beim Auswählen der Datenbank.<br>MySQL hat folgende Fehlermeldung ausgegeben: <tt>".mysql_error()."</tt><br>Bitte Probieren Sie es später noch einmal.");
 
 
 
 //Fehlerarray definieren
 
 $error = array();
 
 
 
 if(isset($_POST['login']) AND ($_POST['benutzername']) AND ($_POST['passwort']))
 
 {
 
 	//Daten zu dem Benutzer aus der Datenbank holen
 
 	$sql = "SELECT
 
 				*
 
 			FROM
 
 				userdata
 
 
 
 			WHERE
 
 		    	benutzername = '".strtolower(addslashes($_POST['benutzername']))."'
 
 			";
 
 	$result = mysql_query($sql);
 
 	$_data = mysql_fetch_assoc($result);
 
 
 
 	//Überprüfen, ob Benutzername existiert
 
 	if(empty($_data))
 
 	{
 
 		$error = "Der Benutzername existiert nicht.";
 
 	}
 
 	else
 
 	{
 
 		if($_data['falschlogin'] > 5)
 
 		{
 
 			$sql = "UPDATE
 
 						userdata
 
 					SET
 
 		    			falschlogin = '0',
 
 						gesperrt = '1'
 
 					WHERE
 
 		    			benutzername = '".$_data['benutzername']."'
 
 					";
 
 			$return = mysql_query($sql);
 
 
 
 			$error = "Sie haben sich mehr als 5&nbsp;mal falsch eingeloggt. Ihr Benutzerkonto ist nun aus Sicherheitsgründen gesperrt, bitte wenden Sie sich an einen Administrator.";
 
 		}
 
 		elseif($_data['gesperrt'])
 
 		{
 
 			$error = "Ihr Benutzerkonto ist gesperrt, bitte wenden Sie sich an einen Administrator.";
 
 		}
 
 		//Passwort überprüfen
 
 		elseif($_data['passwort'] === md5($_POST['passwort']))
 
 		{
 
 			$sql = "UPDATE
 
 						userdata
 
 					SET
 
 		    			lastlogin = NOW(),
 
 		    			lastid = '".addslashes($_SERVER['REMOTE_ADDR'])."',
 
 		    			falschlogin = '0'
 
 					WHERE
 
 		    			benutzername = '".addslashes($_data['benutzername'])."'
 
 					";
 
 			$result = mysql_query($sql);
 
 			if(!$result) die(mysql_error());
 
 
 
 			$sql = "REPLACE INTO user_online
 
 					(
 
 						benutzername,
 
 						lastmove
 
 					)
 
 					VALUES
 
 					(
 
 		    		    '".addslashes($_data['benutzername'])."',
 
 						'".time()."'
 
 					)
 
 					";
 
 			mysql_query($sql) or die(mysql_error());
 
 
 
 			//und Benutzerdaten in Session schreiben
 
 			foreach($_data as $key => $value)
 
 			{
 
 				if($key == "id" || $key == "passwort") continue;
 
 				if(empty($value)) $_SESSION[$key] = false;
 
 
 
 				$_SESSION[$key] = $_data[$key];
 
 			}
 
 
 
 			//Login Daten festlegen:
 
 			$_SESSION['login'] = time();
 
 
 
 			header("Location: ".HOST_DE."/community/intern/?".SID);
 
 		}
 
 		else
 
 		{
 
 			$sql = "UPDATE
 
 						userdata
 
 					SET
 
 		    			falschlogin = '". ++$_data['falschlogin'] ."'
 
 					WHERE
 
 		    			benutzername = '". $_data['benutzername'] . "'
 
 					";
 
 			$return = mysql_query($sql);
 
 
 
 			$error = "Falsches Passwort.";
 
 		}
 
 	}
 
 }
 
 
 
 ?>
 
Ok, das sieht doch gut aus.
Also, wenn Du die Tabelle anlegst, wo nur der Benutzername und der Zähler reinkommen, sollte die ungefähr so aussehen:
Spalte 'benutzername' Typ varchar(255)
Spalte 'zaehler' Typ int.
Die Tabelle für die Seiten kann die gleiche Form haben, nur statt 'benutzername' würde ich da 'seite' nehmen! ;)
Und dann fügst Du in das Login Script vor "//und Benutzerdaten in Session schreiben" das ein:
PHP:
$sql = "UPDATE
  -->Name der neuen Tabelle<--
SET
  zaehler = zaehler + 1
WHERE
  benutzername = '".addslashes($_data['benutzername'])."'
";
$result = mysql_query($sql);
if(!$result) die(mysql_error());
Dann hast Du schon mal den Zähler um 1 erhöht, wenn sich jemand einloggt.
Hast Du denn auch ein Script für die Registrierung des Users?
Und was den Zähler für die Seiten betrifft, solltest Du auf jeder Seite das einfügen:
PHP:
<?php
//Konfigurations Datei einbinden
include "../data/config.php";
//Verbindung herstellen und Datenbank auswählen
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Bei dem Verbindungsaufbau mit der Datenbank ist ein Fehler aufgetreten.<br>MySQL hat folgende Fehlermeldung ausgegeben: <tt>".mysql_error()."</tt><br>Bitte probieren Sie es später noch einmal.");

mysql_select_db(MYSQL_DATABASE) OR die("Die Verbindung mit der Datenbank konnte zwar hergestellt werden, jedoch gab es Probleme beim Auswählen der Datenbank.<br>MySQL hat folgende Fehlermeldung ausgegeben: <tt>".mysql_error()."</tt><br>Bitte Probieren Sie es später noch einmal.");
$sql = "UPDATE
  -->Name der neuen Tabelle mit den Seiten<--
SET
  zaehler = zaehler + 1
WHERE
  seite = '-->Name der Seite<--'
";
$result = mysql_query($sql);
if(!$result) die(mysql_error());
?>
Alles klar soweit?

redlama
 
HuHu,

hab das gerade mal versucht. Es kommt zwar keine Fehlermeldung aber er trägt auch nichts in der DB ein.

Meine Tabelle sieht so aus:

CREATE TABLE `b_insgesammt` (
`benutzername` varchar(30) NOT NULL default '',
`zaehler` int(8) NOT NULL default '0'
) TYPE=MyISAM;
Das Skript habe ich so eingefügt:

PHP:
// Login zählen
   
    $sql = "UPDATE  b_insgesammt
   SET
     zaehler = zaehler + 1
   WHERE
     benutzername = '".addslashes($_data['benutzername'])."'
   ";
   $result = mysql_query($sql);
   if(!$result) die(mysql_error());



OK dein anderes Skript habe ich so eingefügt und es geht ABER: ich muss ja in der Datenbank erst mal alle Seiten eintragen kann man das nicht so machen, dass er erst mal prüft ob die Seite schon drin ist und dann sagen wenn die nicht drin ist schreib mir die doch bitte rein und zähle dann ?
 
Zuletzt bearbeitet:
Das erste update geht nicht, aber das zweite ja?
Seltsam, seltsam, ...
Also wenn Deine seiten sich nicht ständig ändern, dann kannst Du sie doch "zu Fuß" alle in die Datenbank eintragen.
Ansonsten suchst Du vorher nach allen Seitennamen in der Tabelle und wenn Du sie ausliest überprüfst Du, ob die Seite, die Du haben willst dabei ist. Wenn ja: Zähler + 1, wenn nein, dann fügst Du die Seite in die Tabelle ein und setzt den Zähler auf 1.

redlama
 
Ja, da müssen alle Benutzer drin stehen, die registriert sind.
Weil, wo kein User, da auch kein Zähler, ...

redlama :suspekt:
 
oh nein jetzt oder? Das ist aber dann viel Arbeit dann muss ich das ja immer wieder abgleichen, kann man das nicht so machen und sagen hey wenn noch kein User drin steht dann füg Ihn mir ein
 
Wieso fügst Du nicht einfach in Deine Usertabelle eine Spalte für den Zähler ein, dann hättest Du doch schon alle User mit allen Daten und dann noch zusätzlich den Zähler, ...
redlama
 
Mom ich zewig dir mal wie die Tabelle jetzt schon aussieht :

CREATE TABLE `userdata` (
`id` int(6) unsigned NOT NULL auto_increment,
`benutzername` varchar(30) default NULL,
`email` varchar(50) default NULL,
`passwort` varchar(32) default NULL,
`rights` varchar(5) default 'user',
`registriert` datetime default NULL,
`name` varchar(80) default NULL,
`geschlecht` char(1) default NULL,
`geburtstag` date default NULL,
`single` varchar(4) default NULL,
`newsletter` varchar(4) default 'nein',
`woherkennen` text,
`selbstbeschreibung` text,
`hobbies` text,
`ichmag` text,
`ichmagnicht` text,
`motto` text,
`nachricht` text,
`homepage` varchar(30) default NULL,
`messenger` varchar(5) default 'ICQ',
`messengerid` varchar(30) default NULL,
`buddies` varchar(255) default NULL,
`profil_views` int(6) default '1',
`points` int(6) default NULL,
`lastlogin` datetime default NULL,
`lastid` varchar(15) default NULL,
`falschlogin` int(2) default '0',
`gesperrt` int(1) default '0',
PRIMARY KEY (`id`),
KEY `benutzername` (`benutzername`)


Und du meinst jetzt da noch einfach eine Spalte mit Zähler hinzufügen geht das denn so einfach ?

Dann habe ich noch eine weitere frage das ist dann auch die letzte :-)

Kann ich auch ALLES aufzeichnen was ein User macht? Also welcher Seite er sich ansieht usw... das währe echt noch klasse wenn du mir das sagen wurdest wie ich das machen muss :-)

) TYPE=MyISAM AUTO_INCREMENT=83 ;
 
Zurück