Seite 1 von 2

ip-sperre

Verfasst: 14.08.2006 13:30
von Woosh
ich dachte mir, vllt könnt ihr mir helfen... also... ich will im moment eine umfrage erstellen, allerdings ohne mysql, sondern mit txt-dateien! ich habe zwei dateien, eine datei mit dem formular (index.php) und eine, die dann die stimmen verteilt in verschiedene txt-dateien (send.php)! hier die codes:

index.php

Code: Alles auswählen

<html>
<head>
<title>BINE und CHRISTOPH - Wie lange kann das nur gutgehen?!?</title>
</head>
<body bgcolor='#000000'>
<center>
<font color='#FFFFFF'>
<font size='5' face='Arial'><b>Wir brauchen DEINE Meinung zu...</b></font><p>
<font size='3'><i>"Wie lange halten es diese beiden zusammen aus?"</i></font><p>
<table border='0' style='border'>
  <tr>
    <td width='150'><center><img src='img/bine.JPG'></center></td>
    <td><font face='Arial' color='#FFFFFF' size='5'><b>+</b></font>
    <td width='150'><center><img src='img/christoph.JPG'></center></td>
  </tr>
  <tr>
    <td><center><font face='Arial' color='#FFFFFF' size='5'>Bine</font></center></td>
    <td></td>
    <td><center><font face='Arial' color='#FFFFFF' size='5'>Christoph</font></center></td>
  </tr>
</table>
<form action='send.php' method='post'>
STIMMT HIER AB:<p>
<input type='radio' name='zeit' value='1_monat'> 1 Monat<br>
<input type='radio' name='zeit' value='2_monate'> 2 Monate<br>
<input type='radio' name='zeit' value='6_monate'> 6 Monate<br>
<input type='radio' name='zeit' value='12_monate'> 12 Monate<br>
<input type='radio' name='zeit' value='laenger'> L&auml;nger<br>
<input type='submit' name='send' value='Absenden'>
</form>
<hr>
<font face='Arial' size='1' color='#FFFFFF'>&copy; by Mr. Unbekannt</font>
</font>
</center>
</body>
</html>

send.php

Code: Alles auswählen

<html>
<head>
<title>VIELEN DANK!</title>
</head>
<body bgcolor='#000000'>
<center>
<font color='#FFFFFF'>
<font size='5' face='Arial'><b>Wir brauchen DEINE Meinung zu...</b></font><p>
<font size='3'><i>"Wie lange halten es diese beiden zusammen aus?"</i></font><p>
<table border='0' style='border'>
  <tr>
    <td width='150'><center><img src='img/bine.JPG'></center></td>
    <td><font face='Arial' color='#FFFFFF' size='5'><b>+</b></font>
    <td width='150'><center><img src='img/christoph.JPG'></center></td>
  </tr>
  <tr>
    <td><center><font face='Arial' color='#FFFFFF' size='5'>Bine</font></center></td>
    <td></td>
    <td><center><font face='Arial' color='#FFFFFF' size='5'>Christoph</font></center></td>
  </tr>
