Avatar billede cyruse Nybegynder
17. oktober 2007 - 13:34 Der er 16 kommentarer og
1 løsning

Mail form i PHP

Hej jeg har et spørgsmål ang en mail form.

Jeg skal bruge en mail form til min hjemmeside.

Jeg har søgt lidt information rundt her på siden, men uden held. Søgte videre hos w3, men de eksempler de har virker slet ikke.

Nogen som kan komme op med en simpel form som sender en mail fra en hjemmeside. hvor bruger bare skal intaste sit navn, sin egen mailadresse og tekstboks.
Avatar billede michael_stim Ekspert
17. oktober 2007 - 13:38 #1
Avatar billede majbom Novice
17. oktober 2007 - 13:50 #2
<? //mail.php
if(isset($_REQUEST['name']) && isset($_REQUEST['email']) && isset($_REQUEST['content'])){
  $content = "<font size=\"4\" face=\"Verdana\">Fra: $_REQUEST[name] ($_REQUEST[email])</font><br><br><font face=\"Verdana\">$_REQUEST[content]";

  $headers = "From: ".$_REQUEST['email'].PHP_EOL;
  $headers .= "Content-Type: text/html; charset=ISO-8859-1 ".PHP_EOL;
  $headers .= "MIME-Version: 1.0 ".PHP_EOL;

  mail("din@mail.dk", "Mail fra dinside.dk", $content, $headers);
}
?>
<form action="mail.php" method="post">
navn: <input type="text" name="name">
email: <input type="text" name="email">
besked: <textarea name="content" cols="10" rows="10"></textarea>
<input type="submit" value="send">
</form>
Avatar billede marzman Nybegynder
17. oktober 2007 - 15:57 #3
Her er en lidt mere avendceret udgave, som tjekker om du har ud fyldt felterne.

<?php

$page = ""; // PHP siden savn
$til = ""; // Emailen den skal sende til

function error_flag($error, $field) {
    if($error[$field]) {
        print('<td class="error">');
    } else {
        print("<td>");
    }
}
   
   
   
function print_form() {
    global $error, $print_again, $navn, $mail, $besked, $page;
    ?>
   

   
   
<p style="line-height: 140%;">

____________________________ hvis du har noget tekst før formen ____________________________


</p>

    <?php
    if($print_again) {
        ?><div class="errormessage">Du glemte at udfylde visse felter - ret venligst de <span class="error">røde</span> felter.<br /><br />
<?php
       
        if($error['navn']) {
        echo "Du har ikke udfyldt <strong>Navn</strong> rigtigt!<br />";
        }
        if($error['mail']) {
        echo "Du har ikke udfyldt <strong>E-Mail</strong> ordenligt!<br />";
        }
        if($error['besked']) {
        echo "Du har ikke udfyldt <strong>Beskeden</strong> rigtigt!<br />";
        }
?>
       
       
        </div><br /><?
    }
    ?>
    <form action="<?php echo $page; ?>" method="post">
    <table border="0">
        <tr><? error_flag($error, "navn"); ?>Fornavn og efternavn:</td>
            <td><input type="text" name="navn" value="<?=$navn ?>" /></td></tr>
        <tr><? error_flag($error, "mail"); ?>Email:</td>
            <td><input type="text" name="mail" value="<?=$mail ?>" /></td></tr>
        <tr><? error_flag($error, "besked"); ?>Besked:</td>
            <td><textarea name="besked" cols="30" rows="5"><?=$besked ?></textarea></td></tr>
        <tr><td colspan="2" align="center">
            <input type="submit" name="submit" value="Send formular" /></td></tr>
    </table>
    </form>
    <?php
} // slut på funktionen print_form()
   
   

    //Henter oplysningerne hvis formen er sendt



function check_form() {
    global $error, $print_again, $mail, $navn, $besked;
   
    $navn = $_POST['navn'];
    $mail = $_POST['mail'];
    $besked = $_POST['besked'];
    $error['navn'] = false;
    $error['mail'] = false;
    $error['besked'] = false;
    $print_again = false;
   
   
    if($navn == "" || strlen($navn) < 5) // Hvis navnet er mindre end 5; {
        $error['navn'] = true;
        $print_again = true;
    }


    /* MAIL CHECK - function  */


  // First, we check that there's one @ symbol, and that the lengths are right
  if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $mail)) {
    // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
        $error['mail'] = true;
        $print_again = true;
  }
  // Split it into sections to make life easier
  $mail_array = explode("@", $mail);
  $local_array = explode(".", $mail_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])) {
        $error['mail'] = true;
        $print_again = true;
    }
  } 
  if (!ereg("^\[?[0-9\.]+\]?$", $mail_array[1])) { // Check if domain is IP. If not, it should be valid domain name
    $domain_array = explode(".", $mail_array[1]);
    if (sizeof($domain_array) < 2) {
        $error['mail'] = true;
        $print_again = true;
    }
    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])) {
        $error['mail'] = true;
        $print_again = true;
      }
    }
}
     
   
    if(strlen($besked) < 10) {
        $error['besked'] = true;
        $print_again = true;
    }
   
    if($print_again) {
        print_form();
    } else {
   

    $date = date("j F Y, H:i");   

            mail("$til",
            "$mail",
            "$besked\n\n Hilsen $navn\n\n email: $mail\n IP: " . $_SERVER[REMOTE_ADDR] .
            ", dato: $date");
        echo "<h2>Din besked er nu sendt</h2>";
        echo "<div>Tak for din interesse, vi vil kontakte dig hurtigst muligt.<br /><a href=\"index.php?id=6\"><- Tilbage</a></div>";
       
       
   
   
    }

} // slut på funktionen check_form()
//SEND MAIL!



