webForumDet fria alternativet

Problem med text på bild

1 svar · 261 visningar · startad av rille77

rille77Medlem sedan feb. 200476 inlägg
#1

Har stött på ett underligt fel med ett kontaktformulär i PHP.
Jag är absolut ingen PHP guru utan brukar hålla på med ASP så jag har absolut ingen aning om vad som kan vara galet här.

Jag har ett kontaktformulär där man ska fylla i en verifieringskod innan man skickar mailet som skydd mot spam, koden skrivs på en .png bild som visas på sidan.

Problemet är att koden skrivs inte på bilden första gången sidan laddas men om man däremot uppdaterar sidan så funkar allt som det ska.
Skulle vara tacksam för hjälp.

session_start();
define("TILL_ADRESS", "adress@domain.com");
 
function SetVerificationCode() {
 srand((double)microtime()*1000000);
 $string = md5(rand(0,9999));
 $verification_code = strtoupper(substr($string, 17, 5));
 $_SESSION['verification_code'] = $verification_code;
 return $verification_code;
}
 
if ($_GET['img'] == 'verificationcode') {
 header("Content-type: image/png");
 $im = ImageCreate(45, 20);
 $white = ImageColorAllocate($im, 0, 0, 0);
 $black = ImageColorAllocate($im, 255, 255, 255);
 SetVerificationCode();
 ImageFill($im, 0, 0, $black);
 ImageString($im, 4, 2, 2, $verification_code, $white);
 ImagePNG($im);
 ImageDestroy($im);
 exit;
}
 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
 $namn = $_POST['namn'];
 $epost = $_POST['epost'];
 $meddelande = $_POST['meddelande'];
 
 if ($_SESSION['verification_code'] == '')
  die("Verifieringskod inte satt, avslutar.");
 if ($_POST['kod'] != $_SESSION['verification_code']) {
  $err = "Felaktig verifieringskod. Var vänlig försök igen.";
  $field = "kod";
 } else {
  //Skydda från sk. e-mail injection via mail headers
  if ($epost != '' && preg_match ( "/^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/", $epost) ) {
   if(isset($namn)) {
    $text = "\nNamn: " . $namn;
    $text .= "\nE-post: " . $epost;
    $text .= "\nMeddelande: " . $meddelande;
    mail(TILL_ADRESS, "Kontaktformulär hemsida: " . $namn, $text, "From: <$epost>"); 
    
    SetVerificationCode();
    
    header("Location: /");
   }
  } else {
   $err = "Du har angett en ogiltig e-postadress!";
   $field = "ePost";
  }
 }
}
tydalMedlem sedan juni 20034 013 inlägg
#2

Låter som det skulle vara något sessionsrelaterat och sessioner behöver du ju inte använda inom samma phpanropp, utan det är ju när du ska skicka data mellan olika sidor. Så det skulle vi kunna ta bort genom att ersätta raden:
imagestring($im, 4, 2, 2, $verification_code, $white);
med:
imagestring($im, 4, 2, 2, SetVerificationCode(), $white);

(Och så får du ta bort raden SetVerificationCode(); lite högre upp.)

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