</table>
<font face='Arial' color='#FFFFFF' size='3'>
<p>
<?
$txt;
if(isset($_POST['send']))
{
switch($_POST['zeit'])
{
  case '1_monat': $txt='files/1_monat.txt'; break;
  case '2_monate': $txt='files/2_monate.txt'; break;
  case '6_monate': $txt='files/6_monate.txt'; break;
  case '12_monate': $txt='files/12_monate.txt'; break;
  case 'laenger': $txt='files/laenger.txt'; break;
  default: echo 'Du musst einen Zeitraum w&auml;hlen!'; break;
}
$counter=fopen($txt,'r+');
$aufruf=fgets($counter,100);
$aufruf=$aufruf+1;
rewind($counter);
fputs($counter,$aufruf);
fclose($counter);
echo '<b>Deine Stimme wurde gez&auml;hlt. Danke für deine Teilnahme an unserer Umfrage!</b>';
echo '<p>';
echo 'Bisherige Statistik &uuml;ber eure Meinungen:<p>';
echo '1 Monat: ';
include ('files/1_monat.txt');
echo ' Stimme/n<br>';
echo '2 Monate: ';
include ('files/2_monate.txt');
echo ' Stimme/n<br>';
echo '6 Monate: ';
include ('files/6_monate.txt');
echo ' Stimme/n<br>';
echo '12 Monate: ';
include ('files/12_monate.txt');
echo ' Stimme/n<br>';
echo 'L&auml;nger: ';
include ('files/laenger.txt');
echo ' Stimme/n<br>';
}
else
{
echo 'ERROR! (Es fand ein Übergabefehler der Variable send im Formular statt! Bitte versuch es nocheinmal!';
}
?>
<p>
</font>
<font face='Arial' size='1' color='#FFFFFF'>&copy; by Mr. Unbekannt</font>
</font>
</center>
</body>
</html>
<html>
<head>
<title>VIELEN DANK!</title>
</head>
<body bgcolor='#000000'>
<center>
<font color='#FFFFFF'>
<font size='5' face='Arial'><b>Wir brauchen DEINE Meinung zu...</b></font><p>
<font size='3'><i>"Wie lange halten es diese beiden zusammen aus?"</i></font><p>
<table border='0' style='border'>
  <tr>
    <td width='150'><center><img src='img/bine.JPG'></center></td>
    <td><font face='Arial' color='#FFFFFF' size='5'><b>+</b></font>
    <td width='150'><center><img src='img/christoph.JPG'></center></td>
  </tr>
  <tr>
    <td><center><font face='Arial' color='#FFFFFF' size='5'>Bine</font></center></td>
    <td></td>
    <td><center><font face='Arial' color='#FFFFFF' size='5'>Christoph</font></center></td>
  </tr>
</table>
<font face='Arial' color='#FFFFFF' size='3'>
<p>
<?
$txt;
if(isset($_POST['send']))
{
switch($_POST['zeit'])
{
  case '1_monat': $txt='files/1_monat.txt'; break;
  case '2_monate': $txt='files/2_monate.txt'; break;
  case '6_monate': $txt='files/6_monate.txt'; break;
  case '12_monate': $txt='files/12_monate.txt'; break;
  case 'laenger': $txt='files/laenger.txt'; break;
  default: echo 'Du musst einen Zeitraum w&auml;hlen!'; break;
}
$counter=fopen($txt,'r+');
$aufruf=fgets($counter,100);
$aufruf=$aufruf+1;
rewind($counter);
fputs($counter,$aufruf);
fclose($counter);
echo '<b>Deine Stimme wurde gez&auml;hlt. Danke für deine Teilnahme an unserer Umfrage!</b>';
echo '<p>';
echo 'Bisherige Statistik &uuml;ber eure Meinungen:<p>';
echo '1 Monat: ';
include ('files/1_monat.txt');
echo ' Stimme/n<br>';
echo '2 Monate: ';
include ('files/2_monate.txt');
echo ' Stimme/n<br>';
echo '6 Monate: ';
include ('files/6_monate.txt');
echo ' Stimme/n<br>';
echo '12 Monate: ';
include ('files/12_monate.txt');
echo ' Stimme/n<br>';
echo 'L&auml;nger: ';
include ('files/laenger.txt');
echo ' Stimme/n<br>';
}
else
{
echo 'ERROR! (Es fand ein Übergabefehler der Variable send im Formular statt! Bitte versuch es nocheinmal!';
}
?>
<p>
</font>
<font face='Arial' size='1' color='#FFFFFF'>&copy; by Mr. Unbekannt</font>
</font>
</center>
</body>
</html>

ich wollte fragen, ob ihr mir den code so abändern könntet, dass eine ip-sperre vorhanden ist, weil ich nicht will, dass jemand 2 mal wählen kann! ich hatte eigentlich vor, dass die ip von jedem, der bereits gewählt hat in einer weiteren txt-datei mit dem pfad files/ip.txt festgehalten wird. ich hoffe, dass ihr wisst was ich meine. ich würde mich freuen, wenn ihr den code mit dieser ip-sperre vervollständigen würdet!

lg woosh

Verfasst: 15.08.2006 13:43
von Woosh
ahm... habt ihr den thread nur übersehen oder habt ihr keine lust dazu?