//SEND MAIL SLUT!



if(isset($_POST['submit'])) {
    check_form();
} else {
    print_form();
}


?>


Håber du kan bruge det til noget hilsen Kenneth
Avatar billede mibu Nybegynder
17. oktober 2007 - 16:39 #4
Og denne her er en smule spamsikret :-) Den tjekker om der blive skrevet i det skjulte felt "subjekt" er der det, så sender den ikke.
Det skal (kan) laves over tre sider.

Side1 (din formular - mail.php)
<?php
session_start();
?>
        <table border="0" width="500">
    <tr>
<td>

<br>
<font face="Verdana" size="1">
<form method="post" action="mailsend.php">

<fieldset>
<legend>Husk at udfylde alle felter</legend>
        <table>
    <tr>
<td><font face="Verdana" size="1">
<label size="10" for="t1">Navn:</label></td><td>
<input size="59" maxlength="250" id="t1" type="text" name="name" /><br />
    </tr>
</td>

    <tr>
<td><font face="Verdana" size="1">
<label for="t2">Email:</label>
</td><td>
<input size="59" maxlength="250" id="t2" type="text" name="email" /><br />
    </tr>
</td>

    <tr>
<td><font face="Verdana" size="1">
<label for="t3">Emne:</label>
</td><td>
<input size="59" maxlength="250" id="t3" type="text" name="emne" /><br />
    </tr>
</td>

    <tr>
<td><font face="Verdana" size="1">
<label for="t4">Besked:</label>
</td><td>
<textarea id="t4" name="besked" rows="5" cols="45"></textarea><br />
    </tr>
</td>

    <tr>
<td><font face="Verdana" size="1">
<label for="t5">Kopi til dig?</label>
</td><td>
<input type="checkbox" id="t5" name="customer_copy" checked="checked" /><br />
    </tr>
</td>
        </table></font>

        <table>
    <tr>
<td><font face="Verdana" size="1">
<span class="ikkese"><label for="t7">Subject:</label>
<input id="t7" type="text" name="subject" /></span>

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

</form>

Og side2 (mailsend.php):
<?
if (!empty($_POST['subject'])) {
  header ("Location: sendt.php");
exit;
}
?>

<?php
if (isset($_POST['submit']))
{
if (!empty($_POST['name']) && // tjek, at der er skrevet et navn
!empty($_POST['email']) &&    // tjek, at der er skrevet en e-mail-adresse
!empty($_POST['emne']) &&  // tjek, at der er skrevet et emne
!empty($_POST['besked']) &&  // tjek, at der er skrevet en besked

// her følger sikringen mod spambotter
!strpos($_POST['name'], "ditdomain.dk") &&  // tjek, at dit domæne ikke er skrevet i feltet "navn"
!strpos($_POST['email'], "ditdomain.dk") && // tjek, at dit domæne ikke er skrevet i feltet "email"
!strpos($_POST['name'], "@") && // tjek, at der ikke er et @ i "navn"
!eregi("\r",$_POST['name']) &&  // tjek, at der ikke er "vogn-retur" i "navn"
!eregi("\n",$_POST['name']) &&  // tjek, at der ikke er "linjeskift" i "navn"
!eregi("\r",$_POST['email']) && // tjek, at der ikke er "vogn-retur" i "email"
!eregi("\n",$_POST['email']))  // tjek, at der ikke er "linjeskift" i "email"

// er alt ok, fortsættes med afsendelse af mailen
{
  $headers="From: ".$_POST['name']."<".$_POST['email'].">";
  if (@$_POST['customer_copy'])
  {
  $headers .= "\r\nBcc: ".$_POST['email'];
  }

  $timeZoneOffset = +1; //timezone where the user is (use an additional script to determine this variable)

  $body .= "Via ditdomain.dk er der sendt denne mail fra: " . $_POST['name'] . ":\r\n\r\n" . $_POST['besked'] ;
  if (@mail("din@mail.dk", strip_tags($_POST['emne']),
  stripslashes(strip_tags($body)), $headers))
  {
  echo "<font color='#000000' face='Verdana, Arial, Helvetica' size='2'><br><br><br>
  <p>Tak for din henvendelse. Jeg svarer så hurtigt som muligt.</p>";
  }
  else
  {
  echo "<font color='#000000' face='Verdana, Arial, Helvetica' size='2'><br><br><br>
  <p>Mailen blev ikke sendt. Der skete en fejl. Prøv igen!</p>";
  }
}
else
{
  echo "<font color='#000000' face='Verdana, Arial, Helvetica' size='2'><br><br><br>
  <p>Mailen kunne ikke sendes, alle felter skal udfyldes korrekt!</p>";
}
}
?>

Og side3 sendt.php(vises hvis det er en spambot der har udfyldt det skjulte felt):
Your mail is sendt. Thank you!

// men det er bare løgn, der blev ikke sendt noget.

Kan du bruge noget, er det dit :-)
Avatar billede thomasfricke Juniormester
18. oktober 2007 - 08:18 #5
<?php
$modtager = "webmaster@phpartikler.dk"; //Hvem skal have mailen?
$emne = "Et emnefelt"; //Emnefeltet

$besked = "<h1 style='background-color: #006699'>
            Dette er en html-mail
          </h1>";

$header  = "MIME-Version: 1.0" . "\r\n";
$header .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$header .= "from:afs@afsender.dk";

mail($modtager, $emne, $besked, $header); //Send!!
?>
Avatar billede cyruse Nybegynder
19. oktober 2007 - 15:11 #6
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\jan2\kontakt.php on line 28

hvad sker der her?
Avatar billede mibu Nybegynder
19. oktober 2007 - 15:22 #7
Se linie 28 i din fil > kontakt.php < Det er åbenbart der der er en fejl :-)
Avatar billede cyruse Nybegynder
22. oktober 2007 - 08:37 #8
Linie 28 er: mail($modtager, $emne, $besked, $header); //Send!!

Det skal dog siges at min kode ser sådan her ud.

<?php
$modtager = "cyrusy86@gmail.com"; //Hvem skal have mailen?
$emne = "Et emnefelt"; //Emnefeltet

$besked = "<h1 style='background-color: #006699'>
            Dette er en html-mail
          </h1>";

$header  = "MIME-Version: 1.0" . "\r\n";
$header .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$header .= "from:afs@afsender.dk";

mail($modtager, $emne, $besked, $header); //Send!!
?>
<form action="kontakt.php" method="post">
  <p>navn:
    <input type="text" name="name">
  </p>
  <p>
    email:
    <input type="text" name="email">
  </p>
  <p>
    besked:
      <textarea name="content" cols="30" rows="10"></textarea>   
        </p>
  <p>
    <input type="submit" value="send">
        </p>
</form>
Avatar billede majbom Novice
22. oktober 2007 - 08:48 #9
jeg går ud fra at serveren er installeret på din egen maskine...

har du en mailserver installeret på din maskine også?

der må stå i din php.ini at den skal bruge localhost til mailserver, og den kan den ikke connecte til (Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini)
Avatar billede cyruse Nybegynder
22. oktober 2007 - 08:56 #10
okay den fil har jeg været inde i. men kan ikke ummildbart finde det jeg skal rette derinde..?
Avatar billede majbom Novice
22. oktober 2007 - 09:26 #11
har du prøvet at søge efter "localhost" i php.ini?
Avatar billede cyruse Nybegynder
22. oktober 2007 - 09:32 #12
Det eneste der er i den fil med localhost er:

[mail function]
; For Win32 only.
SMTP = localhost

; For Win32 only.
sendmail_from = you@yourdomain

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_paramaters =
Avatar billede majbom Novice
22. oktober 2007 - 13:04 #13
ja der står SMTP jo til localhost, så din mail(); prøver at sende via port 25 på din maskine, og hvis du ikke har en mail-server installeret, vil den naturligvis melde fejl...

du kan evt. bruge din udbyders SMTP-server...
Avatar billede cyruse Nybegynder
24. oktober 2007 - 22:30 #14
Jeps nu fungere det sq.. takker splazz.. vil du have dine point?
Avatar billede majbom Novice
25. oktober 2007 - 08:10 #15
medmindre du har brugt min mail-form, er det vel ikke kun mig der skal have point?
Avatar billede mibu Nybegynder
25. oktober 2007 - 10:59 #16
cyruse kommentar af 22/10-2007 08:37:16
Fejl i linie 28! - med tilhørende kode ligner meget en splazz model :-)
Avatar billede cyruse Nybegynder
26. oktober 2007 - 09:33 #17
det er kun din mailform..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester