Login  Regeln Aktuelles Datum und Uhrzeit: 09.01.2009, 00:15  
Startseite
Registrieren
Profil
Suchen
Mitgliederliste
Verzeichnis
Impressum



Partner
kostenlose Homepage
Fussball
Kostenloses Forum
SMS kostenlos
Webhosting
Webmasterportal
Kostenlos
Kredit ohne Schufa
Esoterik-Forum
Selbsthilfeforum
Artikel Backlink
Datenrettung
klickcounter mit ip sperre

 
Neues Thema eröffnen   Neue Antwort erstellen    Webmaster Forum -> Serverseitige Websprachen
Vorheriges Thema anzeigen Nächstes Thema anzeigen 
Autor Nachricht
Venom
Stammuser [User]
Stammuser



Anmeldung: 05.11.05
Beiträge: 25

BeitragVerfasst am: 23.12.2005, 16:25    Titel: klickcounter mit ip sperre Antworten mit Zitat

guten tag.ich wollte einen klickcounter basteln.ch sollte auch eine ip sperre besitzten.ich habe auf meinen webspace in meiner mysql tabelle banner und wenn man auf sie klickt soll das gezählt werden.ich benutze die id später für die datei wo ich einmal die ip und die dazu gehörige zeit speichere.

Code:
<?
include ("../admin/konfig.php");
$id = $_GET['id'];
dbcon();
$time = time();
$ip = getenv ("REMOTE_ADDR");
$datei = "../counter/".$id.".txt";
$verbin = "SELECT
               count,
               link
           FROM
               suche
           Where
               ID='".$id."';";
$verbin1 = mysql_query ($verbin) OR die (mysql_error());
$verbin2 = mysql_fetch_assoc($verbin1)or die(mysql_error());
if (file_exists ($datei)) {
    $counter = fopen ($datei, "w+");
    $counter1 = fread ($counter, filesize ($datei));
    $counter2 = unserialize ($counter1);
    if (array_key_exists ($ip,$counter2)) {
        $datum = $counter2[$ip];
        $wert = $time - $datum;
        if ($wert >= 18000) {
            $count = $verbin2["count"];
            $count++;
            $update = "UPDATE
                          suche
                       SET
                           count='".$count."'
                       Where
                           ID='".$id."';";
            $verbin3 = mysql_query ($update) OR die (mysql_error());
            $counter2[$ip] = $time;
            $counter3 = serialize ($counter2);
            fwrite ($counter, $counter3);
            fclose ($counter);
            header("Location: ".$verbin2['link']."");
            exit;
        }
    }
    else {
        $counter2[$ip] = $time;
        $counter3 = serialize ($counter2);
        fwrite ($counter, $counter3);
        fclose ($counter);
        $count = $verbin2["count"];
        $count++;
        $update = "UPDATE
                       suche
                   SET
                       count='".$count."'
                   Where
                           ID='".$id."';";
        $verbin3 = mysql_query ($update) OR die (mysql_error());
        header("Location: ".$verbin2['link']."");
        exit;
        }
}
else {
    $counter = fopen ($datei, "w+");
    $counter1[$ip] = $time;
    $counter2 = serialize ($counter1);
    fwrite ($counter, $counter2);
    fclose ($counter);
    $count = $verbin2["count"];
    $count++;
    $update = "UPDATE
                   suche
               SET
                   count='".$count."'
                   Where
                           ID='".$id."';";
    $verbin3 = mysql_query ($update) OR die (mysql_error());
    header("Location: ".$verbin2['link']."");
    exit;
}
?>


irgendwie zählt er aber jeden klick und nimmt gar keine rücksicht auf die ip.kann mir einer helfen.

_________________
Ich will mehr Besucher ---->Pagerank-promo.de


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Metaman
Power-Poster [User]
Power-Poster



Anmeldung: 20.11.05
Beiträge: 636

BeitragVerfasst am: 23.12.2005, 20:19    Titel: Antworten mit Zitat

