• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

function ip_sperre()

Status
Für weitere Antworten geschlossen.

phpmysqllernen

Neues Mitglied
Hi Leute,

erstmal wollte ich mal hallo sagen, so als neuer in der community, habe aber auch gleich schon ein problem.

Ich habe mir bei ebay ein diebspie-script ersteigert, und habe damit ein paar probleme. Viele konnte ich schon selber lösen, aber da weiß ich noch nicht so recht wie ich das machen soll.

Also das hauptscript spiel.php enthält die Funktion ip_sperre:

PHP:
<?php
session_start();
require("connect.inc.php");
if ($_GET['hello'] == "script")
{
echo 'Hello Master!';
die;
}
include "config.inc.php";
srand(microtime()*10000000);
$rand = rand(1, 11);
function schreiben($datei,$mode) { 
   global $REMOTE_ADDR; 
   $fp = @fopen($datei,$mode); 
   flock($fp,2); 
   fwrite($fp,$REMOTE_ADDR."|".time()."\n"); 
   flock($fp,3); 
   fclose($fp); 
} 
function ip_sperre() { 
   global $REMOTE_ADDR; 
   $reloadlogdatei = "ips.txt"; 
   $anzahleintraege = 10000;
   $zeitlimit = 86400;
   if(!file_exists($reloadlogdatei)) { 
      $datei = fopen($reloadlogdatei,"w+"); 
      fclose($datei); 
   } 
   $fp = file($reloadlogdatei); 
   $size = sizeof($fp); 
   if($size >= $anzahleintraege){ 
      schreiben($reloadlogdatei,"w"); 
   } 
   else { 
      $ausgabe=false; 
      for ($i=0;$i<$size;$i++) { 
         $zeile = explode("|",$fp[$i]); 
         if ($zeile[0] == $REMOTE_ADDR AND $zeile[1] > (time()-$zeitlimit)){ 
            // ip wird gefunden 
            $ausgabe = true; 
         } 
      } 
      schreiben($reloadlogdatei,"a+"); 
   } 
   return $ausgabe; 
}
$abfrage=mysql_query("select * from dieb_user_".$digit." WHERE `id` = '".$_GET['id']."'");
while ($row2 = mysql_fetch_array($abfrage))
{
$names = $row2["user"];
$bekid = $row2["bekid"];
$punkte = $row2["geld"];
}
(int) $zahl = $anzahl[$rand];

$text = '<B>"'.$names.'"</b> hat von Ihnen einen Punkt bekommen, DANKE';

$geld1 = '1';
$geld2 = '1';
$geld3 = '1';
$geld4 = '1';
$geld5 = '1';
$geld6 = '1';
$geld7 = '1';
$geld8 = '1';
$geld9 = '1';
$geld10 = '1';
$geld11 = '1';
$anzahl = array(1=>"$geld1",
              2=>"$geld2",
              3=>"$geld3",
              4=>"$geld4",
              5=>"$geld5",
              6=>"$geld6",
              7=>"$geld7",
              8=>"$geld8",
              9=>"$geld9",
              10=>"$geld10",
              11=>"$geld11",
              12=>"$geld12");
if (ip_sperre()==false) { 
$inhalt .= $text;
$neuepunkte = $punkte+$anzahl[$rand];
$neubekid = $bekid+1;
mysql_query("update dieb_user_".$digit." Set geld = '".$neuepunkte."', bekid = '".$neubekid."' WHERE id = '".$_GET['id']."'");
$inhalt .= '<BR><BR>Der User "'.$names.'" hat jetzt '.$neuepunkte.' '.$waehrung.'!';
}
else
{
$inhalt .= 'Sie können pro Tag nur ein mal beklaut werden, <B>"'.$names.'"</b> hat von Ihnen keinen Punkt bekommen ';
}
$inhalt .= '<BR><BR>Wollen sie auch ein Dieb werden ? Dann melden sie sich an, oder informieren sie sich.<BR><a href="http://test.de/">Weiter zur Anmeldung!</a><BR><a href="http://test.de/">Was ist "Diebspiel" ?</a>';
$template = implode("",file("template/style.html"));
$template = str_replace("<?inhalt?>", $inhalt, $template);
echo ($template);

?>
das soll eine ip-sperre darstellen, welche 24 stunden gilt. Mein problem nur :

Ich verstehe die ips.txt nicht :

Beispiel:
Code:
|1154463602
|1154463630
|1154463967
|1154464009
|1154464041
|1154464118
|1154464655
|1154469314
|1154469664
|1154477976
|1155077963
|1155077966
|1155077969
ich habe eigentlich gedacht, dass in dieset .txt die ip des besuchers gespeichert wird, aber denkst´e... is nicht.

also habe ich mich, auch mal wegen der sicherheit dazu entschlossen die ip-s sowie die uhrzeit des besuches in einer mysql datenbank zu speichern.

also ne funktion die die ip-adressen der besucher sowie die uhrzeit des besuches in der datenbank speichert. danach muss die function denn noch überprüfen ob diese ip-adresse in den letzten 24 stunden schon die site bvesucht hat. wenn ja denn soll true ausgegeben werde, wenn nicht denn false.

könntet ihr mir da ein bisschen haelfen ?:oops:

Danke:D

ps: das script ist noch unausgereift und muss noch geändert werde also übver sowas :

Code:
 $geld1 = '1';
$geld2 = '1';
$geld3 = '1';
$geld4 = '1';
$geld5 = '1';
$geld6 = '1';
$geld7 = '1';
$geld8 = '1';
$geld9 = '1';
$geld10 = '1';
$geld11 = '1';

bitte nicht wundern, das änder ich noch... :-)
 
Ohhh, einfach das error reporting von PHP aktivieren und fehlermeldungen anschauen ... sollte Dir das Problem visualisieren:

PHP:
<?php
error_reporting(E_ALL);
session_start();
require("connect.inc.php");
...

Gruß,
Jumper, the II.
 
naja gut, dass da ein paar fehler drinne sind ist mir klar, aber erstmal hab ich vor das mit der datenbank zu ändern, denn das mit der ips.txt ist ein bisschen unsicher und andere nachteile gibts auch....

danach sind die anderen fehler alle dran :-)

ps.trozdem thx für dein tip !!!!
 
Naja .. einer der Fehlermeldungen gibt Dir genau an, dass es die Variable $REMOTE_ADDR nicht unterstützt ... Siehe globale Variablen in PHP .... Ups, wollte ich ja eigentlich nicht verraten .... :twisted:

Gruß,
Jumper, the II.
 
ja gut aber wofür ist diese variable überhaupt da?

Code:
[B]Notice[/B]:  Undefined index:  hello in [B]C:\Programme\xampp\htdocs\site\diebspiel\spiel.php[/B] on line [B]5[/B]

[B]Notice[/B]:  Undefined variable: anzahl in [B]C:\Programme\xampp\htdocs\site\diebspiel\spiel.php[/B] on line [B]55[/B]

[B]Notice[/B]:  Undefined variable: geld12 in [B]C:\Programme\xampp\htdocs\site\diebspiel\spiel.php[/B] on line [B]81[/B]
 
Sie soll die IP-Adresse des Clients enthalten ... oder wie im vorliegenden Fall auch nicht. Wo Du sie jetzt findest, findest Du bei Google, in der Dokumentation oder auch in der PHP-Funktion
PHP:
phpinfo();
bei der Ausgabe im Browser ....

Gruß,
Jumper, the II.
 
achso, $REMOTE_ADDR gigt die IP des durchschleifenden Apache Servers zurückgibt und nicht die IP des Clients .... und wie kann man die ip-adresse des clients speichern/abfragen ????

sry, hab erst nicht gewusst was du meinst

!!!was hab ich denn da fürn script gekauft!!!:evil:
 
Nurmal so zur Info, du hättest ein DiebspielScript kostenlos zum download bekommen wenn du mal gegogglet hättest. Hier eine Seite:
eichhornleib.de
 
ach naja, 1000 php scripts per mail für 1 euro ist nicht so wild ...
 
nagut, hat sich mit der ip reloadsperre ein bisschen geändert. dadurch, dass aol user teilweise vom gleiuchen proxy kommen und das leider auch bvei anderen providern so ist, ist das blöd, wenn nur 1 von 3 bei dem spiel mit machen kann, weil er die gleiche ip hat. wie kann m,an denn in meinem scrip ober eine bessere 24h reloadsperre realisieren ?
 
ich glaube etwas einer ip vergleichbares gibt es nicht,
(jedenfalls as man überprüfen könnte)

musst dich halt entscheiden!

meine ip ändert sich zum beispiel beim einwählen, ich hätte dann keine probs mit deinem spiel, nur das blöde iszt, ich könnte mich neu einwählen und nochmal dein spiel besuchen.

das heißt für mich wäre eine ip sperre kein problem.

allerdings ist das negativ für dich. und was noch negativ ist, manche sind wegen einer festen ip ausgeschlossen, nachdem sie es einmal gemavht haben!

its youre choice
 
naja genau darum gehts ja, aber wie bekommt man den trozdem eine relativ betrugssichere reloadsperre hin ? jeden besucher ne session generieren und die session id mit dem timeout speichern?

leider nimmt ja auch nicht jeder browser cookies

kann man da denn nicht irgendwas kombinieren, sodass das relativ sicher ist ?

Edit:
hmm. das man dort theoretisch durch eine neueinwahl öfter mit machen kann ist nicht so unbedingt mein problem fällt mir gerade auf. den mein werbepartner layer-ads bezahlt ja pro ip/24 stunden und würde somit trozdem auszahlen

also werde ich das denn doch per ip-sperre machen...

jetzt ist aber irgendwie mein problem, dass das bei manchen nicht geklappt hat. obwohl diese nocjh nie auf meiner seite waren, wurde gesagt,m, dass sie nicht mit machen können, weil sie berits mit gemacht haben, und das obwohl kein anderer mi#t der gleichen ip in den letzten 24 h auf der seite war.

wenn ihr so nett wäöret könntet ihr mir ja mal helfen.

ich poste hier mal mein diebspiel link, wäre nett, wenn ihr mir schreiben könntet, was beim klicken des links als erstes kommt.

a)tralala hat sie beklaut ...

oder

b) sie wurden berits beklaut... blablabla

und denn vielleicht hiert mal die antwort posten, denn weiß ich ob das script funktioniert...

wichtig ist aber das ihr das postet was als erstes kommt, und nicht das was kommt wenn ihr die seite neu ladet!!!

wäre echt net

also der link ist :

http://collectmoney.dyndns.org/site/...piel.php?id=15

//edit: weil homerechnertest ist der link erst wieder ab 15 uhr wieder errecihbar, denn wäre nettw enn jemand von euch, bzw auch mehrere den link testen !!!

THX


die fehlermeldungen bitte ignorieren, das änder ich noch

DAnke!!!


Mod-Edit: Doppelpost zusammengefügt (Artemis)
 
Zuletzt bearbeitet von einem Moderator:
ich hab mal ne ganz allgemeine frage: wo werden die ip-adresse gespeichwert ???? Ich sehe da nur timestamps ohne ip-adresse.... deshalb funktioniert das nicht... wie kann ich das denn ändern? also dass der timestamps und ips speicher, und zwar so dass er die in der funktion ip_sperre() auch wieder auslesen kann....

Thx für eure Hilfe
 
also ich habe das script mal umgeschrieben.

