Jump to content

Putting A Word Filter, Word Length, & Time Delay on Shoutbox


FortMyersDrew

Recommended Posts

Can Anyone Help Me add  A Word Filter, Word Length, & Time Delay on my Shoutbox?

 

<?php
//including the database connection
include('config.php');
//getting everything that has been submitted
$name=mysql_real_escape_string(strip_tags($_POST['name']));
$mail=mysql_real_escape_string(strip_tags($_POST['mail']));
$message=mysql_real_escape_string(strip_tags($_POST['message']));
$submit=$_POST['submit'];
//get the current time with php date() function
//note that the server time will be recorded
//more info about all functions - http://php.net
$time=date("m/d/y - g:i a");
//get the ip. Note that this wont see through proxies
$ip=$_SERVER['REMOTE_ADDR'];


//just some basic error checking which
//checks if name,e-mail and message 
//hasnt been left blank or with default text
if (($name!=="") || ($name!=="Name") || ($mail!=="") || ($mail!=="E-mail") || ($message!=="") || ($message!=="Your text"))
{
//inserts data into the database
$sql = "INSERT INTO shoutbox (id, name, mail, message, time, ip) VALUES ('NULL', '$name', '$mail', '$message', '$time', '$ip')";
mysql_query($sql) or die(mysql_error());

$query = "SELECT * FROM `shout_user_log` WHERE `ip` = '$ip'";
$result = mysql_query ($query);
$num_rows = mysql_num_rows ($result);

if ($num_rows > 0) {

$query = "DELETE * FROM `shout_user_log` WHERE `ip` = '$ip'";
mysql_query ($query);

}

$query = "INSERT INTO `shout_user_log` (`id`, `username`, `email`, `ip`) VALUES ('', '$name', '$mail', '$ip')";
mysql_query ($query);

//sends the user back to the form
header("Location:".$_SERVER['HTTP_REFERER']);
}
else{
header("Location:".$_SERVER['HTTP_REFERER']);
}
?>

Link to comment
Share on other sites

What you're gonna need to do is add a time column to your log table.  Use a integer field 10 characters long and store unix time stamps in it made from time().  Then you would want to pull the last time logged for the ip... Then you compare it to the current time minus a certain value.  Forexample:

 

$qtime = time() - 300; //only allow posts every 5 minutes
$q = "SELECT time FROM shout_user_log WHERE ip = '{$ip}' AND time > '" . $qtime . "' LIMIT 1";
if(mysql_num_rows($q) > 0) {
//it hasn't been 5 minutes
}
else {
//everything passed fine
}

 

As for word length:

 

$maxlength = 15; //15 character max on words
$exp = explode(" ", $message);
foreach($exp as $v) {
if(strlen($v) > $maxlength) //it failed!
}

 

And then for a censor thing you could do something like

 

$badwords = array('bad', 'another_bad_word');

str_replace($badwords, "****", $message);

Link to comment
Share on other sites

I have tried all of these

 

$qtime = time() - 300; //only allow posts every 5 minutes
$q = "SELECT time FROM shout_user_log WHERE ip = '{$ip}' AND time > '" . $qtime . "' LIMIT 1";
if(mysql_num_rows($q) > 0) {
//it hasn't been 5 minutes
}
else {
//everything passed fine
}


As for word length:


$maxlength = 15; //15 character max on words
$exp = explode(" ", $message);
foreach($exp as $v) {
if(strlen($v) > $maxlength) //it failed!
}


And then for a censor thing you could do something like


$badwords = array('bad', 'another_bad_word');

str_replace($badwords, "****", $message);

 

None of them work so what do i have to do to fix this

Link to comment
Share on other sites

try the time function first please ok.

<?php
$qtime = time() - 300; //only allow posts every 5 minutes
$q = "SELECT time FROM shout_user_log WHERE ip = '$ip' AND time > '" . $qtime . "' LIMIT 1";
if(mysql_num_rows($q) > 0) {
//it hasn't been 5 minutes
}
else {
//everything passed fine
}
?>

Link to comment
Share on other sites

Well i tried and i get this message

 

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/content/d/r/e/drewsmedia/html/doit.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /home/content/d/r/e/drewsmedia/html/doit.php:4) in /home/content/d/r/e/drewsmedia/html/doit.php on line 51

Link to comment
Share on other sites

 

try this then

<?php
$qtime = date("i") - 5; //only allow posts every 5 minutes
$q = "SELECT time FROM shout_user_log WHERE ip = '$ip' AND time > '" . $qtime . "' LIMIT 1";
if(mysql_num_rows($q) > 0) {
//it hasn't been 5 minutes
}
else {
//everything passed fine
}
?>

Link to comment
Share on other sites

Red arrow, what if someone posts at 0:00 and then they try to post at 1:00?  It will give them an error even though it's been an hour since they posted.  I don't think this problem would be very occurant, but it would be better to not leave that small chance of someone running into it.

 

What is the structure of your shout_user_log table (including datatypes and lengths, please)?

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.