/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Ban ip script
Fra : Nederbasse


Dato : 10-09-05 21:48

Hej

Jeg har store problemer med at få et script der skal banne nogle tumper som
spammer mig fra mit site
scriptet ser sådan ud

<?php
$banned_ip = array();
$banned_ip[] = '100.100.100.100';
$banned_ip[] = '100.100.100.200';
$banned_ip[] = '111.111.111.113';

foreach($banned_ip as $banned) {
$ip = $_SERVER['REMOTE_ADDR'];
if($ip == $banned){
echo "Banned!";
}
else
{
$navn = empty($_REQUEST["navn"]) ? '' : $_REQUEST["navn"];
$email = empty($_REQUEST["email"]) ? '' : $_REQUEST["email"];
$emne = empty($_REQUEST["emne"]) ? '' : $_REQUEST["emne"];
$besked = empty($_REQUEST["besked"]) ? '' : $_REQUEST["besked"];
mail("min@email.dk", "$emne", "$besked", "From: Web<$email>");
}
}
?>

Som det ser ud nu sender det 3 mails, sætter jeg flere ip adresser i arrayet
sender det flere mails
uden at banne nogen

Lars N



 
 
René Lønstrup (10-09-2005)
Kommentar
Fra : René Lønstrup


Dato : 10-09-05 23:33

Nederbasse wrote:
> Som det ser ud nu sender det 3 mails, sætter jeg flere ip adresser i
> arrayet sender det flere mails

Ja, for du sender inde fra din løkke, hver eneste gang brugerens
IP-adresse ikke er lig med den pågældende række i arrayet.
Jeg ville typisk bruge en boolean variabel sat til true, der i dette
eksempel vil blive sat til false hvis brugeren er på den sorte liste, og
så sende mailen hvis variablen stadig er true *efter* løkken:

<?
$banned_ip = array();
// [...] //
$ip = $_SERVER['REMOTE_ADDR'];
$authorizedUser = true;
foreach($banned_ip as $banned) {
if($ip == $banned) {
echo "Banned!";
$authorizedUser = false;
break;
}
}
if ($authorizedUser) {
// send mail
}
?>


--
Mvh René Lønstrup
web: http://rene.loenstrup.net?r=usenet
email: se om du kan regne den ud..



Geert Lund (10-09-2005)
Kommentar
Fra : Geert Lund


Dato : 10-09-05 23:57

Nederbasse wrote:

Prøv evt.

> <?php
> $banned_ip = array();
> $banned_ip[] = '100.100.100.100';
> $banned_ip[] = '100.100.100.200';
> $banned_ip[] = '111.111.111.113';
>
> foreach($banned_ip as $banned) {
> $ip = $_SERVER['REMOTE_ADDR'];
> if($ip == $banned) {
> echo "Banned!";
die();
> }
}

> $navn = empty($_REQUEST["navn"]) ? '' : $_REQUEST["navn"];
> $email = empty($_REQUEST["email"]) ? '' : $_REQUEST["email"];
> $emne = empty($_REQUEST["emne"]) ? '' : $_REQUEST["emne"];
> $besked = empty($_REQUEST["besked"]) ? '' : $_REQUEST["besked"];
> mail("min@email.dk", "$emne", "$besked", "From: Web<$email>");

> ?>

Dette kræver selvfølgelig at loggikken i resten af det script ikke er
afhængig af du udlæser mere til skærmen. Ellers må du rette det til.

die(); får scriptet til at stoppe uden at køre videre første gang en
banned ip-adresse matches (der er således ikke behov for hverken at
checke yderligere i dit array eller fortsætte scriptet - selvfølgelig
med mindre du vil logge noget eller sende mail etc. til dig selv).

--
Med venlig hilsen
Geert Lund

|-| e n n i n g (11-09-2005)
Kommentar
Fra : |-| e n n i n g


Dato : 11-09-05 09:55

Nederbasse skrev:
> Hej
>
> Jeg har store problemer med at få et script der skal banne nogle tumper som
> spammer mig fra mit site

Det jo selvfølgelig trist nogen gør det.
Du kunne lave et table i MySQL ( hvis du har dette ), kaldet "banned".

CREATE TABLE `banned` (
`id` int(11) NOT NULL auto_increment,
`ip` varchar(50) NOT NULL default '',
`grund` text NOT NULL,
`dato` timestamp(14) NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=15 ;

tjek_ip.php :

<?PHP

// MySQL connection...

$tjek_ip = $_SERVER[REMOTE_ADDR];

$query = mysql_query("SELECT * FROM banned WHERE ip = '".$tjek_ip."'");
if(mysql_num_rows($query))
   {
   $ban_data = mysql_fetch_array($query);
   // HTML output med data, grunden til ban og datoen hvor IP'en blev banned
   exit();
   }
// Siden for dem der ikke er banned --> //

?>

I dine script hvor du vil tjekke ip'en, så skriv:

<?PHP
require("tjek_ip.php"); // Eller der hvor scriptet nu befinder sig ;)

// ...
?>

Håber det kunne bruges ;)


mvh
- henning / ricaplaza.dk

Martin (12-09-2005)
Kommentar
Fra : Martin


Dato : 12-09-05 23:39

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Nederbasse wrote:
>
> <?php
> $banned_ip = array();
> $banned_ip[] = '100.100.100.100';
> $banned_ip[] = '100.100.100.200';
> $banned_ip[] = '111.111.111.113';
>
> foreach($banned_ip as $banned) {
> $ip = $_SERVER['REMOTE_ADDR'];
> if($ip == $banned){
> echo "Banned!";
> }

væk med den foreach da :)

if(in_array($_SERVER['REMOTE_ADDR'],$banned_ip)) print "BANNET!";
else {
<send mail>
}

så hjælper det på dit problem...

Du kan IKKE lave en
foreach også en else - da foreach vil køre hele tiden uanset hvad :)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)

iD8DBQFDJgOJAxDV/8Li8MYRAuwpAJ9F78LvePK8c8Z+ZSbixXcU/cGcrACfWtjV
zREYRIGjiPmvsQA/J0rn96Q=
=190x
-----END PGP SIGNATURE-----

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste