S silfver Medlem sedan apr. 2003 12 679 inlägg Frågan 28 aug. 2005 18:22 #1 Hm. Är det möjligt att på nåt enkelt och smidigt sätt göra så att man ignorerar meddelanden som innehåller vissa ord?
Ifall man t.ex. skriver Poker så ska gästboken inte skriva inlägget.
<?
if (isset($_GET["do"]))
{
if ($_GET["do"] =="new")
{
$host = gethostbyaddr($REMOTE_ADDR);
$ip = gethostbyname($REMOTE_ADDR);
$skrivet = date("Y/m/d H:i");
$msg= strip_tags($_POST["f00-wa-bar"], '<strong><em>');
$msg = preg_replace("/(\r\n|\r|\n)/", "<br />", $msg);
$msg = str_replace("|", "&#124;", $msg);
$msg = stripslashes($msg);
$cfile = "textfil.txt";
$fp = fopen($cfile, "r+");
$content = fread($fp, filesize($cfile));
rewind($fp);
fwrite($fp, "{$_POST["f00-da-bar"]} | $msg | $skrivet | $ip\n$content");
fclose($fp);
}
}
?>
Har någon nåt bra förslag?
M Melea Medlem sedan juli 2003 3 147 inlägg Kan man inte bara göra en function som ersätter order Poker med valfritt??
function BadWords($text) {
$text = strtolower($text);
$text = str_replace("poker", "nehedu", $text);
return $text;
}
/r eller så kan du göra så att det inte ens går att lägga till i textdokumentet/databasen.
$not_allowed = array('poker','holdem');
$new_string = explode(" ", $_POST['text']);
foreach ($new_string as $a) {
if (in_array(strtolower($a), $not_allowed)) {
// Nehedu, inga sådana ord här!
}
}
S silfver Medlem sedan apr. 2003 12 679 inlägg
Melea skrev:
Kan man inte bara göra en function som ersätter order Poker med valfritt??
function BadWords($text) {
$text = strtolower($text);
$text = str_replace("poker", "nehedu", $text);
return $text;
}
/r eller så kan du göra så att det inte ens går att lägga till i textdokumentet/databasen.
$not_allowed = array('poker','holdem');
$new_string = explode(" ", $_POST['text']);
foreach ($new_string as $a) {
if (in_array(strtolower($a), $not_allowed)) {
// Nehedu, inga sådana ord här!
}
}
Meningen är ju att jag vill slippa alla spam-inlägg. Så om jag bara ersätter Poker med Nehedu, så får jag fortfarande en massa skräp. ;)
Ska pröva ditt senaste förslag där. Se ifall jag får ihop det... :p
M Melea Medlem sedan juli 2003 3 147 inlägg Mja, du kan ju göra så att man endast kan posta ett inlägg var, säg, 20 sekund.
$IP = getenv("REMOTE_ADDR");
$DateDiff = date("Y-m-d H:i:s", time("U") - 20);
$sql = mysql_query("SELECT * FROM guestbook where IP = '$IP' AND Posted > '$DateDiff'") or die (mysql_error());
if(mysql_num_rows($sql) == 0) {
// Lägg till gästboksinlägget
} else {
// Lägg inte till gästboksinlägget
}
S silfver Medlem sedan apr. 2003 12 679 inlägg Jag använder fortfarande en textfil för att spara mina gästboksinlägg. Och om en spambot kan posta ett inlägg var 20:e sekund så kan den fortfarande fylla. Och för min del så hinner jag bli tillräckligt irriterad av ETT inlägg som är spam. :D
Men jag ska pröva ditt filter så fort jag får tid efter jobbet...
J jme Medlem sedan maj 2001 2 237 inlägg Ett sätt att minska spam är at ställa en random men simpel fråga som man måste besvara innan man kan posta.
T ex:
Hur mycket är 1 +2?
Alternatvis skapa dynamiska bilder med siffror och bokstäver som man måste skriva i ett fält.
Har sett liknande på vissa ställen. Jag antar att spam-robotar har svårt med detta (tills det blir vanligt...)
S silfver Medlem sedan apr. 2003 12 679 inlägg
jme skrev:
Ett sätt att minska spam är at ställa en random men simpel fråga som man måste besvara innan man kan posta.
T ex:
Hur mycket är 1 +2?
Alternatvis skapa dynamiska bilder med siffror och bokstäver som man måste skriva i ett fält.
Har sett liknande på vissa ställen. Jag antar att spam-robotar har svårt med detta (tills det blir vanligt...)
Sånt där är alldeles för avancerat för mig. :D
Ska snickra ihop en sql-php-gästbok när jag får tid över. Med lite hjälp från alla på wF så borde jag väl lyckas. ;)
M Melea Medlem sedan juli 2003 3 147 inlägg Jag kan la göra en spamfri gästbok åt dig om du vill. Med MySQL databas och lite småplockfunktioner. :)
S silfver Medlem sedan apr. 2003 12 679 inlägg
Melea skrev:
Jag kan la göra en spamfri gästbok åt dig om du vill. Med MySQL databas och lite småplockfunktioner. :)
All hjälp mottages med öppna armar! Har du tid och lust så får du jättegärna göra det.
M Melea Medlem sedan juli 2003 3 147 inlägg Okej, blev lite kladdigt med filtret, någon annan får gärna kolla på det, men det funkar. :)
Här har du demo: http://www.falkenscout.se/guestbook/
Och här kan du tanka hem den: http://www.falkenscout.se/guestbook/guestbook.rar
Du kan kolla i function.php vilka funktioner jag lagt till.
S silfver Medlem sedan apr. 2003 12 679 inlägg
Melea skrev:
Okej, blev lite kladdigt med filtret, någon annan får gärna kolla på det, men det funkar. :)
Här har du demo: http://www.falkenscout.se/guestbook/
Och här kan du tanka hem den: http://www.falkenscout.se/guestbook/guestbook.rar
Du kan kolla i function.php vilka funktioner jag lagt till.
Stiligt, melea! Sitter här och beskådar koden lite och la märke till en massa headers. Jag kommer inte kunna skriva
<?php require "index.php"; ?>
i min gästboksfil, för då kommer jag väl antagligen få ett felmeddelande i stil med:
Headers already set, bla bla bla.
Eller hur? :)
Eftersom jag inkluderar sidan i tre delar, top.php, gastbok.php och bottom.php så kommer det väl bli strul?
<html>
<body>... ligger ju redan i min top.php-fil. Förstår du vad jag menar? :)
M Melea Medlem sedan juli 2003 3 147 inlägg Jajamen, men rensa upp så mycket du vill i index.php, och döp om den till guestbook.php eller liknande. :)
Kolla gästboken för mer info
/r flytta all javascript-kod till din top.php, samt
if($_POST['guestbook'] == 'add') {
$answer = $_POST[answerid];
$split = explode("_", $answer);
$questionid = $split[0];
$answerid = $split[1];
if($questionid == 0 && $answerid == 2 || $questionid == 1 && $answerid = 3 || $questionid = 2 && $answerid = 2) {
mysql_query("
INSERT INTO guestbook (Name, Email, GB_Text, Posted, IP)
VALUES ('$_POST[Name]', '$_POST[Email]', '$_POST[GB_Text]', '$Written', '$IP')
") or die(mysql_error());
Header('Location: index.php');
} else {
Header('Location: index.php?error');
}
} elseif($_GET['guestbook'] == 'del') {
mysql_query("
DELETE FROM guestbook
WHERE ID = $_GET[ID]
") or die(mysql_error());
if(empty($_GET['page'])) {
$page = 1;
} else {
$page = $_GET['page'];
}
Header('Location: index.php?page='.$page);
}
Så den hamnar ovanför all html-kod, sen borde det inte vara några problem och rensa bort allt detta
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv" lang="sv">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<!-- no cache headers -->
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="no-cache" />
<!-- end no cache headers -->
<meta name="keywords" content="gästbok" />
<meta name="description" content="Gästbok" />
<meta http-equiv="MSThemeCompatible" content="Yes" />
<title>Gästbok</title>
<!-- javascript elements -->
<script type="text/javascript">
</script>
<!-- css elements -->
<style type="text/css">
</style>
</head>
<body>
....
</body>
</html>
S silfver Medlem sedan apr. 2003 12 679 inlägg
Melea skrev:
Jajamen, men rensa upp så mycket du vill i index.php, och döp om den till guestbook.php eller liknande. :)
Kolla gästboken för mer info
Roliga frågor du har gjort. :p Gillar särskilt den frågan "Vad heter Silfver i efternamn?" haha. :D
Pillar med gästboken när jag slutat så får vi se ifall jag reder ut det. Tack så länge! Den var jättefin. ;)
S silfver Medlem sedan apr. 2003 12 679 inlägg När jag ska lägga till tabellerna i databasen så får jag följande felmeddelande:
phpMyAdmin skrev:
Error
SQL-query :
CREATE TABLE `guestbook` (
`ID` int( 50 ) unsigned NOT NULL AUTO_INCREMENT ,
`Name` varchar( 100 ) NOT NULL default '',
`Email` varchar( 100 ) NOT NULL default '',
`GB_Text` longtext NOT NULL ,
`Posted` datetime default NULL ,
`IP` varchar( 16 ) NOT NULL default '',
PRIMARY KEY ( `ID` )
)ENGINE = MYISAM DEFAULT CHARSET = latin1 PACK_KEYS =0 AUTO_INCREMENT =11
MySQL said:
#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 'DEFAULT CHARSET = latin1 PACK_KEYS =0 AUTO_INCREMENT =11' at
Vad kan det bero på?
M Melea Medlem sedan juli 2003 3 147 inlägg Måste blitt något fel, denna funkar:
CREATE TABLE `guestbook` (
`ID` int(50) unsigned NOT NULL auto_increment,
`Name` varchar(100) NOT NULL default '',
`Email` varchar(100) NOT NULL default '',
`GB_Text` longtext NOT NULL,
`Posted` datetime default NULL,
`IP` varchar(16) NOT NULL default '',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=1 ;
S silfver Medlem sedan apr. 2003 12 679 inlägg Det fungerade inte heller. Men jag prövade att ta bort
ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=1 ;
och då fungerade. Men nu kanske jag borde ändra nåt manuellt?
r\ Har hittat en bugg till. Det verkar som att frågan "Vad heter Silfver i efternamn" inte fungerar. Den skriver att man svarar fel trots att man väljer rätt namn. Nu blir jag osäker på om jag verkligen heter Silfver i efternamn. :birp
M Melea Medlem sedan juli 2003 3 147 inlägg
silfver skrev:
r\ Har hittat en bugg till. Det verkar som att frågan "Vad heter Silfver i efternamn" inte fungerar. Den skriver att man svarar fel trots att man väljer rätt namn. Nu blir jag osäker på om jag verkligen heter Silfver i efternamn. :birp
Det var jag som hade missat en grej
if($questionid == 0 && $answerid == 2 || $questionid == 1 && $answerid = 3 || $questionid = 2 && $answerid = 2) {
Om du kollar riktigt noga så är det bara ett = på de tre sista, ersätt det med == så ska det funka. :)
S silfver Medlem sedan apr. 2003 12 679 inlägg Kanon!
Sitter och knåpar lite nu... Timestampsen fungerar fortfarande inte. Vet du varför?
M Melea Medlem sedan juli 2003 3 147 inlägg Inte en aning, men du...
Gör en ny tabell
ID - int(50) - autoincrement
Name - varchar(100)
Email - varchar(100)
GB_Text - longtext
Posted - datetime - null
IP - varchar(16)
Pröva det, så får vi se om det funkar. :)
M Melea Medlem sedan juli 2003 3 147 inlägg Ah, såg en sak nu, kan det vara så att du inte har en variabel som innehåller datumet, innan INSERT-taggen?
$Written = date("Y-m-d H:i:s");