Brugere lige nu: 1 Hjemmesideskolen - Formular til php-formmail

Formular til php-formmail

Siden er opdateret 28. 2. 2009

Herunder ser du en formular, der fungerer via et php-script: Når brugere klikker på Send mail, sender formularen det indtastede til et phpscript på serveren. Her sker den videre ekspedition (heri ligger modtagerens emailadresse - bekvemt uden for spamrobotternes rækkevidde).

Ophavsmand til nedenstående verifikationskode er Dan Storm

Dette script kræver, at et levende menneske udfylder formularen, da en spambot ikke formår at aflæse den verifikationskode, der er indkopieret i et billede.

Husk at udfylde alle felter





Indtast kode for
at sende mail
auth
       

Da formularen indeholder php-kode, skal formularsiden naturligvis hedde noget med .php, da det ellers ikke vil virke.

<form method="post" action="sender.php">

<fieldset>
<legend>Husk at udfylde alle felter</legend>

<label for="t1">Navn:</label>
<input id="t1" type="text" name="name" /><br />

<label for="t2">Email:</label>
<input id="t2" type="text" name="email" /><br />

<label for="t3">Emne:</label>
<input id="t3" type="text" name="subject" /><br />

<label for="t4">Besked:</label>
<textarea id="t4" name="message" rows="10" cols="49"></textarea><br />

<label for="t5">Kopi til dig?</label>
<input type="checkbox" id="t5" name="customer_copy" checked="checked" /><br />

<label for="auth">Verifikation:</label>
<span style="float:left;margin-right=10px;">
<input type="password" id="auth" name="auth" />
<br />Indtast kode for<br />at sende mail!
</span>
<img src="verify.php" alt="auth" /><br />

<label for="t6"> </label><input id="t6" type="submit" name="submit" value=" Send mail " />
&nbsp; &nbsp; <input type="reset" value=" Slet alt " />
</fieldset>
</form>

Det php-script (verify.php), som genererer den kode, der skal indtastes og gengiver koden på grafisk form - ser sådan ud:

<?php
session_start();

if(isset($_SESSION['verify'])) {
  unset($_SESSION['verify']);
}

$str = substr(strtoupper(md5(uniqid("w"))), 0, 5);

$_SESSION['verify'] = $str;

$im = ImageCreateFromPNG("verify.png"); // Definer baggrundsgrafik
$sort = ImageColorAllocate($im,0,0,0);  // Definer tekstfarve - rgb-værdier
ImageTTFText ($im,32,5,6,45,$sort,"./verdana.ttf",$str); // Definer fontfil -
    // Tallene i parentesen herover betyder:
    // 32 = fontstørrelse i px
    // 5 = rotation i grader
    // 6 = afstand i px fra venstre billedkant til tekst
    // 45 = afstand i px fra billedtop til tekstlinje

header("Content-type: image/png");
ImagePNG($im);
ImageDestroy($im);

?>

Det en god ide, hvis du benytter en font, som ikke er en helt almindelig kedelig 'standardfont' - jeg har ganske vist i eksemplet valgt verdana. Det er vigtigt, at teksten i koden bliver udskrevet med samme farve som stregerne i baggrunden.

Derved gør du det vanskeligere for en spambot i kombination med et OCR-program at aflæse koden og indsætte denne i kodefeltet.

Upload den valgte fontfil til samme mappe på webserveren, som verify.php ligger i.

Her ser du den brugte baggrundsgrafik til verifikationskoden. Stregerne er vigtige for at undgå at koden kan aflæses af robotter.

Gem billedet i samme mappe som filen verify.php

Den side, som skal modtage og behandle data fra formularen, skal øverst - før noget andet - have indsat denne kode:

<?php
session_start();
?>

Kald siden sender.php. Det php-script, der behandler det indtastede i formularen og sender det til modtageren (dig), indsætter du i <body></body> på siden:

<?php
if (isset($_POST['submit'])) {
 if($_SESSION['verify'] == strtoupper($_POST['auth'])) {
  if (!empty($_POST['name']) && !empty($_POST['subject']) &&
  !empty($_POST['email']) && !empty($_POST['message'])) {
   $headers="From: ".$_POST['name']."<".$_POST['email'].">";
   if (@$_POST['customer_copy']) {
    $headers .= "\r\nBcc: ".$_POST['email'];
   }
   $body .= "Meddelelse den " . date("d/m y") . " kl. " . date("G:i") . " fra " . ($_SERVER['REMOTE_ADDR']) . "\r\n" . "Navn: " . $_POST['name'] . "\r\n" . "Mail: " . $_POST['email'] . "\r\n" . "Emne: " . $_POST['subject'] . "\r\n\r\n" . "Besked: " . "\r\n" . $_POST['message'];
   if(@mail("dit.navn@dit_domain.dk", strip_tags($_POST['subject']),
   stripslashes(strip_tags($body)), $headers)) {
    echo "<p>Tak for din henvendelse. Jeg svarer så hurtigt som muligt.</p>";
   }
   else {
    echo "<p>E-mailen blev ikke sendt. Der skete en fejl. Prøv igen!</p>";
   }
  }
  else {
   echo "<p>Alle felter skal udfyldes!</p>";
  }
 }
 else {
  echo '<p>Desværre, verifikationskoden kunne ikke godkendes!</p>';
 }
}
?>

Kodelinjen if($_SESSION['verify'] == strtoupper($_POST['auth'])) { tjekker, om der er blevet indtastet korrekt verifikationskode.

Kodelinjen if (@$_POST['customer_copy']) tjekker, om afsenderen ønsker en kopi af den sendte mail og den efterfølgende kodelinje $headers .= "\r\nBcc: ".$_POST['email'] sender i så fald denne mail-kopi til den email-adresse, som afsenderen har indtastet.

I ottende kodelinje udskifter du dit.navn@dit_domain.dk med din egen mail-adresse.

Valid XHTML og CSS / Copyright © Hjemmesideskolen september 2004
Hjemmesideskolen
Du er her: Forsiden - scripts - Formular til php-formmail
Brugere lige nu: 1
Home Mail