Ip counter
ergo
- html
Hallo zusammen!
Ich möchte gerne eine Seite bauen, auf der erst nach einer gewissen Anzahl von klicks Sachen freigeschaltet werden, wie zum Beispiel Geld in Bettelspielen.
Ich habe also in meinem Link eine ID. Und erst wenn (sagen wir mal:) 20 verschiedene IPs auf diesem Link waren werde ich zum Beispiel eine Stufe höher gestellt oder sowas. Also meine Frage ich jetzt, wie man so etwas baut, oder ob mir jemand einen Qelltext für sowas geben kann?
Danke schonmal für Eure Hilfe.
ergo
Hi!
Ich möchte gerne eine Seite bauen, auf der erst nach einer gewissen Anzahl von klicks Sachen freigeschaltet werden, wie zum Beispiel Geld in Bettelspielen.
Eine Seite, die Geld freischaltet hätte ich auch gerne - diese würde ich ganztägig lesen.
Ich habe also in meinem Link eine ID.
Diese Schlußfolgerung verstehe ich nicht - welcher Link, woher kommt die ID?
Und erst wenn (sagen wir mal:) 20 verschiedene IPs auf diesem Link waren werde ich zum Beispiel eine Stufe höher gestellt oder sowas.
IPs gehen niemals auf Links - zudem gibt es derzeit nur zwei: IPV4 und IPV6(NG).
Auch wenn ich unterstelle, Du habest mit IP, die IP-Adresse gemeint ändert sich meine Aussage nicht.
Also meine Frage ich jetzt, wie man so etwas baut, oder ob mir jemand einen Qelltext für sowas geben kann?
Was hast Du denn vor?
Danke schonmal für Eure Hilfe.
Gerne.
ergo
logisch!
off:PP
hi,
[..] Also meine Frage ich jetzt, wie man so etwas baut, oder ob mir jemand einen Qelltext für sowas geben kann?
Clientseitig einen Ajax-Request rausschicken:
ajaxRequest('/cgi-bin/cnt.cgi?count='+document.URL);
cnt.cgi ist ein serverseitiges Script, das frägt die Umgebungsvariable REMOTE_ADDR nach der IP-Adresse. Beides, document.URL und IP-Adresse kommen serverseitig in eine DB und werden hochgezählt in einem weiteren Datenfeld.
Das wäre mein Vorschlag. Was das Speichern der IP-Adresse betrifft, bitte die aktuellen gesetzlichen Vorschriften beachten und ggf. den Besucher darauf hinweisen.
Alternative zu Ajax: SSI
Hotte
Hi,
hab da mal ein Script gefunden. Hab nur keine Ahnung wie und ob es läuft. Aber du kannst ja mal schauen.
Die index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title></title>
<?php
include 'config.php';
function refgen($length)
{
list($msec,$sec)=explode(' ',microtime());
mt_srand((float) $sec + ((float) $msec * 100000));
return substr(md5(uniqid(mt_rand(),true)),0,$length);
}
$adresse = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
// AUTOREFRESH
echo "<meta http-equiv=\"refresh\" content=\"30; url=$adresse\">
</head><body>
<div id="wrapper">
<div id="content">";
$files = array();
// DOWNLOADS IN ARRAY LESEN
//z.B. $files[] = 30|Titel|Beschreibung|URL (Zahlenwert ist Anzahl der Klicks);
// Beispiele:
$files[] = "5|Mein Banner|Die Beschreibung|http://www.url.de/datei.jpg";
$files[] = "10|Ein tolles Bild|Die andere Beschreibung|http://www.url2.de/bild.jpg";
// SCRIPT START
$ip = getenv("REMOTE_ADDR");
echo "<h1>Downloads für $ip</h1>";
$make_new_link = true;
$sql = "SELECT * FROM snowball";
$result = mysql_query($sql);
while($zeile = mysql_fetch_object($result))
{
if($zeile->ip == $ip)
{
$code = $zeile->code;
$make_new_link = false;
$myhits = $zeile->hits;
}
}
if($make_new_link)
{
$code = md5(refgen(16));
$sql = "INSERT INTO snowball (code,hits,ip) VALUES ('$code', 0, '$ip')";
mysql_query($sql);
}
else
{
echo "<b><i>Du hast bereits $myhits Hits.</i></b><br>";
}
echo "Dein persönlicher Link lautet: <b>".$adresse."?ref=$code</b><br>
Schicke diesen Link an Bekannte weiter um die Downloads freizuschalten!<br>
Autorefresh nach 30 Sek oder <a href='$phpself'>hier</a> klicken!";
if(isset($_GET['ref']))
{
$code = $_GET['ref'];
$sql = "SELECT ip FROM snowball WHERE code='$code' LIMIT 1";
$dat = mysql_fetch_object(mysql_query($sql));
if($dat->ip != getenv("REMOTE_ADDR"))
{
$sql = "UPDATE snowball SET hits = hits+1 WHERE code = '$code' LIMIT 1";
mysql_query($sql);
}
}
// DOWNLOADS AUFLISTEN
echo "<br><br><table width=\"100%\">
<tr><td>Titel:</td><td>Beschreibung:</td><td>Filename:</td><td>Nötige Hits:</td><td>Link:</td></tr>";
foreach($files AS $entry)
{
$a1 = explode("|",$entry);
$klicks = $a1[0];
$titel = $a1[1];
$des = $a1[2];
$url = explode("/",$a1[3]);
$file = $url[sizeof($url)-1];
echo "<tr><td>$titel</td><td>$des</td><td>$file</td><td>$klicks</td><td>";
if($klicks <= $myhits)
echo "<a href=\"$a1[3]\"><font color=\"green\">Download freigeschaltet</font></a>";
else echo "<font color=\"red\">Download gesperrt</font>";
echo "</td></tr>\n";
}
echo "</table>";
mysql_close($connection);
?>
</div><!--content-end-->
</body>
</html>
Die install.php
<?php
include 'inc/config.php';
$sql = "CREATE TABLE IF NOT EXISTS snowball
(
id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(32) NOT NULL,
hits INT(5) NOT NULL,
ip VARCHAR(24) NOT NULL
)";
mysql_query($sql);
?>
und die config.php
<?php
// Datenbank-Angaben
// ###########
//HOST:
$db_host = "datenbank host";
// USER:
$db_user = "datenbank benutzer";
// PASSWORT:
$db_pass = "datenbank passwort";
//DATENBANK-NAME
$db_name = "datenbank name";
$connection = mysql_connect($db_host, $db_user, $db_pass)
or die ("Verbindung nicht möglich!");
mysql_select_db($db_name)
or die ("Datenbank nicht gefunden");
?>
Hallo,
hab da mal ein Script gefunden. Hab nur keine Ahnung wie und ob es läuft. Aber du kannst ja mal schauen.
es ist kaputt, unsicher und höchst miserabel dokumentiert. Von der Benutzung solcher Katastrophen rate ich dringendst ab.
Freundliche Grüße
Vinzenz
es ist kaputt, unsicher und höchst miserabel dokumentiert. Von der Benutzung solcher Katastrophen rate ich dringendst ab.
Tut mit leid.
Hab wie schon gesagt keine Ahnung davon.
MfG
Simon
Hallo Simon,
es ist kaputt, unsicher und höchst miserabel dokumentiert. Von der Benutzung solcher Katastrophen rate ich dringendst ab.
Tut mit leid.
Du hast es ja nicht verbrochen.
Hab wie schon gesagt keine Ahnung davon.
Du solltest Dir allerdings Kenntnisse erwerben, um fremde Skripte besser beurteilen zu können.
a) Dokumentation
Wenn ein fremdes Skript nicht dokumentiert ist, ist es fast immer ratsam,
die Finger davon zu lassen. In der Zeit, in der man versucht zu verstehen,
was der Programmierer machen wollte, hat man es oft besser und schneller
selbst geschrieben.
Dass das Skript so gut wie überhaupt nicht dokumentiert ist, sieht man auf Anhieb.
b) Unsicherheit
Vor kurzem gab es einen Thread, der auf eine Liste der 25 gefährlichsten
Programmierfehler verlinkte. Das Skript weist mehrere der dort aufgeführten
Fehler auf, unter anderem gleich die ersten vier der ersten Kategorie:
- nicht angemessene Validierung von Eingaben (nicht vorhanden)
- nicht angemessenes Encoding/Escaping von Ausgaben (nicht vorhanden)
- Anfälligkeit für SQL-Injection (fehlende Maskierung)
- Anfälligkeit für XSS-Scripting (Verwendung von $_SERVER['PHP_SELF']
c) Fehlerbehandlung ist für den Autor ein Fremdwort. Ein Skript sterben zu
lassen, ist übrigens auch keine Fehlerbehandlung.
Somit kommen wir zum Fazit: Ein kaputtes Skript, das bestenfalls als Anschauungsobjekt dienen kann, wieviele riskante Fehler man in relativ wenig Code einbauen kann. Solche Skripte können übriges einen ganzen Server gefährden (bei shared hosting), weil überflüssigerweise (und manchmal auch schädlicherweise) der Zufallszahlengenerator initialisiert wird, statt einfach die Funktion zu nehmen, die im Handbuch angegeben ist.
Freundliche Grüße
Vinzenz