Avatar billede klamse Nybegynder
21. april 2004 - 20:20 Der er 39 kommentarer og
1 løsning

Ipbanning system

Hej jeg vil gerne have et system så jeg kan blocke nogle bestemte ip'er der fx genere mig i min tagwall eller lign.
Jeg skal trække de ip'er der skal bannes ud af min mysql database

mysql_connect ("mydb1.surftown.dk","repsack_kasper","nokia2205");
mysql_select_db ("repsack_news");
$query = mysql_query("SELECT ipblock, nick, DATE_FORMAT(dato, '%d-%m-%Y') dato FROM ipblocking ORDER BY id");
while($r = mysql_fetch_assoc($query)) {
$ipblock = $r["ip"];
$nick = $r["titel"];
$dato = $r["dato"];
echo "$ip $nick $dato";
}

Jeg har en ip blocker kode:

<?
$ip = getenv('REMOTE_ADDR');
if (($ip == "127.0.0.1") || ($ip == "127.0.0.2")){ echo "<p><font color=#FF0000 face=Verdana size=2>Din adgang til denne side er blokeret</font></p>";
exit;
}else{
    echo "Du har adgang til siden"; }
?>

Hvordan får jeg dem "koblet" sammen?
Så jeg banne alle de ip'er jeg vil :P

Ølbas
Repsack.dk
Avatar billede klamse Nybegynder
21. april 2004 - 20:26 #1
Doh!!
Nå kodeord ændret :S
Avatar billede dennismp Nybegynder
21. april 2004 - 20:28 #2
Først og fremmest, ændre lige dit password på din konto, før andre gør det :-)

$ip = $_SERVER['REMOTE_ADDR'];
$banned = false;
$res = mysql_query("SELECT nick, DATE_FORMAT(dato, '%d-%m-%Y') dato FROM ipblocking  WHERE ipblock = '$ip'");
if( $res ) {
  $row = mysql_fetch_row($res);
  if( $row )
    $banned = true;
}

if( $banned ) {
  ..
}
else {
  vis side
}
Avatar billede klamse Nybegynder
21. april 2004 - 20:32 #3
Ja opdagede det lige :)
Og jeg nåede det :P
Avatar billede klamse Nybegynder
21. april 2004 - 20:44 #4
jeg får en fejl i linje 2
Avatar billede klamse Nybegynder
21. april 2004 - 20:44 #5
Ups! 2 sec
Avatar billede dennismp Nybegynder
21. april 2004 - 20:44 #6
For at gøre det lidt mere komplet:

erstat:
if( $banned ) {
  ..
}
else {
  vis side
}

med:
if( $banned ) {
  echo $row['nick'] . ', din adgang til denne side er blokeret siden ' . $row['dato'] . '<br />';
  exit;
}

.. og her har du så tagwallen
Avatar billede klamse Nybegynder
21. april 2004 - 20:53 #7
Ja!
Men http://www.repsack.dk/banned.php
Jeg har sat min egen ip ind i mysql men den viser bare
Vis side...!
Avatar billede dennismp Nybegynder
21. april 2004 - 20:58 #8
prøv at rette i denne line
$res = mysql_query("SELECT nick, DATE_FORMAT(dato, '%d-%m-%Y') dato FROM ipblocking  WHERE ipblock = '$ip'");
så du får:
$sql = "SELECT nick, DATE_FORMAT(dato, '%d-%m-%Y') dato FROM ipblocking  WHERE ipblock = '$ip'";
$res = mysql_query($sql) or die(mysql_error());

Hvis dette ikke giver et hint, så prøv at skrive $sql ud, før mysql_query(..) linjen. Og så evt se om det ser rigtigt ud.
Avatar billede klamse Nybegynder
21. april 2004 - 21:02 #9
Okay!
Så blokere den...!
Men den udskriver ikke nick + dato
Avatar billede dennismp Nybegynder
21. april 2004 - 21:02 #10
Gider du at poste det kode du bruger pt?
Avatar billede klamse Nybegynder
21. april 2004 - 21:05 #11
Self:

<?
mysql_connect ("mydb1.surftown.dk","repsack_kasper","kasper2205");
mysql_select_db ("repsack_news");
$ip = $_SERVER['REMOTE_ADDR'];
$banned = false;
$sql = "SELECT nick, DATE_FORMAT(dato, '%d-%m-%Y') dato FROM ipblocking  WHERE ipblock = '$ip'";
$res = mysql_query($sql) or die(mysql_error());
if( $res ) {
  $row = mysql_fetch_row($res);
  if( $row )
    $banned = true;
}

if( $banned ) {
  echo $row['nick'] . ', din adgang til denne side er blokeret siden ' . $row['dato'] . '<br />';
  exit;
}
else {
  echo 'vis side';
}
?>
Avatar billede klamse Nybegynder
21. april 2004 - 21:05 #12
JEG ER DUM! med pass
Avatar billede dennismp Nybegynder
21. april 2004 - 21:07 #13
hovsa :-)

