Avatar billede alfetch Nybegynder
22. juli 2007 - 15:12 Der er 21 kommentarer

BAN / UNBAN fra hjemmeside.

Hej. Jeg står i dette problem at jeg har nogle gamle scripts liggende som jeg ikke kan få til at virke mere. de virkede for 1 årstid siden. men der er jo sikkert sket meget med php siden. kan lidt php men min viden er ikke stor nok til at finde alle fejlene i scriptene her, i må meget gerne hjælpe mig. TAK:

Det ene script(banip.php):

<?php
require('connect.php');
session_start();
$ip = $_GET['ip'];
$query_ip = mysql_query("SELECT ip FROM banned_ip");
while($check_ip = mysql_fetch_array($query_ip)){
if($check_ip['ip'] == $REMOTE_ADDR){
  echo "<font face='Verdana' size='2' color='#FFFFFF'> Banned!.";
  $not = 1;
  break;   
  }
}
if($not != 1){
?>
<?
if($ip){
require('connect.php');
$query = mysql_query("SELECT ip FROM banned_ip");
while($check_ip = mysql_fetch_array($query)){
if($check_ip['ip'] == $ip){
 
  echo " <font face='Verdana' size='1' color='#FFFFFF'> IP'en er banned";
  $not = 1;
  break;   
  }
}

if($not != 1){
$ip = $_GET['ip'];
    $date = date("j-m-Y");
    mysql_query("INSERT INTO banned_ip(id,ip,dato) VALUES ('$id','$ip','$date')");
mysql_close();
}
}
if($noget == 5654){
?>
<?
}
?>
<?
}
?>

OG DET ANDET (sletban.php):

<?php
require_once("connect.php");
$result = mysql_query("select * from banned_ip order by id desc");
$num = mysql_num_rows($result);
if ($num > 0) {

while ($row=mysql_fetch_array($result)){

  echo "
  <table cellspacing='0' cellpadding='0' border='0'>
<tr>
    <td><font size='1' face='Verdana'>$row[ip]&nbsp;</font></td>
    <td><font size='1' face='Verdana'>$row[dato]&nbsp;</font></td>
    <td><font size='1' face='Verdana'>$row[grund]&nbsp; - &nbsp;</font></td>
    <td><b><a href=sletban.php?mode=slet&id=$row[id]>SLET</a></b><br></td>
</tr>
</table>";

}

}





if ($mode == slet) {

  mysql_query("DELETE FROM banned_ip where id='$id' LIMIT 1") or die(mysql_error());

  echo "Unbanned!.";

}
?>
Avatar billede jakobdo Ekspert
22. juli 2007 - 15:19 #1
Prøv at start med at ret:
$REMOTE_ADDR
til:
$_SERVER['REMOTE_ADDR']
Avatar billede cronick Nybegynder
22. juli 2007 - 15:20 #2
I starten af dit første script, skal følgende rettes:

