webForumDet fria alternativet
Logga in / Bli medlem

Problem med text på bild

PHP

1 svar · 261 visningar · startad av rille77

Medlem sedan feb. 200476 inlägg
Trådstart#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";
  }
 }
}
Medlem 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.)

395 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
130 ms — deklarationer (db)
130 ms — hämta statistik (db)
131 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)