webForumDet fria alternativet

Förhindra spam i mailformulär

PHPur PHP

23 svar · 1 559 visningar · startad av silfver

Medlem sedan apr. 200312 679 inlägg
Frågan#1

Finns det någon vänlig skäl som skulle kunna hjälpa mig att lägga till någon form av spamskydd i mitt formulär? Jag antar att det räcker med nåt i stil med "Vad blir 1+1?" Eller ni kanske har en smartare lösning som besökaren slipper märka?

Så här ser scriptet ut:

<div id="contactform">
<form action="" method="post">
	<p><input type="text" name="name" id="name" /> <label for="name">Ditt namn</label></p>
	<p><input type="text" name="email" id="email" /> <label for="email">Din e-mailadress</label></p>

	<p><label for="message">Ditt meddelande:</label><br />
	<textarea name="message" rows="9" cols="60" id="message"></textarea></p>

	<p><button name="submit" type="submit" value="send" class="button">skicka</button></p>
</form>
<?php
extract($_POST);
if ($_POST['submit']) {
				if($name && $email && $message ) { //kollar så alla fält är ifyllda
								if (return_valid($email)) {
								//$message = about_mail()."\n"."\n".$message; //funktion som tilldelar message en del info
								$message = about_mail()."\n";
								foreach($_POST AS $key=>$val) {
										$message .= $key .": ". $val ."\n";
									}
							mail($din_email,$subject,$message,"From: $name <$email>"); // skickar mailet, och message
							//$newlog=new logging("logs","log.txt","log.xml"); //instantierar logg klassen
							//$newlog->create_txt(); //kör loggfunktioner i logg klassen
							//$newlog->create_xml();
							echo "<p><strong>Tack för ditt meddelande!</strong> Jag återkommer så snart som möjligt.</p>";

							} else {
		 							echo "<p>Ogiltig e-postadress. Var vänlig och fyll i en korrekt.</p>";
									}

 			 } else {
 			 print "<p>Alla fält är inte ifyllda!</p>";
 			 }
  }

// Returnerar sant om det är en korrekt adress.
function return_valid($e_mail) {
if(
ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $e_mail)) {
return TRUE;
}
else {
 return FALSE;
}
}

// returnerar info om adressaten i mailet. i meddelande delens topp.
function about_mail() {
	global $din_site;
		//$headline3="|  obs!, denna info sparas i xml filen log.xml "."\n";
		//$headline2="| ----------------------------------------------"."\n";
		$headline1="E-post från ".$din_site."\n";
		$date.="Skickades ".date("D-d-M-Y")."\n";
		$time.="Klockan: ".date("H:i:s")."\n";
		$ip.="Från ip nummer: ".$_SERVER['REMOTE_ADDR']."\n";
		$port.="Adressatens port: ".$_SERVER['REMOTE_PORT']." \n";
		$browser.="Adressatens läsare: ".$_SERVER['HTTP_USER_AGENT']."\n";
		$all = ($headline1.$date.$time.$ip.$port.$browser);
		return "$all";
}

?></div>

Tacksam för hjälp. Får massa spam i det här formuläret. :l

Medlem sedan nov. 20041 740 inlägg
#2
<style type="text/css">
#lurad {
   width: 1px; height: 1px; margin: 0; padding: 0;
   overflow: hidden; text-indent: -9000px;
   /* alternativt display:none; */
}
</style>
<div id="contactform">
<form action="" method="post">
	<div id="lurad"><input type="text" name="comment" value="" id="comment" /><label for="comment">Lämna detta fält tomt</label></div>
	<p><input type="text" name="name" id="name" /> <label for="name">Ditt namn</label></p>
	<p><input type="text" name="email" id="email" /> <label for="email">Din e-mailadress</label></p>

	<p><label for="message">Ditt meddelande:</label><br />
	<textarea name="message" rows="9" cols="60" id="message"></textarea></p>

	<p><button name="submit" type="submit" value="send" class="button">skicka</button></p>
</form>
<?php
extract($_POST);
if ($_POST['submit'] && (strlen($_POST['comment']) < 1)) {
				if($name && $email && $message ) { //kollar så alla fält är ifyllda
								if (return_valid($email)) {
								//$message = about_mail()."\n"."\n".$message; //funktion som tilldelar message en del info
								$message = about_mail()."\n";
								foreach($_POST AS $key=>$val) {
										$message .= $key .": ". $val ."\n";
									}
							mail($din_email,$subject,$message,"From: $name <$email>"); // skickar mailet, och message
							//$newlog=new logging("logs","log.txt","log.xml"); //instantierar logg klassen
							//$newlog->create_txt(); //kör loggfunktioner i logg klassen
							//$newlog->create_xml();
							echo "<p><strong>Tack för ditt meddelande!</strong> Jag återkommer så snart som möjligt.</p>";

							} else {
		 							echo "<p>Ogiltig e-postadress. Var vänlig och fyll i en korrekt.</p>";
									}

 			 } else {
 			 print "<p>Alla fält är inte ifyllda!</p>";
 			 }
  }

// Returnerar sant om det är en korrekt adress.
function return_valid($e_mail) {
if(
ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $e_mail)) {
return TRUE;
}
else {
 return FALSE;
}
}

// returnerar info om adressaten i mailet. i meddelande delens topp.
function about_mail() {
	global $din_site;
		//$headline3="|  obs!, denna info sparas i xml filen log.xml "."\n";
		//$headline2="| ----------------------------------------------"."\n";
		$headline1="E-post från ".$din_site."\n";
		$date.="Skickades ".date("D-d-M-Y")."\n";
		$time.="Klockan: ".date("H:i:s")."\n";
		$ip.="Från ip nummer: ".$_SERVER['REMOTE_ADDR']."\n";
		$port.="Adressatens port: ".$_SERVER['REMOTE_PORT']." \n";
		$browser.="Adressatens läsare: ".$_SERVER['HTTP_USER_AGENT']."\n";
		$all = ($headline1.$date.$time.$ip.$port.$browser);
		return "$all";
}

?></div>
Medlem sedan apr. 200312 679 inlägg
#3

Tack för svaret, Gislaved! Scriptet verkar fortfarande fungera (prövade själv) så nu väntar jag på att se ifall din lösning fungerar. :) Får man fråga vad du gjorde?

Medlem sedan nov. 20041 740 inlägg
#4

Jag skapade ett fält som spamrobotarna älskar att fylla i, men som döljs för besökaren med hjälp av CSS. För de som inte har css visas en uppmaning om att lämna fältet tomt.

Om fältet trots allt är ifyllt nekas kommentaren.

Medlem sedan apr. 200312 679 inlägg
#5

Smart! Tackar för den. :bire

Medlem sedan apr. 200312 679 inlägg
#6

Det tog inte lång tid innan spamet hittade igenom ändå. Vaknade upp med 8 fräscha i morse. :l

Medlem sedan feb. 2003173 inlägg
#7

Hej

Jag har haft samma problem och använt följande lösning

Jag har lagt in en ruta i blanketten med följande uppmaning

Skriv siffran 8 med bokstäver i rutan intill

Sen lägger Du in krav på att rutan fylls i med "åtta".
Har inte fått något SPAM-inlägg efter detta.

Dock, besökare med andra tgb än de med svensk teckenuppsättning, klara iregel inte att lägga ett litet å med ASCI-kod,
Så har Du sådana besökare får Du köre med t ex siffran 7

OK? :)

Medlem sedan apr. 200312 679 inlägg
#8

Problemet är att jag inte kan php, så jag vet inte hur man ska göra villkoren för det.

Medlem sedan feb. 2003173 inlägg
#9

Då kan det vara lite svårare.

Jag har denna kod i sänd-filen

	if (!eregi("^åtta",$koll))
	{
	fel("Glömde Du skriva in siffran 8 med bokstäver i kontrollfältet?");
	}

Kanske dags att börja med lite PHP. Speciellt som Du är moderator i forumet om just PHP. :h

Medlem sedan nov. 20041 740 inlägg
#10

silfver skrev:

Det tog inte lång tid innan spamet hittade igenom ändå. Vaknade upp med 8 fräscha i morse. :l

Testade du att det verkligen fungerade? Om comment är i fylld, nekas det då?

Medlem sedan apr. 200312 679 inlägg
#11

Jag ser ju inget comment-fält?

Medlem sedan apr. 200312 679 inlägg
#12

TomasA skrev:

Kanske dags att börja med lite PHP. Speciellt som Du är moderator i forumet om just PHP. :h

Kollar du min profil så ser du att jag inte är moderator här. :)

Medlem sedan nov. 20041 740 inlägg
#13

silfver skrev:

Jag ser ju inget comment-fält?

Nej, du får ju ta bort css:en medan du provar. :)

Medlem sedan apr. 200312 679 inlägg
#14

Parse error: syntax error, unexpected '{' in form.php on line 20

Gislaved skrev:

Nej, du får ju ta bort css:en medan du provar. :)

Rad 20:

if ($_POST['submit'] && (strlen($_POST['comment']) < 1) {

Måste blivit något fel i början när jag kopierade scriptet till servern.

Medlem sedan nov. 20014 054 inlägg
#15
if ($_POST['submit'] && (strlen($_POST['comment']) < 1) {

skall vara

if ($_POST['submit'] && (strlen($_POST['comment']) < 1)) {

i detta fall..

Medlem sedan apr. 200312 679 inlägg
#16

Ah, är det Gislaved som slarvar lite. ;)

Nu verkar det fungerar igen. Ifall jag fyller i fältet som man inte ska fylla i så skickas inget mail - och det är ju bra. :D

Tack för hjälpen!

Medlem sedan nov. 20041 740 inlägg
#17

silfver skrev:

Ah, är det Gislaved som slarvar lite. ;)!

Ja att koda PHP gör jag i stort sett aldrig numera, och när man får göra det i webForums textrutor blir det inte så bra. Fint att du såg felet.

Medlem sedan apr. 200312 679 inlägg
#18

Fick faktiskt ett spam i formuläret i dag. :s

Medlem sedan apr. 2006409 inlägg
#19

Är du säker på att det var en spambot som skickat det?

Medlem sedan apr. 200312 679 inlägg
#20

überfuzz skrev:

Är du säker på att det var en spambot som skickat det?

Givetvis inte. Men jag brukar inte få såna här mail från människor:

name: Runescape money
email: ycfc@yemc.com
submit: send
message: <a href=http://www.purchasers2money.com>Runescape gold</a>, Buy <a href=http://www.purchasers2money.com>runescape money</a>. We provide cheap Runescape Money to reliable customer. We provide all <a href=http://www.purchasers2money.com>Runescape gp</a> services. The professional Runescape Money store. Cheaper price, deliver fast, 24/7 online service. <a href=http://www.purchasers2money.com> Buy Runescape money</a>, Rs money. Buy <a href=http://www.purchasers2money.com>Rs money</a> here, we are professional SRO ... Welcome to <a href=http://www.purchasers2money.com>Buy runescape gold</a>. We provide cheap Rs money to reliable customer.

:OO

138 ms totalt · 3 externa anrop · v20260731065814-full.02a0f7de
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)