webForumDet fria alternativet

Hjälp med "spamskydd"!

PHP

22 svar · 955 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

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

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:

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

Medlem sedan maj 20033 218 inlägg
#2

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

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

Medlem sedan juli 20041 271 inlägg
#3

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*

Medlem sedan juni 20014 421 inlägg
#4

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

Medlem sedan juli 20041 271 inlägg
#5

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?

Medlem sedan juni 20014 421 inlägg
#6

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

Medlem sedan juli 20041 271 inlägg
#7

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:

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"); 
}
Medlem sedan juli 20041 271 inlägg
#8

Har följande:

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

Medlem sedan juni 20001 251 inlägg
#9
<?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? :)

Medlem sedan juli 20041 271 inlägg
#10

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

Medlem sedan juni 20001 251 inlägg
#11

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

if (trim($_POST['anti_spam_field']) != $_SESSION['anti_spam_code']) {
    var_dump($_SESSION);
}
Medlem sedan juli 20041 271 inlägg
#12

stevenet skrev:

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

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  

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

//} 

?>
Medlem sedan juni 20001 251 inlägg
#13

Jag ser inte session_start(); någonstans?

Medlem sedan juli 20041 271 inlägg
#14

stevenet skrev:

Jag ser inte session_start(); någonstans?

Kom på det sen... :r

Nu fick jag:

array(0) { }
Medlem sedan juni 20001 251 inlägg
#15

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']);

Medlem sedan juli 20041 271 inlägg
#16

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.

Medlem sedan juli 20041 271 inlägg
#17

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

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

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
Medlem sedan juli 20041 271 inlägg
#18

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 
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");
}

?>
Medlem sedan juli 20041 271 inlägg
#19

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

Medlem sedan juni 20001 251 inlägg
#20

stevenet skrev:

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

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

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

267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)