---
title: "Hjälp med \"spamskydd\"!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/167716-hjälp-med-spamskydd"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Guldstrand"
published: "2008-01-01T23:57:48.000Z"
updated: "2008-01-02T21:52:15.000Z"
replies: 22
views: 964
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/167716-hjälp-med-spamskydd"
---

# Hjälp med "spamskydd"!

_Sida 1 av 2._

## #1 — Guldstrand, 2008-01-01T23:57Z

Har försökt att använda följande kod, men får hela tiden "FEL KOD".

```php
if (isset($_POST['submit'])){

if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
    echo "FEL KOD";
}
else {
echo "RÄTT KOD"; 
}
}
```

Detta finns överst på sidan:

```php
$_SESSION['anti_spam_code'] = rand(1000, 9999);
```

Måste ha stirrat mig BLIND på detta.

Vet till 100% att jag anger RÄTT kod. Men får "FEL KOD" oavsett om jag anger rätt, fel -eller ingen kod alls.  :q 
Tacksam för hjälp.

God fortsättning på det nya året.

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

## #2 — Sjodahl, 2008-01-02T00:01Z

Vad får du om du printar ut varje steg tro?

trim($\_POST\['anti_spam_field'\]) och
$\_SESSION\['anti_spam_code'\])

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

## #3 — Guldstrand, 2008-01-02T00:14Z

> **Sjodahl skrev:**
>
> Vad får du om du printar ut varje steg tro?
> 
> trim($\_POST\['anti_spam_field'\]) och
> $\_SESSION\['anti_spam_code'\])

Hmm..   :x 

Då får jag:
$\_POST\['anti_spam_field'\] : 2275
$\_SESSION\['anti_spam_code'\] : 4040

Verkar som att $\_SESSION\['anti_spam_code'\] hinner ändras innan formuläret "postas".  \*svårt att förklara\*

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

## #4 — colione, 2008-01-02T00:30Z

Det är ju inte så djävla konstigt att dem inte stämmer överend om du gör följande:
$\_SESSION\['anti_spam_code'\] = rand(1000, 9999);
högst upp på sidan som tar emot datan. :OO
Du skriver ju över värdet då.....

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

## #5 — Guldstrand, 2008-01-02T00:33Z

> **colione skrev:**
>
> Det är ju inte så djävla konstigt att dem inte stämmer överend om du gör följande:
> $\_SESSION\['anti_spam_code'\] = rand(1000, 9999);
> högst upp på sidan som tar emot datan. :OO
> Du skriver ju över värdet då.....

Ajdå.. tänkte faktiskt inte på det.  :r 
Hur löser jag detta på enklaste sätt?

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

## #6 — colione, 2008-01-02T00:46Z

tar bort det överst på den sidan...förutsatt att du inte postar mot samma sida. gör du det får du göra en koll på om typ submit är satt är den inte det genererar du annars kollar du

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

## #7 — Guldstrand, 2008-01-02T00:51Z

> **colione skrev:**
>
> tar bort det överst på den sidan...förutsatt att du inte postar mot samma sida. gör du det får du göra en koll på om typ submit är satt är den inte det genererar du annars kollar du

Formuläret postas till samma sida, (gastbok.php).

Jag har detta nu, strax över formuläret:

```php
if (isset($_POST['submit'])){ 

if(!isset($_SESSION['anti_spam_code']))
$_SESSION['anti_spam_code'] = rand(1000, 9999);

if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
    print("FEL KOD");
}
else {
print("RÄTT KOD"); 
}
```

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

## #8 — Guldstrand, 2008-01-02T17:40Z

Har följande:

```php
<?php 
 
if (isset($_POST['submit'])){ 
 
 
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
    print("FEL KOD<br><br>");
}
else {
print("RÄTT KOD<br><br>"); 
}
 
if(trim($_POST['namn']) == "" ){
 die("<img src='img/utropstecken.png' alt=' Du måste skriva ditt namn! ' title=' Du måste skriva ditt namn! '>&nbsp;&nbsp;Du måste skriva ditt namn!"); 
} 
 
if(trim($_POST['inlagg']) == "" ){
 die("<img src='img/utropstecken.png' alt=' Du måste skriva något! ' title=' Du måste skriva något! '>&nbsp;&nbsp;Du måste skriva något!"); 
} 
 
}
?>
```

Ps. Formuläret postas till samma sida, (gastbok.php).

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

## #9 — stevenet, 2008-01-02T17:52Z

