Avatar billede jesperaha Nybegynder
23. juni 2007 - 11:30 Der er 3 kommentarer og
1 løsning

Udelukke bannet ip-adresse

Hej, jeg er igang med at lave en gæsebog til min hjemmeside. Jeg ønsker at kunne udelukke brugere fra at skrive i gæstebogen. Til det formål logger jeg deres ip-adresse sammen med deres besked i en database.

Vi en administrationsside kan jeg så vælge og slette upassende indlæg og kopiere ip-adressen til en tabel der indeholder bannede ip-adresser.

Min tanke er nu, at koden skal søge i tabellen og bannede ip-adresser - findes den pågældende surfers ip-adresse i listen skal han ikke have adgang til at skrive. Findes han ip-adresse ikke i listen over ip-adresser skal han have adgang til at skrive.

dvs.
Hvis tabellen indeholder ip-adressen ---> kan ikke skrive
Hvis tabellen IKKE indeholder ip-adressen ---> kan skrive

Hvordan gør jeg

På forhånd tak
Avatar billede mstorgaard Praktikant
23. juni 2007 - 12:26 #1
Et eksempel:
<?php
$checkip = mysql_fetch_array(mysql_query("SELECT * FROM din_tabel WHERE ip='" . $_SERVER['REMOTE_ADDR'] . "'"));
if($checkip['id'] > 0)
{
  echo "Du er blevet bannet fra denne gæstebog";
}
else
{
//DIN GÆSTEBOG
}
?>

(Det forudsætter så, at du også har et id stående i tabellen, hvilket du sandsynligvis har :))
Avatar billede jakobdo Ekspert
23. juni 2007 - 12:39 #2
<?php
//http://www.eksperten.dk/spm/650478
//Ban System
include("connect.php");
$ip = mysql_escape_string($_SERVER['REMOTE_ADDR']);
$sql = "SELECT kommentar FROM banned WHERE ip = INET_ATON('".$ip."') AND (datotid > NOW() OR ISNULL(datotid)) LIMIT 1";
$query = mysql_query($sql);

if(mysql_num_rows($query)>0)
{
        $row = mysql_fetch_assoc($query);
        //header("location: banned.php");
        echo "Din IP: <b>" . $ip . "</b> er banned<br>";
        echo "Besked fra admin: " . $row['kommentar'] . "<br>";
}
else
{
        echo "Velkommen: <b>" . $ip . "</b>";
}

echo "<hr>";
echo "<a href=\"650478admin.php\">Admin Ban System</a>";

echo "<hr>";
show_source(__FILE__);

?>

og admin delen:

<?php
//http://www.eksperten.dk/spm/650478
//Admin Ban System
include("connect.php");

if(isset($_POST['ip']))
{
        $length = "";
        $ip = mysql_escape_string($_POST['ip']);
        $comment = mysql_escape_string($_POST['comment']);

        //DATE_ADD('1998-01-02', INTERVAL 31 DAY);
        switch($_POST['length'])
        {
                case 1:
                        $length = "DATE_ADD(NOW(), INTERVAL 1 MINUTE)";
                        break;
                case 2:
                        $length = "DATE_ADD(NOW(), INTERVAL 30 MINUTE)";
                        break;
                case 3:
                        $length = "DATE_ADD(NOW(), INTERVAL 1 HOUR)";
                        break;
                case 4:
                        $length = "DATE_ADD(NOW(), INTERVAL 12 HOUR)";
                        break;
                case 5:
                        $length = "DATE_ADD(NOW(), INTERVAL 1 DAY)";
                        break;
                case 6:
                        $length = "DATE_ADD(NOW(), INTERVAL 1 WEEK)";
                        break;
                case 7:
                        $length = "DATE_ADD(NOW(), INTERVAL 1 MONTH)";
                        break;
                case 8:
                        $length = "DATE_ADD(NOW(), INTERVAL 1 YEAR)";
                        break;
                default:
                        $length = "NULL";
        }
        $sql = "INSERT INTO banned(ip,datotid,kommentar) VALUES(INET_ATON('".$ip."'),".$length.",'".$comment."') ON DUPLICATE KEY UPDATE datotid=".$length.",kommentar='".$comment."'";
        $query = mysql_query($sql);
        if(mysql_affected_rows()==0)
        {
                echo mysql_error();
        }
}

echo "<table>\n";
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n";
echo "<tr><th>IP</th><th>Ban-længde</th><th>Kommentar</th></tr>\n";
echo "<tr><td><input type=\"text\" name=\"ip\"></td>\n";
echo "<td><select name=\"length\">\n";
echo "<option value=\"1\">1 minut</option>\n";
echo "<option value=\"2\">30 minutter</option>\n";
echo "<option value=\"3\">1 time</option>\n";
echo "<option value=\"4\">12 timer</option>\n";
echo "<option value=\"5\">1 dag</option>\n";
echo "<option value=\"6\">1 uge</option>\n";
echo "<option value=\"7\">1 måned</option>\n";
echo "<option value=\"8\">1 år</option>\n";
echo "<option value=\"9\">Altid</option>\n";
echo "</select>\n";
echo "</td>\n";
echo "<td><input type=\"text\" name=\"comment\"></td></tr>\n";
echo "<tr><td colspan=\"3\"><input type=\"submit\" value=\"Tilføj IP\"></td></tr>\n";
echo "</form>\n";
echo "</table>\n";

$ip = mysql_escape_string($_SERVER['REMOTE_ADDR']);
$sql = "SELECT INET_NTOA(ip) AS nyIP,datotid,kommentar FROM banned";
$query = mysql_query($sql);

if(mysql_num_rows($query)>0)
{
        while($row = mysql_fetch_assoc($query))
        {
                echo "<table>\n";
                echo "<tr><th>IP</th><th>Ban-længde (Ban Udløber)</th><th>Kommentar</th></tr>\n";
                echo "<tr><td>" . $row['nyIP'] . "</td>\n";
                echo "<td>" . $row['datotid'] . "</td>\n";
                echo "<td>" . $row['kommentar'] . "</td></tr>\n";
                echo "</table>\n";
        }
}
else
{
        echo "Ingen er banned";
}

echo "<hr>";
echo "<a href=\"650478.php\">Test BAN HER</a>";

echo "<hr>";
show_source(__FILE__);

?>
Avatar billede jesperaha Nybegynder
23. juni 2007 - 13:53 #3
Tak for hjælpen til jer begge to.

@jakobdo
Det er vildt flinkt af dig, at du har lavet hele det script. Men jeg har slet ikke behov for alt det der halløj. Har folk svinet mig til i gæstebogen eller spammet, så bliver de blokeret for good.
Avatar billede jakobdo Ekspert
24. juni 2007 - 01:45 #4
Det var nu et jeg har lavet tidligere... Så flink er jeg heller ikke. :o)
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