Visa ett inlägg
Oläst 2008-07-15, 10:52 #16
EmilIsbergs avatar
EmilIsberg EmilIsberg är inte uppkopplad
Medlem
 
Reg.datum: Mar 2007
Inlägg: 106
EmilIsberg EmilIsberg är inte uppkopplad
Medlem
EmilIsbergs avatar
 
Reg.datum: Mar 2007
Inlägg: 106
Det jag skulle göra är att skriva skriptet på ett något annat sätt.

Kod:
<?php

// http://www.phpit.net/code/valid-email/
function valid_email($email) {
 // First, we check that there's one @ symbol, and that the lengths are right
 if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
  // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
  return false;
 }
 // Split it into sections to make life easier
 $email_array = explode("@", $email);
 $local_array = explode(".", $email_array[0]);
 for ($i = 0; $i < sizeof($local_array); $i++) {
   if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\|\")]{0,62}\"))$", $local_array[$i])) {
   return false;
  }
 } 
 if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
  $domain_array = explode(".", $email_array[1]);
  if (sizeof($domain_array) < 2) {
    return false; // Not enough parts to domain
  }
  for ($i = 0; $i < sizeof($domain_array); $i++) {
   if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) {
    return false;
   }
  }
 }
 return true;
} 

// liten egen hjälpfunktion
function pvar($var)
{
 $got = $_POST[$var];
 // jag använder htmlentities som man kan läsa om på http://se2.php.net/htmlentities
 $got = htmlentities($got);

 // alternativt borde man kunna använda något av följande
 // http://se.php.net/manual/en/function.strip-tags.php
 // http://se.php.net/manual/en/function.htmlspecialchars-decode.php
 // http://se.php.net/manual/en/function.addslashes.php
 return $got;
}

$to = "[email protected]";
$subj = "Hemsidesinfo";
$from = pvar("email");
$fname = pvar("name");
$msg = "<b>Personnummer:</b> ". pvar("persnr")."\n".
"<b>Namn:</b> ". pvar("name")."\n".
"<b>Adress:</b> ". pvar("adress")."\n".
"<b>Postnummer:</b> ". pvar("postnr")."\n".
"<b>Ort:</b> ". pvar("ort")."\n".
"<b>Epost:</b> ". pvar("email")."\n".
"<b>Telefon:</b> ". pvar("tel")."\n".
"<b>Bild:</b> ". pvar("bild")."\n".
"<b>Antal:</b> ". pvar("antal")."\n".
"<b>Format:</b> ". pvar("format")."\n".
"<b>Meddelande:</b> ". pvar("message")."\n".
"<b>Godkänd:</b> ". pvar("agree")."\n".
"\n";

if (!valid_email($from))
 echo "<h2>Felaktigt formulärdata.</h2>Kontrollera att uppgifterna är korrekt ifyllda.";
elseif (mail($to, $subj, wordwrap(strip_tags($msg),70), "From: \"$fname\" <$from>")
 echo nl2br("<h2>Din beställning har nu skickats till oss! Kopian på beställningen ser du nedan, är det något som inte stämmer, kontakta oss snarast!</h2>\n\n$msg");
else
 echo "<h2>Det gick inte att skicka ditt meddelande.</h2> Var god försök senare.";

?>
Jag gjorde följande:
  • "Presonnummer" och "Kompian"
  • Visa samma sak som skickas (bra rekommendation generellt och minskar missförstånd vid felsökning)
  • Få överskådliga variabler
  • Undvik att skriva ut e-postadressen meddelandet skickas till (onödigt för besökaren som skickat formuläret plus att det kan användas för skräppost)
  • Undvik att upprepa kod (enklare att ändra och lägga till om man använder egna hjälpfunktioner)
  • Försök att validera att man faktiskt får något som liknar en e-postadress.
  • Undvik att "lita" på det kunden skickar. (http://blogg.loopia.se/?p=68)
  • Använd example.org (testdomän) istället för adress.se (ägs av PMG Media Group AB)
  • Ange en ärenderad som är specifik för just detta formulär (gör det enklare att särskilja från annan e-post och formulär)
  • Radbryt om rader överstiger 70 tecken (http://se.php.net/manual/en/function.wordwrap.php)

Om du använder dig av UNIX-server hos oss eller någon annan bör du dessutom lägga till ett fjärde fält till mail()-funktionen:
Kod:
elseif (mail($to, $subj, strip_tags($msg), "From: \"$fname\" <$from>","-f$from")
Notera dock att jag inte på något sätt har testat ovanstående skript och att inget ansvar tas för eventuella fel i skriptet.
EmilIsberg är inte uppkopplad   Svara med citatSvara med citat