Seite 1 von 2

Web LoginCounter

Verfasst: 16.01.2008 16:34
von Gohei
Hey Leuts!

Möchte gerne wissen, wie man für jeden User, der sich einloggt, einen Counter macht, wo ich dann sehen kann, wer, wann und wieivel schon auf meiner Homepage eingeloggt und sie besucht hat.
So spionenmässig... :oops:

Verfasst: 16.01.2008 16:48
von Boecki91
So wie du das schreibst gehört das wohl eher in die Mod Suche.

Hast du schon Ansätze gefunden?
Wenn ja, könntest du die ja mal vorstellen.
Wenn nein, such welche.

Verfasst: 16.01.2008 17:38
von Pyramide

Verfasst: 17.01.2008 19:09
von Gohei
MOD Sinne für/als phpBB nicht nein, eher für ne normale Webseite...
Es geht schon in die Richtung Webstatistik nur möchte ich genau wissen, wer meine Seite und wieviel mal besucht hat, da meine Seite nur mit einem Login betretbar ist.

Das System geht so:

Code: Alles auswählen

<?
  include("mysql.inc");
  include("#_functions.inc");


  $name = $_POST['name'];
  $kennwort = $_POST['kennwort'];
  if (!empty($name) && !empty($kennwort)) {
    $query = "SELECT name, kennwort FROM web_date WHERE name = '$name'";
    $sql = mysql_query($query)
           or die(mysql_error());
    if (mysql_num_rows($sql) == 1) {
      $ds = mysql_fetch_object($sql);
      if ($ds->kennwort == $kennwort) $angemeldet = true;
    }
  } else $angemeldet = false;

blabla...
?>
Die Daten befinden sich in 3Tabellen ( id, Name und Kennwort ) und ich möchte noch eine zusätzliche Tabelle, der die Anzahl Besuche jeden id's zählt, die beim erfolgreichem Login aufgerufen werden.

Also wenn ich z.B mit Name "Leo" einlogge und dieser Leo den id 5 hat, dann wird in einer Tabelle anzahl Besuche von id 5 gezählt.

Ich kenne nur einen CounterScript und frage mich, ob ich den irgendwie so basteln könnte, dass er anstatt die Anzahl Besuche in einer Datei, in die folgende Tabelle der jeweiligen id's schreiben könnte:

Code: Alles auswählen

<?
$datei_name = "counter.txt";
if (!file_exists($datei_name)) {
  $dz = fopen($datei_name, "w");
  fwrite($dz,"1");
  fclose($dz);
}
$dz = fopen($datei_name,"r");
$counter = fread($dz, 10);
fclose($dz);
$besucher = $_COOKIE['besucher'];
if (!isset($besucher)) {
  setcookie ("besucher","ja");
$counter++;
$dz = fopen($datei_name, "w");
fwrite($dz, $counter);
fclose($dz);
}
?>

Verfasst: 17.01.2008 19:44
von speedtouch92
hmm, versuche es doch mal so:

Code: Alles auswählen

<?php
include("mysql.inc");
include("#_functions.inc");
$name = $_POST['name'];
$kennwort = $_POST['kennwort'];
if (!empty($name) && !empty($kennwort)) {
  $getuserqry = mysql_query("SELECT d.*, w.logins AS loginanzahl FROM `web_date` d, `web_logins` w WHERE d.name = '".mysql_real_escape_string($name)."' AND d.kennwort = '".mysql_real_escape_string($name)."' AND w.id = d.id LIMIT 1;") or die("<font color=\"#FF0000\"><b>Es trat folgender Fehler bei der Datenbankaktion auf:</b><br><br>".mysql_error()."</font>");
  if(mysql_num_rows($getuserqry) == 1) {
    $angemeldet = true;
    $userinfos = mysql_fetch_array($getuserqry);
    mysql_query("UPDATE `web_logins` SET `logins` = `logins` + 1 WHERE `id` = '".$userinfos['id']."' LIMIT 1;") or die("<font color=\"#FF0000\"><b>Es trat folgender Fehler bei der Datenbankaktion auf:</b><br><br>".mysql_error()."</font>");
  $userinfos['loginversuche']++;
  } else {
    $angemeldet = false;
  }
?>

Die Tabelle für die Logins heißt web_logins
Diese hat 2 Felder:
1) ID Typ: INT KEIN Autoincrement (Dieses Feld beinhaltet die user_id)
2) logins Typ: INT KEIN Autoincrement (Dieses Feld beinhaltet die Loginanzahl)


Wenn der Benutzer eingeloggt ist, sind folgende Informationen gespeichert:
$userinfos['id'] enthält die Benutzer-ID
$userinfos['name'] enthält den Benutzernamen
$userinfos['kennwort'] enthält das Benutzerpasswort
$userinfos['loginanzahl'] enthält die Anzhal der Logins von diesem User

Tja, ich denke mehr muss ich nicht sagen.

(PS: UNGETESTET )