hmm warum so umständlich und die IPs in einer Datei speichern???
wenn du schon Mysql nutzt , dann kannst Du doch auch die IPAdressen in der DB speichern, das erleichtert die Auswertung und Abfrage.

mein Vorschlag, eine neue Tabelle für die IP´s
mit den Spalten ID, IP und Zeit.

Angenommen eine IP SPerre von 2 Stunden.
dann könnte die Abfrage so aussehen.
select * from iptabelle where ID=$id AND IP=USERIP AND Zeit>AktuelleZeit-2Stunden
Über mysql_num_rows bekommst Du dann die Anzahl der Ergebnisse, wenn diese =0 dann wird Counterstand erhöht sonst nicht.

Bei erhöhung des Counterstandes speicherst du dann die neue IP mit Zeit und ID in der Datenbank und löscht gleichzeitig alle Einträge die älter als 2 Stunden sind.

Das ist bedeutend einfacher zu handhaben und auch sicherer als die Daten in einer Textdatei abzulegen

_________________
Webmaster Lexikon
Schnäppchensuche
Wenn Du einen Clan Sponsor suchst, schreibe mich NICHT an!!!


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Venom
Stammuser [User]
Stammuser



Anmeldung: 05.11.05
Beiträge: 25

BeitragVerfasst am: 24.12.2005, 09:51    Titel: Antworten mit Zitat

ich glaube nicht,dass sich jemand die mühe macht und versucht etwas an meinen daten zu verändern um den klickcounter aus zu tricksen.er könnte höchstens die zeit löschen was aber bei meinen anbieter nicht möglich ist.außerdem gibt es für jede id nicht nur eine ip.wenn da jetzt 300 leute drauf klicken muss ich es trotzdem in einer spalte speichern und für jede id eine neue tablle bei wahrscheinlich mehr als 300 einträgen wäre viel zu viel.könnte vielleicht jemand meins cript nach dem fehler druch´schauen.ich amch das lieber so.

aber trotzdem danke für die anregung.

_________________
Ich will mehr Besucher ---->Pagerank-promo.de


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Metaman
Power-Poster [User]
Power-Poster



Anmeldung: 20.11.05
Beiträge: 636

BeitragVerfasst am: 24.12.2005, 10:57    Titel: Antworten mit Zitat

ok da muß ich jetzt aber noch was zu sagen.
mit der sicherheit meinte ich jetzt nicht das jemand den Counter manipuliert. sondern eher generell.
denn bei solchen Textdateien kann es passieren das die durch doopelte zugriffe gelöscht werden,
Dazu kommt auch die Serverlast. denn deine txt Datei muß ja immer erst komplett in den array eingelesen werden und kann dann erst nach der IP durchsucht werden.
wenn das aber in einer DB steht, liest du dort nur die Zeilen aus in denen die IP auch wirklich vorhanden ist.
Zitat:
wenn da jetzt 300 leute drauf klicken muss ich es trotzdem in einer spalte speichern und für jede id eine neue tablle bei wahrscheinlich mehr als 300 einträgen wäre viel zu viel

auch das hast Du etwas falsch verstanden, denn für jede ID eine eigene Tabelle wäre natürlich absolut hirnrissig, bei einer solchen IP Sperre reicht eine einzige Tabelle aus, alles andere passiert über die select abfragen.
dazu brauchst du nur eine Tabelle mit den Spalten ID(deine Download ID) IPAdresse und Zeit

was die Menge der Einträge betrifft, da sehe absolut keine Probleme.
selbst bei 300 zugriffen pro Datei wäre diese Tabelle nur wenige kb groß
da man ständig die alten Einträge rauslöschen kann.

aber egal,
zu deinem Code,
da kann ich Dir im Grunde empfehlen, dir mal die einzelnen Schritte
oder besser die zwischengespeicherten Werte des Scriptes ausgeben zu lassen.

