S silfver Medlem sedan apr. 2003 12 679 inlägg Trådstart 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...
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.
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.
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. Gillar särskilt den frågan "Vad heter Silfver i efternamn?" haha.
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.
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.
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");