```php
<?php 
 
if (isset($_POST['submit'])){ 
 
 
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
    print("FEL KOD<br><br>");
}
else {
print("RÄTT KOD<br><br>"); 
}
 
if(trim($_POST['namn']) == "" ){
 die("<img src='img/utropstecken.png' alt=' Du måste skriva ditt namn! ' title=' Du måste skriva ditt namn! '>&nbsp;&nbsp;Du måste skriva ditt namn!"); 
} 
 
if(trim($_POST['inlagg']) == "" ){
 die("<img src='img/utropstecken.png' alt=' Du måste skriva något! ' title=' Du måste skriva något! '>&nbsp;&nbsp;Du måste skriva något!"); 
} 
 
}

// lägg till efter kontroll av indatan
$_SESSION['anti_spam_code'] = rand(1000, 9999);
?>
```

Så kanske? :)

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

## #10 — Guldstrand, 2008-01-02T18:17Z

Hjälpte tyvärr inte... får fortfarande samma fel (FEL KOD).  :(

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

## #11 — stevenet, 2008-01-02T18:24Z

Då testar vi att dumpa datan så vi ser vad som går fel:

```php
if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
    var_dump($_SESSION);
}
```

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

## #12 — Guldstrand, 2008-01-02T18:32Z

> **stevenet skrev:**
>
> Då testar vi att dumpa datan så vi ser vad som går fel:
> 
>
>
> ```php
> if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
>     var_dump($_SESSION);
> }
> ```

Kanske gjorde något fel, för nu får jag bara "NULL".

Ska även meddela att jag har flyttat koden som hanterar formuläret, till en egen sida , (gastbok_post.php).

```php
<?php  

error_reporting(E_ALL); 
ini_set("display_errors", "1");

include("mysql.php"); 

if (isset($_POST['submit'])){
   if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) { 
    var_dump($_SESSION); 
}
}

if(trim($_POST['namn']) == "" ){
 die("<img src='img/utropstecken.png' alt=' Du måste skriva ditt namn! ' title=' Du måste skriva ditt namn! '>&nbsp;&nbsp;Du måste skriva ditt namn!"); 
} 

if(trim($_POST['inlagg']) == "" ){
 die("<img src='img/utropstecken.png' alt=' Du måste skriva något! ' title=' Du måste skriva något! '>&nbsp;&nbsp;Du måste skriva något!"); 
} 

$inlagg = db_escape($_POST['inlagg']);
$namn = db_escape($_POST['namn']);
$ort = db_escape($_POST['ort']);
$epost = db_escape($_POST['epost']);
$hemsida = db_escape($_POST['hemsida']); 
$ip =  '' . $_SERVER['REMOTE_ADDR'] . '';

    $sql = "INSERT INTO gastbok(inlagg, namn, ort, epost, hemsida, ipadress, datum)
		VALUES('$inlagg', '$namn', '$ort', '$epost', '$hemsida', '$ip', NOW())";
    mysql_query($sql) or die (mysql_error());

	header("Location: gastbok.php");

//} 

?>
```

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

## #13 — stevenet, 2008-01-02T18:33Z

Jag ser inte session_start(); någonstans?

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

## #14 — Guldstrand, 2008-01-02T18:35Z

> **stevenet skrev:**
>
> Jag ser inte session_start(); någonstans?

Kom på det sen...   :r 

Nu fick jag:

```php
array(0) { }
```

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

## #15 — stevenet, 2008-01-02T18:38Z

Då är inga sessioner satta. Har du session_start på den ursprungliga sidan? ;)

Du bör förövrigt escapa REMOTE_ADDR med.

$ip = db_espace($\_SERVER\['REMOTE_ADDR'\]);

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

## #16 — Guldstrand, 2008-01-02T18:41Z

> **stevenet skrev:**
>
> Då är inga sessioner satta. Har du session_start på den ursprungliga sidan? ;)
> 
> Du bör förövrigt escapa REMOTE_ADDR med.
> 
> $ip = db_espace($\_SERVER\['REMOTE_ADDR'\]);

Ber om ursäkt om jag har slösas på Er tid. Jag hade visst glömt bort "session_start();" överst, i all hast.  :r 
Nu verkar det fungera.  **Tack för all hjälp**.

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

## #17 — Guldstrand, 2008-01-02T18:53Z

Hmm...
Nu verkar inte kontrollen göras alls, helt plötsligt.   :o 