Verfasst: 17.01.2008 22:00
von Gohei
Der Code sieht echt super aus aber leider bin ich kein Profie von Tabellenalegen, kannst du mir helfen?

Auf der Index kommt nun diese Nachricht:
Es trat folgender Fehler bei der Datenbankaktion auf:

".mysql_error().""); if(mysql_num_rows($getuserqry) == 1) { $angemeldet = true; $userinfos = mysql_fetch_array($getuserqry); mysql_query("UPDATE `login_counter` SET `logins` = `logins` + 1 WHERE `id` = '".$userinfos['id']."' LIMIT 1;") or die("Es trat folgender Fehler bei der Datenbankaktion auf:

".mysql_error().""); $userinfos['loginversuche']++; } else { $angemeldet = false; } ?>
Das sieht sehr falsch aus oder? :lol: :oops:

Code: Alles auswählen

CREATE TABLE `web_logins` (
  `id` int(11) NOT NULL,
  `logins` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

Verfasst: 17.01.2008 22:19
von mgutt
Nein ist ein Fehler in seinem Code. Die Anführungszeichen sind falsch gesetzt, deswegen siehst Du auch einen Teil des PHP Codes beim Öffnen der Seite. Schau Dir mal die einfachen und doppelten Anführungszeichen.

Verfasst: 17.01.2008 22:43
von Gohei
Ich seh den Fehler nicht... :-?
Mir fällt da gerade was ein, wie erstellt man einen Registrierformular?

Verfasst: 18.01.2008 09:33
von speedtouch92
Ich habe den Code bei mir nochnmal getestet.
Es war ein Fehler drin, aber der hat das Problem nicht verursacht.
Am ende des Scripts fehlt einmal }
richtiger Code:

Code: Alles auswählen

<?php
include("mysql.inc");
include("#_functions.inc");
$name = $_POST['name'];
$kennwort = $_POST['kennwort'];
if (!empty($name) && !empty($kennwort)) {
  $getuserqry = mysql_query("SELECT d.*, w.logins AS loginanzahl FROM `web_date` d, `web_logins` w WHERE d.name = '".mysql_real_escape_string($name)."' AND d.kennwort = '".mysql_real_escape_string($name)."' AND w.id = d.id LIMIT 1;") or die("<font color=\"#FF0000\"><b>Es trat folgender Fehler bei der Datenbankaktion auf:</b><br><br>".mysql_error()."</font>");
  if(mysql_num_rows($getuserqry) == 1) {
    $angemeldet = true;
    $userinfos = mysql_fetch_array($getuserqry);
    mysql_query("UPDATE `web_logins` SET `logins` = `logins` + 1 WHERE `id` = '".$userinfos['id']."' LIMIT 1;") or die("<font color=\"#FF0000\"><b>Es trat folgender Fehler bei der Datenbankaktion auf:</b><br><br>".mysql_error()."</font>");
  $userinfos['loginversuche']++;
  } else {
    $angemeldet = false;
  }
}
?>



Kann es sein, dass du zwischenzeitlich den PHP-Tag mit ?> schließt, aber nicht wieder öffnest?
Denn bei mir (funpic.de) läuft alles.


EDIT => Ich habe auch keine Anführungszeichenfehler gesehen.
Wenn das Problem weiterhin besteht, dann zeige uns mal die komplette Date, mit dem Code drin.
Siehe dazu: Eine PHP-Datei zum Download bereitstellen
Ein Registrierformular?
Ganz einfach:

register.html

Code: Alles auswählen

<!-- Dein header -->
<form action="register.php" method="POST">
<table border="0">
<tr><td>Benutzername</td><td><input type="text" name="name"></td></tr>
<tr><td>Kennwort</td><td><input type="password" name="kennwort"></td></tr>
<tr><td>&nbsp;</td><td><input type="submit" value="Registrieren !!!"></td></tr>
</table>
</form>
<!-- Dein footer -->
register.php

Code: Alles auswählen

<?php
include("mysql.inc");
include("#_functions.inc");
$name = $_POST['name'];
$kennwort = $_POST['kennwort'];
if (!empty($name) && !empty($kennwort)) {
  mysql_query("INSERT INTO `web_date` (`name`, `kennwort`) VALUES ('".mysql_real_escape_string($name)."', '".mysql_real_escape_string($kennwort)."');") or die("<font color=\"#FF0000\"><b>Es trat folgender Fehler bei der Datenbankaktion auf:</b><br><br>".mysql_error()."</font>");

  mysql_query("INSERT INTO `web_logins` (`id`, `logins`) VALUES (".mysql_insert_id().", 0);") or die("<font color=\"#FF0000\"><b>Es trat folgender Fehler bei der Datenbankaktion auf:</b><br><br>".mysql_error()."</font>");

  echo"<b>Sie k&ouml;nnen sich nun mit ihren Daten einloggen</b>";
}

Verfasst: 18.01.2008 16:14
von mgutt
Kennwörter sollten aus Sicherheitsgründen nie in Klarschrift in der Datenbank hinterlegt werden. Also am besten vorher md5() anwenden.

Gruß