men erstat:
$row = mysql_fetch_row($res);
med
$row = mysql_fetch_array($res);
Avatar billede mulbo Nybegynder
21. april 2004 - 21:12 #14
jeg har kodet et script....

function aaben_mysql() {
$server = "localhost";
$bruger = "*****";
$kodeord = "****";
$database = "******";

  if (!mysql_connect("$server","$bruger","$kodeord")) {
  udskriv_fejl("Kunne ikke oprette en forbindelse til MySQL.");
}
if(!mysql_select_db("$database")) {
  udskriv_fejl("Kunne ikke vælge databasen: $database");
}
}

function query($query) {
  $resultat = mysql_query($query);
if(!$resultat) {
  udskriv_fejl("Kunne ikke udføre: <em>$query</em>");
}
}

function luk_mysql() {
if(!mysql_close()) {
  udskriv_fejl("Kunne ikke lukke forbindelsen til MySQL!");
}
}

function udskriv_fejl($fejl) {
echo "<p>$fejl";
if ($mysql_fejl = mysql_error()) {
  echo "<br>Fejlen er: <em>$mysql_fejl</em>";
  }
  exit;
}


function ban_tjek()
{
# Variabler
$admin_email = "MulBo@StorStodder.dk"; # Rediger denne linje til din email
$remote_ip = $_SERVER['REMOTE_ADDR'];

aaben_mysql();
$sql = mysql_query("SELECT * FROM ban");
# While løkke
while($data = mysql_fetch_array($sql))
{
$ban_ip = $data['ip'];
$grund = $data['grund'];
if($ban_ip == $remote_ip)
{
print("<h2> Din ip er banned fra denne side...</h2>");
print("Du er banned fordi: $grund <br>");
print("Mener du at det er en fejl, du er banned?<br>");
print("Så skriv til mig: <a href='mailto:$admin_mail?subject=Jeg vil gerne unbannes.. min ip er: $remote_ip'>$admin_mail</a>");
// sæt // foran hvis du ikke bruger skriv_logfil($type, $grund);
$type = "ban";
skriv_logfil($type,$grund);

die();
}
}
luk_mysql();
}
Avatar billede mulbo Nybegynder
21. april 2004 - 21:13 #15
hov inden jeg tager hele æren....
function aaben_mysql() {
$server = "localhost";
$bruger = "*****";
$kodeord = "****";
$database = "******";

  if (!mysql_connect("$server","$bruger","$kodeord")) {
  udskriv_fejl("Kunne ikke oprette en forbindelse til MySQL.");
}
if(!mysql_select_db("$database")) {
  udskriv_fejl("Kunne ikke vælge databasen: $database");
}
}

function query($query) {
  $resultat = mysql_query($query);
if(!$resultat) {
  udskriv_fejl("Kunne ikke udføre: <em>$query</em>");
}
}

function luk_mysql() {
if(!mysql_close()) {
  udskriv_fejl("Kunne ikke lukke forbindelsen til MySQL!");
}
}

function udskriv_fejl($fejl) {
echo "<p>$fejl";
if ($mysql_fejl = mysql_error()) {
  echo "<br>Fejlen er: <em>$mysql_fejl</em>";
  }
  exit;
}

er kodet af webcafe.dk fra deres tutorial... har bare ændret lidt på den ;)
Avatar billede mulbo Nybegynder
21. april 2004 - 21:14 #16
og du skal også lige bruge min:
function skriv_logfil($type, $grund)
{
if($type == "normal")
{
$ip = $_SERVER['REMOTE_ADDR'];
$side = $_SERVER['PHP_SELF'];
$f_puts = $ip." ".$side." ".date("m.d.y h:i:s A")." ".$_REQUEST[side]."<br>";
$fq = fopen("log.html", "a");
fputs($fq, $f_puts);
fclose($fq);
}
elseif($type == "ban")
{
$ip = $_SERVER['REMOTE_ADDR'];
$side = $_SERVER['PHP_SELF'];
$f_puts = " <b>ip:</b> " . $ip . " <b>dato:</b> " . date("m.d.y h:i:s A") . " <b>Grund:</b> " . $grund ." <br>";
$fq = fopen("ban.html", "a");
fputs($fq, $f_puts);
fclose($fq);
}
}
Avatar billede klamse Nybegynder
21. april 2004 - 21:24 #17
øhhh :S
Jeg fik lige det andet til at virke...
Men det script ser noget mere vildt ud...
Hvad kan det? Andet end at banne :P
Avatar billede dennismp Nybegynder
21. april 2004 - 21:27 #18
Så vidt jeg kan se, er det blot at den skriver mere output - og gemmer det i en logfil.
Avatar billede klamse Nybegynder
21. april 2004 - 21:32 #19
Hmm, har ikke tid til at tjekke det i aften...
Men kunne også godt tænke mig at bygge videre på mit eget (det lærer jeg vist mere af :P)

Men hvis det virker godt så deler jeg poiint...

Ølbas
Avatar billede dennismp Nybegynder
21. april 2004 - 21:34 #20
Hvis du vil tilføje det til din egen løsning, så er det disse linjer du skal se nærmere på:

$ip = $_SERVER['REMOTE_ADDR'];
$side = $_SERVER['PHP_SELF'];
$f_puts = " <b>ip:</b> " . $ip . " <b>dato:</b> " . date("m.d.y h:i:s A") . " <b>Grund:</b> " . $grund ." <br>";
$fq = fopen("ban.html", "a");
fputs($fq, $f_puts);
fclose($fq);
Avatar billede klamse Nybegynder
22. april 2004 - 13:44 #21
Dennis...!
Sidste ting og du får alle point :P
Jeg vil godt have lavet det sådan at jeg fx kan vælge personen skal bannes i 2 uger.
Det vil der så stå (kan jeg godt)
men efter de 2 uger skal personen automatisk få adgang igen!!!
Avatar billede dennismp Nybegynder
22. april 2004 - 13:54 #22
Tilføj en udløbsdato, som er et datofelt - det må gerne have null værdier (så er det et perm. ban):

Her er datoen kaldt udloebdato. Hvis du retter sql'en, så den ser således ud, så skulle den være der.

$sql = "SELECT nick, DATE_FORMAT(dato, '%d-%m-%Y') dato FROM ipblocking  WHERE ipblock = '$ip' AND (udloebdato IS NULL OR udloebsdato > now())";
Avatar billede klamse Nybegynder
22. april 2004 - 13:59 #23
Prøver lige :P
Avatar billede klamse Nybegynder
22. april 2004 - 14:06 #24
Hmm skal jeg tilføje mere i koden???
For lige nu virker det ikke!
Jeg er stadig banned selvom den skulle udløbe igår!
Avatar billede dennismp Nybegynder
22. april 2004 - 14:12 #25
Det forstår jeg ikke. Det burde ellers være der. Jeg skal op på uni, så jeg er først tilbage om 2½ time, men du kan jo prøve at select'e udloebsdatoen og print'e den for at se hvad den er.
Avatar billede klamse Nybegynder
22. april 2004 - 14:23 #26
Der var en stavefejl i udloeb(S)dato :P
Nu virker det sørme :P

Du får point! :)
Hvis du gider kunne jeg godt lige bruge hjælp til en ting til hehe (Bare sig nej hvis du ik gider :P)

<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post">
Ip<br>
<input type="text" name="ipblock" /><br />
<br />
Nick<br>
<input type="text" name="nick" /><br />
<br />
Grund til blokering<br>
<input type="text" name="grund" /><br />
<br />
Skal unbannes den (dato)<br>
<input type="text" name="tid" /><br />
<br />
<input type="submit" name="block_ip" value="Bloker IP" />
</form>
<?
if(isset($_POST['block_ip'])) {
mysql_connect ("***","***","***");
mysql_select_db ("***");
$query = mysql_query("INSERT INTO ipblocking (ipblock, nick, grund, tid) VALUES ('".$_POST['ipblock']."','".$_POST['nick']."','".$_POST['grund']."','".$_POST['tid']."')");
echo "Ip´en er bannet, se lige over alle bannede ip´er <a href='all_banned.php'>her.</a>";
}
?>

Så vil jeg gerne have en dropdown så jeg fx kan vælge bannes fx 14dage, en måned eller 1 måned... Er det svært at lave :P


Smider du et svar? til point
Vh Ølbas Som huskede at fjerne password til MYSQL denne gang :)
Avatar billede dennismp Nybegynder
22. april 2004 - 17:05 #27
Prøv dette (utestet)

<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post">
Ip<br>
<input type="text" name="ipblock" /><br />
<br />
Nick<br>
<input type="text" name="nick" /><br />
<br />
Grund til blokering<br>
<input type="text" name="grund" /><br />
<br />
Skal unbannes den (dato)<br>
<!-- <input type="text" name="tid" /><br /> -->
<select name="tid">
  <option value="1">1 døgn</option>
  <option value="7">1 uge</option>
  <option value="30">30 dage</option>