Verfasst: 15.08.2006 20:43
von Pyramide
Wohl eher letzteres. "Ich habe keine Lust zum selber lernen, macht mir mal X" Anfragen passen besser in die Jobbörse.

Verfasst: 15.08.2006 21:37
von witzigerkiller
also ich hatte ihm per icq schon gesagt, das er die ip in eine txt datei speichern soll, aber ich konnte ihm leider nicht erklären wie man diese dann abgleicht, da ich mit den datei befehlen mich selten befasst habe.

also einer müsste nurnoch sagen, wie ich die auslese und dann abgleiche dann mache ich ihm das auch fertig.

Verfasst: 16.08.2006 11:41
von Woosh
wäre sehr nett von dir witzigerkiller... kann uns das irgendjemand sagen? bzw. witzigerkiller, weil ich mich da ned besonders gut auskenne

lg woosh

Verfasst: 16.08.2006 13:56
von S2B
Dabei dürfte vor allem die Funktion [php:file] sinnvoll sein. Diese gibt ein "Zeilen-Array" aus (Achtung: \n wird nicht gelöscht!). Zum Schreiben kannst du [php:fwrite] benutzen. :wink:

Verfasst: 16.08.2006 14:39
von Jensemann
Ich mische mich mal kurz ein, da hier wieder Menschen versuchen eine Datenbank-Logik auf ein Dateisystem zu pressen.

Wenn es nur um den Abgleich geht, ist das eintragen der IP in eine Datei die wohl langsamste Lösung die man sich vorstellen kann. Wesentlich performanter ist es, einfach eine Datei zu erstellen mit dem Namen der IP, so muß nur geprüft werden ob diese schon existiert, zudem hat das den Vorteil das man über Auslesen der CTime heraus finden kann wann mit dieser IP abgestimmt wurde. Weiterhin erspart man sich das (hässliche) arbeiten mit Locking-Mechanismen um die Datei vor muliplen-Schreibzugriffen zu schützen, welche zumindest bei PHP4 (bei PHP5 ist mir nichts bekannt) ohnehin nicht korrekt funktionieren.

Erwartet man besonders viele Abstimmungen, kann man selbst dieses Verfahren noch optimieren, indem man die Dateien in Unterverzeichnisse aufteilt, z.B. für den 1. Block der (IPV4-)IP ein Verzeichniss erstellt: 127/127.0.0.1 127/127.0.0.2 192/192.168.1.7 213/213.133.103.207 etc... Dies hat dann den weiteren Vorteil das die serielle Suche welche von stat verwendet wird schneller durchlaufen wird, da die Dateiliste deutlich kleiner ist.

Verfasst: 16.08.2006 14:55
von witzigerkiller
das ist eine hervoragende idee, jenseman.

wär ich nie draufgekommen. wenn du mir noch veraten würdest, wie ich dann die zeit rausbekomme wann diese datei erstellt worden ist, wäre das prima, dann könnte ich das so einbasteln, das wenn z.b. eine woche vergangen ist, die dateien mit ip wo länger als eine woche existieren zu löschen..

Man da wäre ich echt nie draufgekommen...

Verfasst: 16.08.2006 14:58
von Jensemann
Entweder http://de3.php.net/manual/de/function.filectime.php oder über http://de.php.net/stat

Geht beides, letztlich macht filectime() auch nichts anderes als stat() zu machen und dir den Index rauszuwerfen.

Verfasst: 16.08.2006 15:05
von witzigerkiller
also ich würde das so machen:

Code: Alles auswählen

if (!file_exists($_SERVER['REMOTE_ADDR'].".txt"))
dann abstimmen, falls dann abgestimmt worden ist, eine datei mit der ip erstellen.

falls die datei jedoch schon existiert, gibt er aus das man nicht 2 mal abstimmen kann..

und dann würde ich noch das machen jedoch weiter oben in der datei, das die zeit abgefragt wird:

Code: Alles auswählen

if (filectime($_SERVER['REMOTE_ADDR']) < time()+1woche)
dann löschen

würde ich so richtig vorgehen? also ich würde mal sagen er erwartet nicht mehr als 50-60 stimmen, (ich kenn ihn schlieslich)