```php
<?php  
ob_start();
session_start();

error_reporting(E_ALL); 
ini_set("display_errors", "1");

include("mysql.php"); 

if (isset($_POST['submit'])){
   if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
      echo "FEL KOD";
   } else {
      echo "RÄTT KOD"; 
   }
   unset($_SESSION['anti_spam_code']);
} else {
   $_SESSION['anti_spam_code'] = rand(1000, 9999); 
}

if(trim($_POST['namn']) == "" ){
 print("<img src='img/utropstecken.png' alt=' Du måste skriva ditt namn! ' title=' Du måste skriva ditt namn! '>&nbsp;&nbsp;Du måste skriva ditt namn!"); 
} 

if(trim($_POST['inlagg']) == "" ){
 print("<img src='img/utropstecken.png' alt=' Du måste skriva något! ' title=' Du måste skriva något! '>&nbsp;&nbsp;Du måste skriva något!"); 
} 

$inlagg = db_escape($_POST['inlagg']);
$namn = db_escape($_POST['namn']);
$ort = db_escape($_POST['ort']);
$epost = db_escape($_POST['epost']);
$hemsida = db_escape($_POST['hemsida']); 
$ip = db_escape($_SERVER['REMOTE_ADDR']);

    $sql = "INSERT INTO gastbok(inlagg, namn, ort, epost, hemsida, ipadress, datum)
		VALUES('$inlagg', '$namn', '$ort', '$epost', '$hemsida', '$ip', NOW())";
    mysql_query($sql) or die (mysql_error());

	header("Location: gastbok.php");

//} 

?>
```

**EDIT:** Misstänker att det är "ob_start();" som spökar.
Om jag inte har det överst, får jag ett felmeddelande.

```php
Warning: Cannot modify header information - headers already sent by (output started at /home/var/www/****/demo/gastbok_post.php:12) in /home/var/www/****/demo/gastbok_post.php on line 42
```

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

## #18 — Guldstrand, 2008-01-02T19:23Z

Hittade en "bildkod" som verkar fungera, och är säkrare än att direkt skriva ut koden på sidan.
Men tror att det blir något fel vid kontrollen av formuläret.
Trots att jag INTE fyller i något, så sparas ändå infon i databasen.

Har detta nu:

```php
<?php 
session_start();

error_reporting(E_ALL); 
ini_set("display_errors", "1");

include("mysql.php"); 

if (isset($_POST['submit'])){
   if ($_SESSION['verification_code'] != $_POST['imagecode']) {
      print("<img src='img/utropstecken.png' alt=' Fel kod! ' title=' Fel kod! '>&nbsp;&nbsp;Fel kod!<br>");
   } 
   unset($_SESSION['verification_code']); 

if(trim($_POST['namn']) == "" ){
 print("<img src='img/utropstecken.png' alt=' Du måste skriva ditt namn! ' title=' Du måste skriva ditt namn! '>&nbsp;&nbsp;Du måste skriva ditt namn!<br>"); 
} 

if(trim($_POST['inlagg']) == "" ){
 print("<img src='img/utropstecken.png' alt=' Du måste skriva något! ' title=' Du måste skriva något! '>&nbsp;&nbsp;Du måste skriva något!<br>"); 
} 

$inlagg = db_escape($_POST['inlagg']);
$namn = db_escape($_POST['namn']);
$ort = db_escape($_POST['ort']);
$epost = db_escape($_POST['epost']);
$hemsida = db_escape($_POST['hemsida']); 
$ip = db_escape($_SERVER['REMOTE_ADDR']);

    $sql = "INSERT INTO gastbok(inlagg, namn, ort, epost, hemsida, ipadress, datum)
		VALUES('$inlagg', '$namn', '$ort', '$epost', '$hemsida', '$ip', NOW())";
    mysql_query($sql) or die (mysql_error());

	header("Location: gastbok.php");
}

?>
```

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

## #19 — Guldstrand, 2008-01-02T20:59Z

Ingen som vet vad jag har gjort för fel?  :(

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

## #20 — stevenet, 2008-01-02T21:32Z

> **stevenet skrev:**
>
> Då testar vi att dumpa datan så vi ser vad som går fel:
> 
>
>
> ```php
> if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
>     var_dump($_SESSION);
> }
> ```

Då går vi igenom denna procedur igen. Dumpa datan. :)

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

---

Tråden på webben: https://www.webforum.nu/amne/php/167716-hjälp-med-spamskydd  
Nästa sida: https://www.webforum.nu/amne/php/167716-hjälp-med-spamskydd/page2.md