spezielle vielleicht mal die Zeilen
Code:
        $datum = $counter2[$ip];
        $wert = $time - $datum;
        if ($wert >= 18000) {
            $count = $verbin2["count"];

dort würde ich einmal mal ein paar echo ausgaben zum Testen einsetzen.
ist jetzt jedoch nur eine vermutung

_________________
Webmaster Lexikon
Schnäppchensuche
Wenn Du einen Clan Sponsor suchst, schreibe mich NICHT an!!!


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Venom
Stammuser [User]
Stammuser



Anmeldung: 05.11.05
Beiträge: 25

BeitragVerfasst am: 24.12.2005, 11:03    Titel: Antworten mit Zitat

ich werde wahrscheinlich deine methode versuchen.aber ich habe voher eine frage.wie soll ich denn an eine ip von 300 bei einer id ran kommen.kannst du mir das noch voher erklären?
_________________
Ich will mehr Besucher ---->Pagerank-promo.de


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Metaman
Power-Poster [User]
Power-Poster



Anmeldung: 20.11.05
Beiträge: 636

BeitragVerfasst am: 24.12.2005, 12:46    Titel: Antworten mit Zitat

ganz einfach.
zuerst die Tabelle für die IP´s erstellen und zwar mit den Spalten
ID Feldtyp int
IP Feldtyp Varchar Feldlänge 15
ZEIT Feldtyp varchar Feldlänge 16

diese Tabelle dann aber OHNE Primärschlüssel und OHNE auto_increment !!!

nennen wir diese Tabelle ipsperre

dann sollte folgendes passieren.
User klickt auf den Link
beim Klick wird die ID übergeben und ist als $id vorhanden,
dann wird die IP Adresse des Users ermittelt und in $ip gespeichert und die aktuelle Zeit.
die Zeit ermitelst Du mit time()

jetzt must du die dauer der IP sperre in sekunden von time abziehen
also z.b.
$aktuell=time();
$sperre=3600*2; # sind zwei Stunden
$sperrzeit=$aktuell-$sperre

jetzt kommt die prüfung ob dieser User diesen Link innerhalb der letzten 2 Stunden schonmal aufgerufen hat und zwar mit folgender select abfrage
select * from ipsperre where ID='$id' AND IP='$ip' AND ZEIT>'$sperrzeit'

Jetzt brauchst Du nur die Anzahl der ERgebnisse dieser Abfrage zählen,
das sind dann entweder 0 oder 1
das geht am besten mit der Funktion mysql_num_rows

so wenn das ergebniss =1
dann erfolgt die Weiterleitung ohne den Klick zu zählen.
wenn Ergebniss = 0
dann wird der Klick gezählt und die Daten in die Tabelle eingetragen
insert into ipsperre (ID,IP,ZEIT)values('$id','$ip','$aktuell')

dann löscht Du gleich alle alten Datensätze einfach mit
delete from ipsperre where Zeit < '$sperrzeit'


und dann erfolgt die weiterleitung zur Datei

_________________
Webmaster Lexikon
Schnäppchensuche
Wenn Du einen Clan Sponsor suchst, schreibe mich NICHT an!!!


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Venom
Stammuser [User]
Stammuser



Anmeldung: 05.11.05
Beiträge: 25

BeitragVerfasst am: 25.12.2005, 08:56    Titel: Antworten mit Zitat

also gibt es wahrscheinlich mehrere spalten,die die selbe id haben aber verschiedene ip und die zeiten dazu gespeichert.

danke für deine hilfe

edit er gibt mir einen fehler aus
Zitat:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '.60.77 AND zeit > 1135484783' at li


Code:
<?
include ("../admin/konfig.php");
$id = $_GET['id'];
dbcon();
$time = time();
$ip = getenv ("REMOTE_ADDR");
$sperre = $time - 15000;
$aufruf = "SELECT
               *
           FROM
               ip
           Where
               id=".$id."
           AND
               ip=".$ip."
           AND
               zeit > ".$sperre.";";
$aufruf3 = "SELECT
               *
           FROM
               suche
           Where
               ID=".$id.";";
$aufruf1 = mysql_query ($aufruf) OR die (mysql_error());
$aufruf2 = mysql_num_rows ($aufruf1) OR die (mysql_error());
$aufruf4 = mysql_query ($aufruf3) OR die (mysql_error());
$aufruf5 = mysql_fetch_assoc($aufruf4);
$aufruf10 = "DELETE FROM
                 ip
             WHERE
                 zeit < ".$sperre.";";
switch ($aufruf2) {
    case 1:
        $unw = mysql_query($aufruf10) OR die (mysql_error());
        header("Location: ".$aufruf5["link"]."");
    case 0:
         $aufruf5["count"]++;
         $aufruf6 = "INSERT INTO
                         suche
                         (count)
                     VALUES
                         (".$aufruf5["count"].");";
         $aufruf7 = mysql_query($aufruf6) OR die (mysql_error());
         $aufruf8 = "INSERT INTO
                         ip
                         (id,ip,zeit)
                     VALUES
                         (".$id.",".$ip.",".$time.");";
         $aufruf9 = mysql_query($aufruf8) OR die (mysql_error());
         $unw1 = mysql_query($aufruf10) OR die (mysql_error());
         header("Location: ".$aufruf5["link"]."");;
}
?>


ich versteh nicht warum

_________________
Ich will mehr Besucher ---->Pagerank-promo.de


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Metaman
Power-Poster [User]
Power-Poster



Anmeldung: 20.11.05
Beiträge: 636

BeitragVerfasst am: 25.12.2005, 21:03    Titel: Antworten mit Zitat

könnte es sein das Du die Spalte IP als Int oder fload erstellt hast ???

die IP Spalte sollte am besten Varchar sein !!!

_________________
Webmaster Lexikon
Schnäppchensuche
Wenn Du einen Clan Sponsor suchst, schreibe mich NICHT an!!!


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Venom
Stammuser [User]
Stammuser



Anmeldung: 05.11.05
Beiträge: 25

BeitragVerfasst am: 26.12.2005, 13:23    Titel: Antworten mit Zitat

ne eigentlich nicht

id, int(11) ,null nein ,standart 0,
ip,varchar(20),null nein,
zeitvarchar(20),null nein,

so steht es in meiner tabelle.

_________________
Ich will mehr Besucher ---->Pagerank-promo.de


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Metaman
Power-Poster [User]
Power-Poster



Anmeldung: 20.11.05
Beiträge: 636

BeitragVerfasst am: 26.12.2005, 15:04    Titel: Antworten mit Zitat

ich sehe leider den fehler auch nicht direkt.
aber es hilft sicher wenn du statt dem OR die (mysql_error()
ein echo mysql_error benutzt.
also das die SQL Fehlermeldung ausgegeben wird.

ansonsten auch mal die SQL Statements direkt anzeigen lassen....

_________________
Webmaster Lexikon
Schnäppchensuche
Wenn Du einen Clan Sponsor suchst, schreibe mich NICHT an!!!


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Venom
Stammuser [User]
Stammuser



Anmeldung: 05.11.05
Beiträge: 25

BeitragVerfasst am: 26.12.2005, 16:05    Titel: Antworten mit Zitat

muss vielleicht ein komma oder sonst was hin=vielleicht muss die anfrage in "" stehen?
_________________
Ich will mehr Besucher ---->Pagerank-promo.de


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Metaman
Power-Poster [User]
Power-Poster



Anmeldung: 20.11.05
Beiträge: 636

BeitragVerfasst am: 26.12.2005, 17:24    Titel: Antworten mit Zitat

nein aber alle werte die keine Zahl sind, sollten in einfache anführungszeichen gesetzt werden.
also
insert into TABELLE(feld1,feld2,feld3)values(1,'127.0.0.1',1234567)

_________________
Webmaster Lexikon
Schnäppchensuche
Wenn Du einen Clan Sponsor suchst, schreibe mich NICHT an!!!


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Venom
Stammuser [User]
Stammuser



Anmeldung: 05.11.05
Beiträge: 25

BeitragVerfasst am: 30.12.2005, 13:26    Titel: Antworten mit Zitat

das script was du mir geschrieben hast funkt nicht.es sind schon 3 foren verzweifelt nach dem suchen des fehlers.

Code:
<?
error_reporting(E_ALL);
include ("../admin/konfig.php");
$id = $_GET['id'];
dbcon();
$time = time();
$ip = getenv ("REMOTE_ADDR");
$sperre = $time -18000;
$aufruf = "SELECT
               *
           FROM
               ip
           Where
               id=".$id."
           AND
               ip='".$ip."'
           AND
               zeit > ".$sperre.";";
$aufruf3 = "SELECT
               *
           FROM
               suche
           Where
               ID=".$id.";";
$aufruf1 = mysql_query ($aufruf) OR die (mysql_error());
$aufruf2 = mysql_num_rows ($aufruf1) OR die (mysql_error());
$aufruf4 = mysql_query ($aufruf3) OR die (mysql_error());
$aufruf5 = mysql_fetch_assoc($aufruf4);
$aufruf10 = "DELETE FROM
                 ip
             WHERE
                 zeit < ".$sperre.";";
switch ($aufruf2) {
    case 1:
        $unw = mysql_query($aufruf10) OR die (mysql_error());
        header("Location: ".$aufruf5["link"]."");
        echo "1";
        break;
    case 0:
         $aufruf5["count"]++;
         $aufruf6 = "INSERT INTO
                         suche
                         (count)
                     VALUES
                         (".$aufruf5["count"].");";
         $aufruf7 = mysql_query($aufruf6) OR die (mysql_error());
         $aufruf8 = "INSERT INTO
                         ip
                         (id,ip,zeit)
                     VALUES
                         (".$id.",'".$ip."',".$time.");";
         $aufruf9 = mysql_query($aufruf8) OR die (mysql_error());
         $unw1 = mysql_query($aufruf10) OR die (mysql_error());
         header("Location: ".$aufruf5["link"]."");
         echo "2";
         break;
    default:
        echo "3";
        break;
}
echo $id."<br>";
echo $ip."<br>";
echo $time."<br>";
echo $sperre."<br>";
echo $aufruf2;
?>


die ausgabe ist eine weiße seite.da steht nichts.woran liegt das?

_________________
Ich will mehr Besucher ---->Pagerank-promo.de


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Campino
Beliebter [User]
Beliebter



Anmeldung: 19.09.04
Beiträge: 451
Wohnort: Delmenhors ...

BeitragVerfasst am: 30.12.2005, 14:06    Titel: Antworten mit Zitat

Hi,
also wenn die Ausgabe weiß ist, dann müssten ja alle Variablen, die du ganz unten ausgibst leer sein.
Ab besten überprüftst du mal, ob die überhaupt gesetzt wurden [ if(isset()) ] . Dann müsstest du noch die Dateien überprüfen, die du per include lädst, u.U. kommentierst du da irgendwie rum, oder was weiß ich.
Dann solltest du die Rechte der Dateien überprüfen (chmod 755) und die Funktion dbcon posten.

gruß,
Campino

_________________
d >_< b


Nach oben
Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Metaman
Power-Poster [User]
Power-Poster



Anmeldung: 20.11.05
Beiträge: 636

BeitragVerfasst am: 30.12.2005, 16:02    Titel: Antworten mit Zitat

Zitat:
das script was du mir geschrieben hast funkt nicht.

sorry aber diese Aussage ist wohl nicht so ganz richtig !!!

denn dieses Script hast du selber geschrieben, und nicht ich.
ich hab lediglich versucht die auf dem richtigen Weg zu bringen...

wenn man bei einem Script absolut nicht weiterkommt, ist es manchmal vom Voteil das ding direkt zu löschen und nochmal neu anzufangen.
Hier mal ein solches Script allerdings ungetestet(also ohne Funktionsgarantie)..
must Dir jedoch den Code anschauen und namen und Variablen anpassen..
Falls Fehler im Code sein sollten, lassen sich die aber recht schnell beheben
Code:
<?
### Daten
$dbName="xxxxxxxxx";               # Datenbankname
$hostname="xxxxxxxxxxx";            # Hostname
$userdb="xxxxxxxxxx";               # Datenbank Username
$passworddb="xxxxx";               # Datenbank Passwort

$tab1="Tabelle1";                  # Tabellename mit den URLS
##### im Script benutzte Feldnamen
# id, url, anzahl

$tab2="Tabelle2";                  # Tabellename der IP Adressen
##### im Script benutzte Feldnamen
# id,ip,zeit

$sperre=18000;                     # Dauer der IP SPerre in Sekunden

## vom Script ermittelte Werte
$ip = getenv ("REMOTE_ADDR");          # IP Adresse des Users
$aktuell=time();                  # aktueller Zeitwert
$sperrzeit=$aktuell-$sperre;         # aktuelle Zeit minus Sperrzeit

# Mysql Verbindung
@$db = @MYSQL_CONNECT($hostname, $userdb, $passworddb);
if(!$db)
  {
  echo "Fehler bei Verbindung mit Datenbank";
  }
@mysql_select_db($dbName,$db);
########
 

# URL die aufgerufen werden soll anhand der ID aus Datenbank hohlen
$sql="select url from $tab1 where id=$id";
$result=mysql_query($sql);
$menge = mysql_num_rows($result);      # Anzahl der ERgebnisse prüfen
echo mysql_error();
if($menge==1){                     # nur wenn eine URL ausgelesen wurde
$row=mysql_fetch_array($result);
$seitenurl=$row['url'];

# Prüfen ob der User innerhalb der IpSperrzeit die URL schonmal aufgerufen hat
$sql="select * from $tab2 where id=$id and ip='$ip' and zeit > $sperrzeit";
$result=mysql_query($sql);
$ipmenge = mysql_num_rows($result);      # Anzahl der Ergebnisse prüfen
echo mysql_error();
if($ipmenge>=1){
####################################################
# Hier gehts rein wenn der Aufruf NICHT gezählt werden soll
####################################################
header("Location: $seitenurl");
exit;
} else{
####################################################
# Hier gehts rein wenn der Aufruf gezählt werden soll
####################################################

# Zähler der URL um 1 hochsetzen
$sql="update $tab1 set anzahl=anzahl+1 where id=$id";
$result=mysql_query($sql,$db);
echo mysql_error();

# IP des Users mit ID und Aktueller Zeit speichern
$sql="insert into $tab2(id,ip,zeit)values($id,'$ip',$aktuell)";
$result=mysql_query($sql,$db);
echo mysql_error();

# alte Datensätze in der IP Tabelle löschen
$sql="delete from $tab2 where zeit < $sperrzeit";
$result=mysql_query($sql,$db);
echo mysql_error();

# URL Aufrufen
header("Location: $seitenurl");
exit;
}
} else{

####################################################
# Wird nur angezeigt wenn zur ID keine URL in der DB gefunden wurde;
####################################################
echo "Fehler, mit der Aufgerufenen ID konnte keine Seite gefunden werden !!!!";
}
?>

_________________
Webmaster Lexikon
Schnäppchensuche
Wenn Du einen Clan Sponsor suchst, schreibe mich NICHT an!!!


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

Gehe zu:  

Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge IP-Sperre für user aus dem ausland aron91 HTML & CSS 7 17.11.2008, 19:41 Letzten Beitrag anzeigen
Keine neuen Beiträge ip sperre kralle Einsteigerforum 4 27.04.2007, 17:15 Letzten Beitrag anzeigen
Threadübersicht