if($check_ip['ip'] == $REMOTE_ADDR){

-> til ->

if($check_ip['ip'] == $_SERVER['REMOTE_ADDR']){

Desuden har de flere <?'s som ikke har php stående lige efter, hvilket også bør rettes.. :)
Avatar billede cronick Nybegynder
22. juli 2007 - 15:28 #3
Faktisk er der flere variabler, ligesom REMOTE_ADDR, hvor du mangler dens "type". Du har formentlig haft REGISTER GLOBALS sat til på din gamle server, og ikke på den nuværende. Dette ville hvert fald forklare, hvorfor scripet ikke virker.

Hele koden bør derfor ændres til:

<?php
require('connect.php');
session_start();
$ip = $_GET['ip'];
$query_ip = mysql_query("SELECT ip FROM banned_ip");
while($check_ip = mysql_fetch_array($query_ip)){
if($check_ip['ip'] == $_SERVER['REMOTE_ADDR']){
  echo "<font face='Verdana' size='2' color='#FFFFFF'> Banned!.";
  $not = 1;
  break;   
  }
}
if($not != 1){

if($ip){
require('connect.php');
$query = mysql_query("SELECT ip FROM banned_ip");
while($check_ip = mysql_fetch_array($query)){
if($check_ip['ip'] == $ip){
 
  echo " <font face='Verdana' size='1' color='#FFFFFF'> IP'en er banned";
  $not = 1;
  break;   
  }
}

if($not != 1){
$id = $_GET['id'];
$ip = $_GET['ip'];
    $date = date("j-m-Y");
    mysql_query("INSERT INTO banned_ip(id,ip,dato) VALUES ('$id','$ip','$date')");
mysql_close();
}
}
}
?>

OG DET ANDET (sletban.php):

<?php
require_once("connect.php");
$id =  $_GET['id'];
$num =  $_GET['num'];
$mode = $_GET['mode'];
$result = mysql_query("select * from banned_ip order by id desc");
$num = mysql_num_rows($result);
if ($num > 0) {

while ($row=mysql_fetch_array($result)){

  echo "
  <table cellspacing='0' cellpadding='0' border='0'>
<tr>
    <td><font size='1' face='Verdana'>$row[ip]&nbsp;</font></td>
    <td><font size='1' face='Verdana'>$row[dato]&nbsp;</font></td>
    <td><font size='1' face='Verdana'>$row[grund]&nbsp; - &nbsp;</font></td>
    <td><b><a href=sletban.php?mode=slet&id=$row[id]>SLET</a></b><br></td>
</tr>
</table>";

}

}

if ($mode == slet) {

  mysql_query("DELETE FROM banned_ip where id='$id' LIMIT 1") or die(mysql_error());

  echo "Unbanned!.";

}
?>
Avatar billede jakobdo Ekspert
22. juli 2007 - 15:41 #4
Og når vi nu snakker forbedringer, så vil jeg til en hver tid gemme ip'er som INT UNSIGNED og bruge MYSQL funktionen: INET_ATON()
Avatar billede alfetch Nybegynder
22. juli 2007 - 18:04 #5
Jeg kan stadig ikke tilføje ban's. men hvis jeg kunstigt tilføjer en i databasen, virker slet funktionen godt. Der må stadig være noget galt i det første script.

Og forresten, hvad skal jeg indsætte i min index.php fil? så hvis ipen er i databasen er  der nægtet adgang?
Avatar billede jakobdo Ekspert
22. juli 2007 - 18:49 #6
Du har jo ingen tilføj kode?
Du skal lave en formular som smider en IP ind i din database.

Med hensyn til adgang nægtet må det blive noget i stil med:

<?php
require('connect.php');
$query_ip = mysql_query("SELECT ip FROM banned_ip WHERE ip = '".$_SERVER['REMOTE_ADDR']."' LIMIT 1");
if(mysql_num_rows($query_ip)==1)
{
    echo 'Du er banned!';
    exit();
}
else
{
    echo 'Velkommen til, nyd dit ophold!';
}
?>
Avatar billede alfetch Nybegynder
22. juli 2007 - 20:56 #7
Jo jeg har.. havde bare ik sat det ind her med phpen. :) men her er det: hvad er så fejlen heh:

<?php
require('connect.php');
session_start();
$ip = $_GET['ip'];
$query_ip = mysql_query("SELECT ip FROM banned_ip");
while($check_ip = mysql_fetch_array($query_ip)){
if($check_ip['ip'] == $_SERVER['REMOTE_ADDR']){
  echo "<font face='Verdana' size='2' color='#FFFFFF'> Banned!.";
  $not = 1;
  break; 
  }
}
if($not != 1){

if($ip){
require('connect.php');
$query = mysql_query("SELECT ip FROM banned_ip");
while($check_ip = mysql_fetch_array($query)){
if($check_ip['ip'] == $ip){

  echo " <font face='Verdana' size='1' color='#FFFFFF'> IP'en er banned";
  $not = 1;
  break; 
  }
}

if($not != 1){
$id = $_GET['id'];
$ip = $_GET['ip'];
    $date = date("j-m-Y");
    mysql_query("INSERT INTO banned_ip(id,ip,dato) VALUES ('$id','$ip','$date')");
mysql_close();
}
}
}
?>
<html>
<body>
<link rel="stylesheet" type="text/css" href="../box.css">
<form action="<? echo $PHP_SELF; ?>" method="post">
<input type="hidden" name="noget" value="5654">
<input type="text" size="14" maxlength="15" name="ip">
<input type="submit" value="ban">
</form>
</body>
</html>
Avatar billede jakobdo Ekspert
22. juli 2007 - 21:22 #8
Ret:
<form action="<? echo $PHP_SELF; ?>" method="post">
til:
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">

Og så ret lige:

$_GET til $_POST
Undtagen i din slette kode.
Avatar billede alfetch Nybegynder
22. juli 2007 - 21:26 #9
Sådan. men det virker stadig ikke. der sker ik noget når jeg trykker på ban

<?php
require('connect.php');
session_start();
$ip = $_POST['ip'];
$query_ip = mysql_query("SELECT ip FROM banned_ip");
while($check_ip = mysql_fetch_array($query_ip)){
if($check_ip['ip'] == $_SERVER['REMOTE_ADDR']){
  echo "<font face='Verdana' size='2' color='#FFFFFF'> Banned!.";
  $not = 1;
  break; 
  }
}
if($not != 1){

if($ip){
require('connect.php');
$query = mysql_query("SELECT ip FROM banned_ip");
while($check_ip = mysql_fetch_array($query)){
if($check_ip['ip'] == $ip){

  echo " <font face='Verdana' size='1' color='#FFFFFF'> IP'en er banned";
  $not = 1;
  break; 
  }
}

if($not != 1){
$id = $_POST['id'];
$ip = $_POST['ip'];
    $date = date("j-m-Y");
    mysql_query("INSERT INTO banned_ip(id,ip,dato) VALUES ('$id','$ip','$date')");
mysql_close();
}
}
}
?>
<html>
<body>
<link rel="stylesheet" type="text/css" href="../box.css">
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="noget" value="5654">
<input type="text" size="14" maxlength="15" name="ip">
<input type="submit" value="ban">
</form>
</body>
</html>
Avatar billede jakobdo Ekspert
22. juli 2007 - 21:52 #10
Prøv at tilføj lidt tekst på denne:

if($not != 1){
echo 'Vi skal tilføje en <b>ip</b>';
$id = $_POST['id'];
$ip = $_POST['ip'];
    $date = date("j-m-Y");
    mysql_query("INSERT INTO banned_ip(id,ip,dato) VALUES ('$id','$ip','$date')") or die(mysql_error());
mysql_close();
}
Avatar billede alfetch Nybegynder
22. juli 2007 - 22:01 #11
Der var en fejl i databasen. $grund findes slet ikke. ikke engang i scriptet og havde jeg i databasen. Så nu ser det således ud:

<?php
require('connect.php');
session_start();
$ip = $_POST['ip'];
$query_ip = mysql_query("SELECT ip FROM banned_ip");
while($check_ip = mysql_fetch_array($query_ip)){
if($check_ip['ip'] == $_SERVER['REMOTE_ADDR']){
  echo "<font face='Verdana' size='2' color='#FFFFFF'> Banned!.";
  $not = 1;
  break; 
  }
}
if($not != 1){

if($ip){
require('connect.php');
$query = mysql_query("SELECT ip FROM banned_ip");
while($check_ip = mysql_fetch_array($query)){
if($check_ip['ip'] == $ip){

  echo " <font face='Verdana' size='1' color='#FFFFFF'> IP'en er banned";
  $not = 1;
  break; 
  }
}

if($not != 1){
$id = $_POST['id'];
$ip = $_POST['ip'];
    $date = date("j-m-Y");
    mysql_query("INSERT INTO banned_ip(id,ip,dato) VALUES ('$id','$ip','$dato')") or die(mysql_error());
mysql_close();
}
}
}
?>
<html>
<body>
<link rel="stylesheet" type="text/css" href="../box.css">
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="noget" value="5654">
<input type="text" size="14" maxlength="15" name="ip">
<input type="submit" value="ban">
</form>
</body>
</html>

Men nu kommer fejlen: Out of range value adjusted for column 'id' at row 1
Avatar billede jakobdo Ekspert
22. juli 2007 - 22:09 #12
Hvilken datatype bruger du som ID?
Avatar billede alfetch Nybegynder
22. juli 2007 - 22:22 #13
altså hvad mener du? om det er autoincreament?
Avatar billede alfetch Nybegynder
22. juli 2007 - 22:23 #14
den er int(6)
Avatar billede jakobdo Ekspert
23. juli 2007 - 09:02 #15
Prøv at ret din sql til:

mysql_query("INSERT INTO banned_ip(id,ip,dato) VALUES ('','$ip','$dato')") or die(mysql_error());
Avatar billede alfetch Nybegynder
23. juli 2007 - 18:25 #16
Jeg får stadig samme fejl.
Avatar billede jakobdo Ekspert
23. juli 2007 - 18:51 #17
Hvad hvis du retter: '' til NULL
Avatar billede alfetch Nybegynder
23. juli 2007 - 22:19 #18
Hvor henne siger du ?
Avatar billede alfetch Nybegynder
23. juli 2007 - 22:26 #19
Okay har sat den til mysql_query("INSERT INTO banned_ip(id,ip,dato) VALUES (null,'$ip','$dato')") or die(mysql_error()); nu. så virker det! Men den udskriver ikke echo. banned! hmm ?
Avatar billede alfetch Nybegynder
23. juli 2007 - 22:33 #20
Det virker nu. har lavet ;) TUSIND TAK
Avatar billede jakobdo Ekspert
25. juli 2007 - 20:13 #21
Svar!
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