ip-sperre

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Woosh
Mitglied
Beiträge: 9
Registriert: 11.08.2006 11:02
Kontaktdaten:

ip-sperre

Beitrag 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
Woosh
Mitglied
Beiträge: 9
Registriert: 11.08.2006 11:02
Kontaktdaten:

Beitrag von Woosh »

ahm... habt ihr den thread nur übersehen oder habt ihr keine lust dazu?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Wohl eher letzteres. "Ich habe keine Lust zum selber lernen, macht mir mal X" Anfragen passen besser in die Jobbörse.
KB:knigge
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

Beitrag 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.
Bitte keine Anfragen mehr per PN
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
Woosh
Mitglied
Beiträge: 9
Registriert: 11.08.2006 11:02
Kontaktdaten:

Beitrag 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
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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:
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Jensemann
Ehemaliges Teammitglied
Beiträge: 2549
Registriert: 25.02.2002 01:00

Beitrag 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.
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

Beitrag 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...
Bitte keine Anfragen mehr per PN
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
Jensemann
Ehemaliges Teammitglied
Beiträge: 2549
Registriert: 25.02.2002 01:00

Beitrag 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.
Benutzeravatar
witzigerkiller
Gesperrt
Beiträge: 878
Registriert: 05.02.2005 13:27
Wohnort: Sonthofen

Beitrag 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)
Bitte keine Anfragen mehr per PN
When you get me on my nerven I put you in the Gully and do the Deckel drüf and you never will come back to the Tageslicht.
Antworten

Zurück zu „Coding & Technik“