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] </font></td> <td><font size='1' face='Verdana'>$row[dato] </font></td> <td><font size='1' face='Verdana'>$row[grund] - </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!."; } ?>
Annonceindlæg fra Thinkwise
Prøv at start med at ret: $REMOTE_ADDR til: $_SERVER['REMOTE_ADDR']
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.. :)
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] </font></td> <td><font size='1' face='Verdana'>$row[dato] </font></td> <td><font size='1' face='Verdana'>$row[grund] - </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!."; } ?>
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()
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?
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!'; } ?>
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>
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.
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>
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(); }
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
22. juli 2007 - 22:09
#12
Hvilken datatype bruger du som ID?
22. juli 2007 - 22:22
#13
altså hvad mener du? om det er autoincreament?
22. juli 2007 - 22:23
#14
den er int(6)
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());
23. juli 2007 - 18:25
#16
Jeg får stadig samme fejl.
23. juli 2007 - 18:51
#17
Hvad hvis du retter: '' til NULL
23. juli 2007 - 22:19
#18
Hvor henne siger du ?
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 ?
23. juli 2007 - 22:33
#20
Det virker nu. har lavet ;) TUSIND TAK
25. juli 2007 - 20:13
#21
Svar!
Vi tilbyder markedets bedste kurser inden for webudvikling