webForumDet fria alternativet

Problem med Cookies ( Till Spam Skydd )

PHPur PHP

15 svar · 366 visningar · startad av Simpa

Medlem sedan aug. 20002 992 inlägg
Frågan#1

Hej Hej, tänkte lägga in ett spam skydd i detta script:
http://simpa.aleborg.com/php/anonym/email.html

Formen i email.html:

<form action="email.php" method="post">
<br><b> Mottagarens Namn:</b> <br><input type="text" name="mnamn" size="30" class="text"><br>
<br><b> Mottagarens E-post: </b><br><input type="text" name="mmail" size="30" class="text"><br>
<br><b> Ditt Namn:</b> <br><input type="text" name="dnamn" size="30" class="text"><br>
<br><b> Din E-post: </b><br><input type="text" name="dmail" size="30" class="text"><br>
<br><b> Meddelande: </b><br><textarea name="meddelande" cols="30" rows="5" class="text">
</textarea><br><br>
<input type="submit" class="text" value="Skicka!"> <INPUT TYPE=RESET class="text" VALUE="Rensa alla fält!">
</form>

Kod i email.php

<?php
if ($dnamn == ""){
unset ($dnamn);
$dnamn="Anonym";
}
if ($dmail == ""){
unset ($dmail);
$dmail="Anonym@Anonym.nu";
}
if ($mnamn == "") 
echo "<b>Har inte mottagaren något namn?</b><br>Gå tillbaka och fyll i det: <a href=\"javascript:history.go(-1);\">Tillbaka! </a>";
elseif ($mmail == "")
echo "<b> Du måste ju fylla i mottagarens e-post adress
för att jag ska kunna skicka epostet :-)</b><br>Gå tillbaka och fyll i det: <a href=\"javascript:history.go(-1);\">Tillbaka! </a>";
elseif ($meddelande == "") 
echo "<b>Om du inte skriver något meddelande så blir det väl rätt svårt för personen att läsa?!</b><br>Gå tillbaka och fyll i det: <a href=\"javascript:history.go(-1);\">Tillbaka! </a>";
else {
echo("Ditt mail har skickats");
mail($mmail, "Meddelande från $dnamn till $mnamn", "$meddelande", "From: $dnamn
<$dmail>"); 
}
?>

Om jag löser det på detta sätt med Cookies, så blir det ju problem eftersom den inte är högst upp:

<?php
if ($dnamn == ""){
unset ($dnamn);
$dnamn="Anonym";
}
if ($dmail == ""){
unset ($dmail);
$dmail="Anonym@Anonym.nu";
}
if ($mnamn == "") 
echo "<b>Har inte mottagaren något namn?</b><br>Gå tillbaka och fyll i det: <a href=\"javascript:history.go(-1);\">Tillbaka! </a>";
elseif ($mmail == "")
echo "<b> Du måste ju fylla i mottagarens e-post adress
för att jag ska kunna skicka epostet :-)</b><br>Gå tillbaka och fyll i det: <a href=\"javascript:history.go(-1);\">Tillbaka! </a>";
elseif ($meddelande == "") 
echo "<b>Om du inte skriver något meddelande så blir det väl rätt svårt för personen att läsa?!</b><br>Gå tillbaka och fyll i det: <a href=\"javascript:history.go(-1);\">Tillbaka! </a>";
else {
if (isset($HTTP_COOKIE_VARS['NoSpamCookie'])) { 
echo "<b> För att förhindra spam så får du endast skicka ett meddelande var 3:e minut! </b>";
}else{
echo("Ditt mail har skickats");
mail($mmail, "Meddelande från $dnamn till $mnamn", "$meddelande", "From: $dnamn
<$dmail>"); 
$NoSpam = "NoSpam"; setcookie ("NoSpamCookie", $NoSpam, time() + 380); 
}
}
?>

Hmm, Ja nån som förstår vad jag menar och har nån ide hur jag kan lösa det? finns det något bättre sätt än Cookies?

Medlem sedan mars 20007 896 inlägg
#2
}else{
echo("Ditt mail har skickats");
mail($mmail, "Meddelande från $dnamn till $mnamn", "$meddelande", "From: $dnamn
<$dmail>"); 
$NoSpam = "NoSpam"; setcookie ("NoSpamCookie", $NoSpam, time() + 380); 
}

Borde vara:

}else{
setcookie ("NoSpamCookie", "NoSpam", time() + 380);
echo("Ditt mail har skickats");
mail($mmail, "Meddelande från $dnamn till $mnamn", "$meddelande", "From: $dnamn
<$dmail>"); 
}

setcookie() ska alltid användas innan någon output skickas till klienten.

Cookies är väl det bästa sättet, eller sessions.

Medlem sedan aug. 20002 992 inlägg
#3

Hmm, Testat med det .. får fortfarande..
Warning: Cannot add header information - headers already sent by (output started at e:\www\www.simpa.se\www\php\anonym\email.php:7) in e:\www\www.simpa.se\www\php\anonym\email.php on line 27

Medlem sedan mars 20007 896 inlägg
#4

Hur ser rad 27 ut?

Medlem sedan aug. 20002 992 inlägg
#5

$NoSpam = "NoSpam"; setcookie ("NoSpamCookie", $NoSpam, time() + 380); :l

Medlem sedan mars 20007 896 inlägg
#6

Flyttade du den raden som jag visade då? Alltså innan någon echo görs?

Medlem sedan mars 20007 896 inlägg
#7

Och jag skulle nog överväga att helt strunta i echo för att visa felmeddelanden, om jag var du. Eftersom att scriptet ändå ska dö, så kan du använda dig av die() - det är snyggare och man slipper dessa varningar:

<?php
if( $_COOKIE[ 'NoSpamCookie' ] == "NoSpam" )
     die( "<b>Du får bara skicka var tredje minut.</b>" );
if( trim( $meddelande ) == "" )
     die( "<b>Ditt pulver! Du glömde ju fylla i meddelandet...</b>" );
if( trim( $namn ) == "" )
     die( "<b>Du måste ju ange ditt namn.</b>" );

setcookie( "NoSpamCookie", "NoSpam", time()+380 );

if( mail( "min@email.nu", "Ämne", $meddelande, "From: " . trim( $namn ) . "\n" ) )
     echo "Meddelandet skickades";
else
     echo "Meddelandet skickas INTE!";
?>
Medlem sedan aug. 20002 992 inlägg
#8

die() fin fin funktion :)