</select>
<br />
<input type="submit" name="block_ip" value="Bloker IP" />
</form>
<?
// tid er i timer
if(isset($_POST['block_ip'])) {
mysql_connect ("***","***","***");
mysql_select_db ("***");
$query = mysql_query("INSERT INTO ipblocking (ipblock, nick, grund, tid) VALUES ('".$_POST['ipblock']."','".$_POST['nick']."',date_add(now(), INTERVAL '".$_POST['grund']."' DAY),'".$_POST['tid']."')");
echo "Ip´en er bannet, se lige over alle bannede ip´er <a href='all_banned.php'>her.</a>";
}
?>
Avatar billede klamse Nybegynder
22. april 2004 - 17:30 #28
Prøver det senere
Avatar billede klamse Nybegynder
22. april 2004 - 21:40 #29
Det den sætter ind bliver 0000-00-00
Avatar billede dennismp Nybegynder
22. april 2004 - 21:45 #30
Hvad type er feltet? Hvis det er date, så prøv og erstat now() med curdate().
Avatar billede klamse Nybegynder
22. april 2004 - 21:48 #31
Den gør det stadig min kode er :

<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post">
Ip<br>
<input type="text" name="ipblock" /><br />
<br />
Nick<br>
<input type="text" name="nick" /><br />
<br />
Grund til blokering<br>
<input type="text" name="grund" /><br />
<br />
Skal unbannes den (dato)<br>
<!-- <input type="text" name="udloebsdato" /><br /> -->
<select name="udloebsdato">
  <option value="1">1 døgn</option>
  <option value="7">1 uge</option>
  <option value="30">30 dage</option>
</select>
<br />
<input type="submit" name="block_ip" value="Bloker IP" />
</form>
<?
// tid er i timer
if(isset($_POST['block_ip'])) {
mysql_connect ("**","**","**");
mysql_select_db ("***");
$query = mysql_query("INSERT INTO ipblocking (ipblock, nick, grund, udloebsdato) VALUES ('".$_POST['ipblock']."','".$_POST['nick']."',date_add(curdate(), INTERVAL '".$_POST['grund']."' DAY),'".$_POST['udloebsdato']."')");
echo "Ip´en er bannet, se lige over alle bannede ip´er <a href='all_banned.php'>her.</a>";
}
?>
Avatar billede dennismp Nybegynder
22. april 2004 - 21:52 #32
Stadig uden kodeord :-)

prøv at ændre  myql_query til:
$query = mysql_query($sql = "INSERT INTO ipblocking (ipblock, nick, grund, udloebsdato) VALUES ('".$_POST['ipblock']."','".$_POST['nick']."',date_add(curdate(), INTERVAL '".$_POST['grund']."' DAY),'".$_POST['udloebsdato']."')") or die(mysql_error() . ' <b>SQL:</b> '.$sql);
Avatar billede klamse Nybegynder
22. april 2004 - 21:53 #33
ok prøver
Avatar billede klamse Nybegynder
22. april 2004 - 21:56 #34
stadigvæk gør den det
Avatar billede dennismp Nybegynder
22. april 2004 - 21:57 #35
Der kommer ikke nogen fejl? Hvis der ikke gør, så lav en linje efter mysql_query(..) linjen der printer $sql ud, og post det her..
Avatar billede klamse Nybegynder
22. april 2004 - 21:58 #36
INSERT INTO ipblocking (ipblock, nick, grund, udloebsdato) VALUES ('asd','sad',date_add(curdate(), INTERVAL 'asd' DAY),'1')
Avatar billede dennismp Nybegynder
22. april 2004 - 22:03 #37
Føøøj dennis - jeg skal vist til at holde en pause herfra - jeg leder jo fol på vildspor. :-)

prøv med denne:

$query = mysql_query($sql = "INSERT INTO ipblocking (ipblock, nick, udloebsdato, grund) VALUES ('".$_POST['ipblock']."','".$_POST['nick']."',date_add(curdate(), INTERVAL '".$_POST['udloebsdato']."' DAY),'".$_POST['grund']."')") or die(mysql_error() . ' <b>SQL:</b> '.$sql);
Avatar billede klamse Nybegynder
22. april 2004 - 22:05 #38
:-)
Kan du lige sige hvad fejlen var?

Og så siger jeg mange tak :P
Nu virker det hele...!
Avatar billede dennismp Nybegynder
22. april 2004 - 22:10 #39
Helst ikke :-)

date_add( en dato, et interval ) ..

så jeg brugte den således:
date_add( cur_date(), INTERVAL <grunden til at man blev bannet> DAY);

af en eller anden grund kan mysql ikke finde ud af at lægge 'asd' dage til dags dato :).. Det eneste jeg har gjort er et bytte om på udloebsdato og grund.

Du kan se her:
INSERT INTO ipblocking (ipblock, nick, grund, udloebsdato) VALUES ('asd','sad',date_add(curdate(), INTERVAL 'asd' DAY),'1')

udloebsdato er '1', og der lægges 'asd' dage til dags dato.. Den vil den ikke være med til.
Avatar billede klamse Nybegynder
22. april 2004 - 22:11 #40
:) underligt nok hehe
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester