---
title: "Förhindra spam i mailformulär"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/171463-förhindra-spam-i-mailformulär"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "silfver"
published: "2008-05-14T16:00:36.000Z"
updated: "2009-05-29T10:32:52.000Z"
replies: 23
views: 1568
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/171463-förhindra-spam-i-mailformulär"
---

# Förhindra spam i mailformulär

_Sida 1 av 2._

## #1 — silfver, 2008-05-14T16:00Z

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: 

```php
<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

Permalänk: https://www.webforum.nu/p/171463

## #2 — Gislaved, 2008-05-14T16:22Z

```php
<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>
```

Permalänk: https://www.webforum.nu/p/2110088

## #3 — silfver, 2008-05-14T16:26Z

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?

Permalänk: https://www.webforum.nu/p/2110089

## #4 — Gislaved, 2008-05-14T16:29Z

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.

Permalänk: https://www.webforum.nu/p/2110092

## #5 — silfver, 2008-05-14T16:31Z

Smart! Tackar för den. :bire

Permalänk: https://www.webforum.nu/p/2110094

## #6 — silfver, 2008-05-16T08:54Z

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

Permalänk: https://www.webforum.nu/p/2110504

## #7 — TomasA, 2008-05-16T09:59Z

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

Permalänk: https://www.webforum.nu/p/2110525

## #8 — silfver, 2008-05-16T10:01Z

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

Permalänk: https://www.webforum.nu/p/2110526

## #9 — TomasA, 2008-05-16T10:04Z

Då kan det vara lite svårare.

Jag har denna kod i sänd-filen

```php
	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

Permalänk: https://www.webforum.nu/p/2110527

## #10 — Gislaved, 2008-05-16T12:26Z

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

Permalänk: https://www.webforum.nu/p/2110555

## #11 — silfver, 2008-05-16T15:44Z

Jag ser ju inget comment-fält?

Permalänk: https://www.webforum.nu/p/2110614

## #12 — silfver, 2008-05-16T15:45Z

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

Permalänk: https://www.webforum.nu/p/2110615

## #13 — Gislaved, 2008-05-16T20:56Z

> **silfver skrev:**
>
> Jag ser ju inget comment-fält?

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

Permalänk: https://www.webforum.nu/p/2110710

## #14 — silfver, 2008-05-17T08:17Z

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

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

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

Permalänk: https://www.webforum.nu/p/2110761

## #15 — Fredde Mannen, 2008-05-17T08:49Z

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

skall vara

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

i detta fall..

Permalänk: https://www.webforum.nu/p/2110764

## #16 — silfver, 2008-05-17T09:18Z

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!

Permalänk: https://www.webforum.nu/p/2110766

## #17 — Gislaved, 2008-05-17T21:10Z

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

Permalänk: https://www.webforum.nu/p/2110890

## #18 — silfver, 2008-05-19T11:29Z

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

Permalänk: https://www.webforum.nu/p/2111197

## #19 — überfuzz, 2008-05-19T13:31Z

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

Permalänk: https://www.webforum.nu/p/2111215

## #20 — silfver, 2008-05-19T13:38Z

> **ü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

Permalänk: https://www.webforum.nu/p/2111221

---

Tråden på webben: https://www.webforum.nu/amne/php/171463-förhindra-spam-i-mailformulär  
Nästa sida: https://www.webforum.nu/amne/php/171463-förhindra-spam-i-mailformulär/page2.md
