webForumDet fria alternativet

Ordfilter till min gästbok

PHP

22 svar · 1 488 visningar · startad av silfver

Medlem sedan apr. 200312 679 inlägg
Frågan#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("|", "&amp;#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?

Medlem sedan juli 20033 147 inlägg
#2

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!

	}
}
Medlem sedan apr. 200312 679 inlägg
#3

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

Medlem sedan juli 20033 147 inlägg
#4

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

}
Medlem sedan apr. 200312 679 inlägg
#5

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...

Medlem sedan maj 20012 237 inlägg
#6

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...)

Medlem sedan apr. 200312 679 inlägg
#7

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. ;)

Medlem sedan juli 20033 147 inlägg
#8

Jag kan la göra en spamfri gästbok åt dig om du vill. Med MySQL databas och lite småplockfunktioner. :)

Medlem sedan apr. 200312 679 inlägg
#9

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.

Medlem sedan juli 20033 147 inlägg
#10

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.

Medlem sedan apr. 200312 679 inlägg
#11

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? :)

Medlem sedan juli 20033 147 inlägg
#12

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>
Medlem sedan apr. 200312 679 inlägg
#13

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. ;)

Medlem sedan apr. 200312 679 inlägg
#14

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å?

Medlem sedan juli 20033 147 inlägg
#15

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 ;
Medlem sedan apr. 200312 679 inlägg
#16

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

Medlem sedan juli 20033 147 inlägg
#17

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. :)

Medlem sedan apr. 200312 679 inlägg
#18

Kanon!

Sitter och knåpar lite nu... Timestampsen fungerar fortfarande inte. Vet du varför?

Medlem sedan juli 20033 147 inlägg
#19

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. :)

Medlem sedan juli 20033 147 inlägg
#20

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");
278 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)