Jeg vil gerne have en form hvor jeg kan smide ip og besked ind, samt en funktion her tjekker om den besøgende er banned. Hvis personen er skal den skrive den besked der er gemt sammen med personens ip.
at have en form hvor jeg smider ip og en besked ind. når en person så prøver at komme ind på sitet tjekker den om personen er banned, hvis personen er får personen en besked om ham er banned og en grund (beskeden)
Formen kan jeg selv lave, det er den funktion der skal tjekke om personen er banned jeg ikke kan lave.
Og så laver du et tjek med: 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);
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'textcollate latin1_danish_ci NOT NULL , PRIMARY KEY ( `ip`
MySQL laver MyISAM databaser per default, og der er ingen grund til at fortælle den at der skal et dansk tegnsæt i, da den klarer sig meget godt med æøå uden det.
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'textcollate latin1_danish_ci NOT NULL , PRIMARY KEY ( `ip`
Det er fordi ip ikke er en streng! Den skal laves om med: INET_ATON Se denne sql: $ip = $_SERVER["REMOTE_ADDR"]; mysql_query("INSERT INTO banned(ip,datotid,kommentar) VALUES(INET_ATON('".$ip."'),NOW(),'".$comment."') ON DUPLICATE KEY UPDATE datotid=NOW(),kommentar='".$comment."'");
INET_ATON og INET_NTOA De 2 funktioner konvertere en IP til og fra et nummer. #
INET_ATON(expr)
Given the dotted-quad representation of a network address as a string, returns an integer that represents the numeric value of the address. Addresses may be 4- or 8-byte addresses.
NOTE: When storing values generated by INET_ATON(), it is recommended that you use an INT UNSIGNED column. If you use a (signed) INT column, then values corresponding to IP addresses for which the first octet is greater than 127 will be truncated to 2147483647 (that is, the value returned by INET_ATON('127.255.255.255')). See Section 11.2, “Numeric Types”. #
INET_NTOA(expr)
Given a numeric network address (4 or 8 byte), returns the dotted-quad representation of the address as a string.
Jakobo > må ærligt indrømme at jeg ikke fik en **** ud af det du smed der.. tror bare du skal smide et svar så glemmer jeg bare alt om det her script..
ja men sry, det der med at lave en ip om til et tal kan jeg ikke se det smarte i, så skal jeg til at bøvle med en funktion der kan lave tallet om til ip når jeg skal have det listet..
Der er også en indbygget mysql funktion, den hedder: INET_NTOA(3520061480) Prøv at lav: SELECT INET_NTOA(3520061480) og se hvad den giver dig. Prøv evt også: SELECT INET_ATON('127.0.0.1')
fixbabe: Send koden som du har brugt til at gemme IP'er ind på http://pastebin.com/ (eller bare her ind), så fixer jeg eller Jakobo den så den virker :)
<? include('connect.php'); $res = mysql_query('select * from banned2 order by id desc') or die(mysql_error());
if (isset($_POST['addban'])) { $sql = 'INSERT INTO banned2 (id, ip, besked) VALUES ("", "'.$_POST['ip'].'", "'.$_POST['besked'].'")'; mysql_query($sql) or die("Kunne ikke forbinde : " . mysql_error()); echo "<font face='Verdana' size='1'>Gemmer"; print('<script type="text/javascript">window.location="list.php"</script>'); }
if (isset($_GET['action']) && $_GET['action']=='slet') { mysql_query('DELETE FROM banned2 where id="'.$_GET['id'].'"') or die(mysql_error()); print('<script type="text/javascript">window.location="list.php"</script>'); } ?> <script language="JavaScript"> function erdusikker() { sikker = confirm('Er du sikker på at du vil slette?');
Du skal også rette: $res = mysql_query('select * from banned2 order by id desc') or die(mysql_error()); til: $res = mysql_query('select id,INET_NTOA(ip), kommentar from banned2 order by id desc') or die(mysql_error());
list.php <? include('connect.php'); $res = mysql_query('select * from banned order by ip desc') or die(mysql_error());
if (isset($_POST['addban'])) { $sql = 'INSERT INTO banned (ip, kommentar) VALUES ("", INET_ATON("'.$_POST['ip'].'"), "'.$_POST['kommentar'].'")'; mysql_query($sql) or die("Kunne ikke forbinde : " . mysql_error()); echo "<font face='Verdana' size='1'>Gemmer"; print('<script type="text/javascript">window.location="list.php"</script>'); }
if (isset($_GET['action']) && $_GET['action']=='slet') { mysql_query('DELETE FROM banned where id="'.$_GET['id'].'"') or die(mysql_error()); print('<script type="text/javascript">window.location="list.php"</script>'); } ?> <script language="JavaScript"> function erdusikker() { sikker = confirm('Er du sikker på at du vil slette?');
Prøv at ret din insert sql til: $sql = 'INSERT INTO banned (ip, datotid, kommentar) VALUES ("", INET_ATON("'.$_POST['ip'].'"),NOW(), "'.$_POST['kommentar'].'")';
Det gør du ved at rette: $res = mysql_query('select * from banned2 order by id desc') or die(mysql_error()); til: $res = mysql_query('select id,INET_NTOA(ip), kommentar from banned2 order by id desc') or die(mysql_error());
datotid var noget jeg brugte, fordi banningen skulle være tidsbestemt. I dit tilfælde ville jeg nok bruge: id = int,auto_increment ip = int(10) kommentar eller besked = text
`id` INT( 2 ) NOT NULL AUTO_INCREMENT , `ip` INT( 10 ) UNSIGNED NOT NULL , `datotid` DATETIME, `kommentar` TEXT( 250 ) NOT NULL , `besked` TEXT( 250 ) NOT NULL , PRIMARY KEY ( `id` ) )
MySQL returnerede:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(250) NOT NULL, `besked` TEXT(250) NOT NULL, PRIMARY KEY (`id`)
`id` INT( 2 ) NOT NULL AUTO_INCREMENT , `ip` INT( 10 ) UNSIGNED NOT NULL , `besked` TEXT( 250 ) NOT NULL , PRIMARY KEY ( `id` ) )
MySQL returnerede:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '( 250 ) NOT NULL , PRIMARY KEY ( `id` ) )' at line 3
Det var bedre :) har ændret "besked" til "kommentar" og har tilføjet "andet" til databasen (samme settings som kommentar)
men: Kunne ikke forbinde : You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
//banned.php <?php include("connect.php"); $ip = mysql_escape_string($_SERVER['REMOTE_ADDR']); $sql = "SELECT kommentar FROM banned WHERE ip = INET_ATON('".$ip."') LIMIT 1"; $query = mysql_query($sql);
if(mysql_num_rows($query)>0) { $row = mysql_fetch_assoc($query); //header("location: banned.php"); echo "<font face='verdana' size='1'>Info:<br>Din ip ".$ip." er banned<br>"; echo "Grund: ".$row['kommentar'].""; die(); } ?>her kommer siden
//list.php <? include('connect.php'); if (isset($_POST['addban'])) { $sql = 'INSERT INTO banned (ip, kommentar, andet) VALUES (INET_ATON("'.$_POST['ip'].'"), "'.$_POST['kommentar'].'" , "'.$_POST['andet'].'")'; mysql_query($sql) or die("Kunne ikke forbinde : " . mysql_error()); echo "<font face='Verdana' size='1'>Gemmer"; print('<script type="text/javascript">window.location="list.php"</script>'); }
if (isset($_GET['action']) && $_GET['action']=='slet') { mysql_query('DELETE FROM banned where id="'.$_GET['id'].'"') or die(mysql_error()); print('<script type="text/javascript">window.location="list.php"</script>'); } $res = mysql_query('select id, kommentar, andet, INET_NTOA(ip) as nyip from banned order by id desc') or die(mysql_error()); ?> <script language="JavaScript"> function erdusikker() { sikker = confirm('Er du sikker på at du vil slette?');
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.