zwar läuft es noch nicht mit der mysql bank aber das änder ich noch. mein problem ist aber zur zeit, dass nix in die ips.txt geschrieben wird, und das die ipsperre nicht funktioniert....

hier ist mal mein umgeschriebenes script :

PHP:
<?php
session_start();
require("connect.inc.php");
include "config.inc.php";
srand(microtime()*10000000);

$ipbarrier = 86400; //Zeit in der die IP-Sperre gilt
$ip = $_SERVER['REMOTE_ADDR'];
$proxyip = $_SERVER['HTTP_X_FORWARDED_FOR'];


function schreiben($datei,$mode) { 
   global $ip,$proxyip; 
   $fp = @fopen($datei,$mode); 
   flock($fp,2); 
   fwrite($fp,(time()+$ipbarrier)."##".$ip."##".$proxyip."\n"); 
   flock($fp,3); 
   fclose($fp);

}

function exists(){

if(!file_exists("ips.txt")) { 
      $datei = fopen("ips.txt","w+"); 
      fclose($datei); 
   } 

global $ip,$proxyip;
 if(isset($_COOKIE['bla']) && $_COOKIE['bla']=="blo"){
  return true;
 }

 $lines = file("ips.txt");
 foreach($lines as $line_x){
  $line = explode("##",$line_x);
  if($line[1] == $ip || $line[2] == $proxyip){
   if($line[0] >= time()){
    return true;
   }
  }
    else
    {
    schreiben("ips.txt","a+");
    }
 }
 return false;
}

$abfrage=mysql_query("select * from dieb_user_".$digit." 
WHERE `id` = '".$_GET['id']."'");

while ($row2 = mysql_fetch_array($abfrage))
{
$names = $row2["user"];
$bekid = $row2["bekid"];
$punkte = $row2["geld"];
$aktiviert = $row2["aktiviert"];
}

$text = '<B>"'.$names.'"</b>hat durch Sie einen 
Punkt bekommen. Er ist dem Jackpot nun wieder einen 
Schritt näher gekommen!';

if($aktiviert == '0') {
     $inhalt .= '<form action="spiel.php" method="post">';
     $inhalt .= '<p align="center">Der Account ist noch nicht aktiviert,
 der Benutzer kann noch keine Punkte 

sammeln!<br><br>';
     $inhalt .= '<input type="hidden" name="username"
 value="'.$_POST['username'].'">';
     $inhalt .= '<input type="submit" name="zurueck"
 value="Zur&uuml;ck"></p>';
     $inhalt .= '</form>';
     
     }elseif(exists()==false) {
$inhalt .= $text;
$neuepunkte = $punkte+1;
$neubekid = $bekid+1;
$beklauteins = beklauteins+1;
mysql_query("update dieb_user_".$digit." Set geld = 
'".$neuepunkte."', bekid = '".$neubekid."' WHERE id = 

'".$_GET['id']."'");
$inhalt .= '<BR><BR>Der User "'.$names.'" hat jetzt 
'.$neuepunkte.' '.$waehrung.'!';
$inhalt .= '<BR><BR>Insgesammt wurden bis jetzt 
"'.$beklauteins.'" Leute überfallen !';
}
else
{
$inhalt .= 'Sie können pro Tag nur ein mal beklaut werden!!!';
}
$inhalt .= '<BR><BR>Wollen sie auch ein Dieb werden ? Dann melden 
sie sich an, oder informieren sie sich.<BR><a 

href="registrieren.php">Weiter zur Anmeldung!</a><BR>
<a href="index.php?seite=info">Was ist "Diebspiel" ?</a>';
$template = implode("",file("template/style.html"));
$template = str_replace("<?inhalt?>", $inhalt, $template);
echo ($template);
?>


sieht jemand von euch den/die fehler ?


thx für eure hilfe !!!
 
Zuletzt bearbeitet von einem Moderator:
Status
Für weitere Antworten geschlossen.
Zurück
Oben