Tack SPiN nu ska vi se om jag får igång allt!

Medlem sedan aug. 20002 992 inlägg
#9

Fortfarande problem med Cookien :(

<?php
if (isset($HTTP_COOKIE_VARS['NoSpamCookie'])) 
die ( "<b> För att förhindra spam så får du endast skicka ett meddelande var 3:e minut! </b>" );

if ($dnamn == ""){
unset ($dnamn);
$dnamn="Anonym";
}

if ($dmail == ""){
unset ($dmail);
$dmail="Anonym@Anonym.nu";
}

if ($mnamn == "") 
die ( "<b>Har inte mottagaren något namn?</b><br>Gå tillbaka och fyll i det: <a href=\"java script:history.go(-1);\">Tillbaka! </a>" );

if ($mmail == "")
die ( "<b> Du måste ju fylla i mottagarens e-post adress för att jag ska kunna skicka epostet :-)</b><br>Gå tillbaka och fyll i det: <a href=\"java script:history.go(-1);\">Tillbaka! </a>" );

if ($meddelande == "") 
die ( "<b>Om du inte skriver något meddelande så blir det väl rätt svårt för personen att läsa?!</b><br>Gå tillbaka och fyll i det: <a href=\"java script:history.go(-1);\">Tillbaka! </a>" );

$NoSpam = "NoSpam"; setcookie ("NoSpamCookie", $NoSpam, time() + 380); 

if ( mail($mmail, "Meddelande från $dnamn till $mnamn", $meddelande, "From: $dnamn <$dmail>") )
  echo " Mailet skickat :) ";
else 
 echo " Nåt vart fel, mailet vart inte skickat ";
?>

Warning: Cannot add header information - headers already sent by (output started at e:\www\www.simpa.se\www\php\anonym\email.php:7) in e:\www\www.simpa.se\www\php\anonym\email.php on line 30
Mailet skickat :)

Medlem sedan mars 20007 896 inlägg
#10

Du har inget mellanslag, eller radbrytning innan din första PHP-tagg ( Dvs. <?php )?

Medlem sedan aug. 20002 992 inlägg
#11

har iofs..
<html><head>
<title>WOOO!</title>
</head>
<body bgcolor="#000000" text="#CCCC33">
<font face="verdana" size="-2" >

Hur ska jag få in det på ett bra sätt då? :)

Medlem sedan aug. 20002 992 inlägg
#12

La in det så här:
<?php
echo " <html><head><title>Arbetar.. ;)!</title></head> ";
echo " <body bgcolor=\"#000000\" text=\"#CCCC33"> ";
echo " <font face=\"verdana' size=\"2\"> ";

Men då fick jag felet:
Parse error: parse error, unexpected '<' in e:\www\www.simpa.se\www\php\anonym\email.php on line 4

Medlem sedan mars 20007 896 inlägg
#13

Det får du dö med:

<?php
$htmlStart = "<html><head><title>WOOO!</title></head>";
$htmlStart .= "<body bgcolor=\"#000000\" text=\"#CCCC33\">";
$htmlStart .= "<font face=\"Verdana\" size=\"-2\">";

$htmlEnd = "</font></body></html>";

if( $_COOKIE[ 'NoSpamCookie' ] == "NoSpam" )
     die( $htmlStart . "<b>Du får bara rösta en gång var tredje minut!</b>" . $htmlEnd );
...
?>

Du får alltså inte ha nånting före PHP-taggen.

Medlem sedan aug. 20002 992 inlägg
#14

hmm oki Vad gör .= ?

Stort tack

Medlem sedan aug. 20002 992 inlägg
#15

Funkar fin fint, tror jag förstår vad . gör nu :)

Medlem sedan mars 20007 896 inlägg
#16

.= lägger till värdet efter uttrycket sist i variabeln före uttrycket.

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