Avatar billede gudiksen Nybegynder
11. januar 2007 - 16:23 Der er 27 kommentarer og
1 løsning

PHP mailform med validering

Hej der ude,

Jeg har igennem længere tid forsøgt at finde et relativt simpelt php  script, der kan validere nogle ønskede fælter i min php mailform.

Jeg synes at have fundet en masse, men ingen af dem var særlige fleksible.

Mit problem er, at min mailform i dag ikke er beskyttet for robotter, hvilket kan resulterer i nogle massive angreb. Jeg har kigget lidt på nogle javascripts, men det beskytter mig ikke imod robotterne.

Jeg håber nogle kan hjælpe, og hvis det ønskes kan jeg paste min mailform jeg benytter i dag.
Avatar billede simplus Nybegynder
11. januar 2007 - 16:46 #1
Det er lidt svært at tage stilling til uden at have set koden, så ja, den ønsker jeg at se :-)
Avatar billede gudiksen Nybegynder
11. januar 2007 - 16:49 #2
Det skal lige nævnes at løsningen skal kunne valideres under strict doctype.
Avatar billede gudiksen Nybegynder
11. januar 2007 - 16:50 #3
Hej simplus

Jeg paster lige koden inden for 30min...
Avatar billede simplus Nybegynder
11. januar 2007 - 16:53 #4
Det er helt fint.
Avatar billede gudiksen Nybegynder
11. januar 2007 - 17:09 #5
<div id="contactcontent">
<?
$modtager = "email@email.dk";
$emne = "Fra WWW MailForm";
$helebesked = "Navn: ".$_POST['username']." \nTlf: ".$_POST['usertlf']." \nE-mail: ".$_POST['useraddr']." \n\nCollage storrelse: ".$_POST['stor']." \nAntal billeder: ".$_POST['bil']." \nLeveringsdato: ".$_POST['dd']." \n\nBesked: ".$_POST['comments']."";
$sendt = "";

if($_POST['useraddr'] == "") {
echo "
<form action='".$_SERVER['PHP_SELF']."' method='post'>
<fieldset>
<ul>

<li><label for='username'>Navn<em>*</em></label>
<input name='username' type='text' id='username' value='' tabindex='101' /></li>

<li><label for='useraddr'>Email<em>*</em></label>
<input name='useraddr' type='text' id='useraddr' value='' tabindex='102'/></li>

<li><label for='usertlf'>Telefon<em>*</em></label>
<input name='usertlf' type='text' id='usertlf' value='' tabindex='103'/></li>

<li><label for='stor'>Størrelse på collage</label>
<input name='stor' type='text' id='stor' value='' tabindex='104' /></li>

<li><label for='bil'>Antal billeder</label>
<input name='bil' type='text' id='bil' value='' tabindex='105' /></li>

<li><label for='dd'>Ønsket leveringsdato</label>
<input name='dd' type='text' id='dd' value='' tabindex='106' /></li>

<li><p class='bsk'>Besked<em>*</em></p>
<textarea name='comments' rows='6' id='comments' tabindex='107' cols='39'></textarea>
</li>

<li><input name='send' type='submit' tabindex='108' class='sndbt' value=' Send ' /></li>

</ul>
</fieldset>
</form>

";
} else {
if(mail($modtager, $emne, $helebesked, "From: ".$_POST['username']." - ".$_POST['firma']." (tlf: ".$_POST['usertlf'].") <".$_POST['useraddr'].">;")) 
echo "<h3>Din besked blev sendt...!</h3><p class='wid'>Jeg takker for din mail og vil besvare den hurtigst muligt! <br /><br />Med venlig hilsen <br />Gudiksen</p>"; }
?>

</div>
Avatar billede simplus Nybegynder
11. januar 2007 - 17:20 #6
Måske kan denne hjælpe dig på vej:

<div id="contactcontent">
<?php

if (isset($_POST[send])) {

    if (isset($_POST[username]) && isset($_POST[useraddr]) && isset($_POST[usertlf]) && isset($_POST[stor]) && isset($_POST[bil]) && isset($_POST[dd]) && isset($_POST[comments])) {

        if(mail($modtager, $emne, $helebesked, "From: ".$_POST['username']." - ".$_POST['firma']." (tlf: ".$_POST['usertlf'].") <".$_POST['useraddr'].">;")) {
            echo "<h3>Din besked blev sendt...!</h3><p class='wid'>Jeg takker for din mail og vil besvare den hurtigst muligt! <br /><br />Med venlig hilsen <br />Gudiksen</p>";
        }

    }else{
        echo "Et eller flere felter var efterladt tomme!";
    }

}

$modtager = "email@email.dk";
$emne = "Fra WWW MailForm";
$helebesked = "Navn: ".$_POST['username']." \nTlf: ".$_POST['usertlf']." \nE-mail: ".$_POST['useraddr']." \n\nCollage storrelse: ".$_POST['stor']." \nAntal billeder: ".$_POST['bil']." \nLeveringsdato: ".$_POST['dd']." \n\nBesked: ".$_POST['comments']."";
$sendt = "";

if($_POST['useraddr'] == "") {
echo "
<form action='".$_SERVER['PHP_SELF']."' method='POST'>
<fieldset>
  <ul>
    <li><label for='username'>Navn<em>*</em></label>
        <input name='username' type='text' id='username' value='' tabindex='101' /></li>

    <li><label for='useraddr'>Email<em>*</em></label>
        <input name='useraddr' type='text' id='useraddr' value='' tabindex='102'/></li>

    <li><label for='usertlf'>Telefon<em>*</em></label>
        <input name='usertlf' type='text' id='usertlf' value='' tabindex='103'/></li>

    <li><label for='stor'>Størrelse på collage</label>
        <input name='stor' type='text' id='stor' value='' tabindex='104' /></li>

    <li><label for='bil'>Antal billeder</label>
        <input name='bil' type='text' id='bil' value='' tabindex='105' /></li>

    <li><label for='dd'>Ønsket leveringsdato</label>
        <input name='dd' type='text' id='dd' value='' tabindex='106' /></li>

    <li><p class='bsk'>Besked<em>*</em></p>
        <textarea name='comments' rows='6' id='comments' tabindex='107' cols='39'></textarea></li>

    <li><input name='send' type='submit' tabindex='108' class='sndbt' value=' Send ' /></li>

  </ul>
</fieldset>
</form>
";
}
?>

</div>
Avatar billede simplus Nybegynder
11. januar 2007 - 17:20 #7
Udover det vil jeg lige anbefale følgene artikel: http://www.eksperten.dk/artikler/1019
Avatar billede gudiksen Nybegynder
11. januar 2007 - 19:18 #8
Hej simplus
Jeg vil teste dette senere i aften, på forhånd tak!
Avatar billede gudiksen Nybegynder
11. januar 2007 - 19:19 #9
Hej simplus
jeg har lige testet den hurtigt, men jeg kan trykke send uden nogle af felterne er udfyldt, hvor den så skriver "tak for beskeden..."
Avatar billede simplus Nybegynder
11. januar 2007 - 19:50 #10
Det er jo netop det den ikke burde. Så må det være fordi at alle variabler bliver sat af en eller anden grund, find denne linie:

    if (isset($_POST[username]) && isset($_POST[useraddr]) && isset($_POST[usertlf]) && isset($_POST[stor]) && isset($_POST[bil]) && isset($_POST[dd]) && isset($_POST[comments])) {

og erstat den med:

    if ($_POST[username] != "" && $_POST[useraddr] != "" && $_POST[usertlf] != "" && $_POST[stor] != "" && $_POST[bil] != "" && $_POST[dd] != "" && $_POST[comments] != "") {
Avatar billede simplus Nybegynder
11. januar 2007 - 19:50 #11
hvis det heller ikke virker, så må du lige printe alle POST værdier ud og lave en exit; efter dem.. så kan du lige se hvor det fejler..
Avatar billede gudiksen Nybegynder
11. januar 2007 - 22:46 #12
Hmmm, det kunne godt se ud som om det virkede - men - kun nogle af felterne skal valideres; Navn, Email, Tlf & Besked.

Skal jeg så benytte cookies for at den husker felterne, når beskeden ikke accepteres hvis man mangler et felt? Tror det vil give nogle en dårlig oplevelse, hvis de har "glemt" et felt, og alt hvad de har skrevet bliver nulstillet.
Avatar billede shooka Nybegynder
12. januar 2007 - 13:13 #13
<div id="contactcontent">
<?php

if (isset($_POST['send'])) {

    if (!empty($_POST['username']) && !empty($_POST['useraddr']) && !empty($_POST['usertlf']) && !empty($_POST['stor']) && !empty($_POST['bil']) && !empty($_POST['dd']) && !empty($_POST['comments'])) {

$modtager = "email@email.dk";
$emne = "Fra WWW MailForm";
$helebesked = "Navn: ".$_POST['username']." \nTlf: ".$_POST['usertlf']." \nE-mail: ".$_POST['useraddr']." \n\nCollage storrelse: ".$_POST['stor']." \nAntal billeder: ".$_POST['bil']." \nLeveringsdato: ".$_POST['dd']." \n\nBesked: ".$_POST['comments'];
$sendt = "";

        if(mail($modtager, $emne, $helebesked, "From: ".$_POST['username']." "<".$_POST['useraddr'].">")) {
            echo "<h3>Din besked blev sendt...!</h3><p class='wid'>Jeg takker for din mail og vil besvare den hurtigst muligt! <br /><br />Med venlig hilsen <br />Gudiksen</p>";
        }

    }else{
        echo "Et eller flere felter var efterladt tomme!";
    }

}

if(empty($modtager)) {
echo "
<form action='".$_SERVER['PHP_SELF']."' method='POST'>
<fieldset>
  <ul>
    <li><label for='username'>Navn<em>*</em></label>
        <input name='username' type='text' id='username' value='' tabindex='101' /></li>

    <li><label for='useraddr'>Email<em>*</em></label>
        <input name='useraddr' type='text' id='useraddr' value='' tabindex='102'/></li>

    <li><label for='usertlf'>Telefon<em>*</em></label>
        <input name='usertlf' type='text' id='usertlf' value='' tabindex='103'/></li>

    <li><label for='stor'>Størrelse på collage</label>
        <input name='stor' type='text' id='stor' value='' tabindex='104' /></li>

    <li><label for='bil'>Antal billeder</label>
        <input name='bil' type='text' id='bil' value='' tabindex='105' /></li>

    <li><label for='dd'>Ønsket leveringsdato</label>
        <input name='dd' type='text' id='dd' value='' tabindex='106' /></li>

    <li><p class='bsk'>Besked<em>*</em></p>
        <textarea name='comments' rows='6' id='comments' tabindex='107' cols='39'></textarea></li>

    <li><input name='send' type='submit' tabindex='108' class='sndbt' value=' Send ' /></li>

  </ul>
</fieldset>
</form>
";
}
?>

</div>
Avatar billede gudiksen Nybegynder
12. januar 2007 - 18:32 #14
Hej shooka

Tak for dit svar, jeg får desværre en fejl;
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /web/ny.php on line 110
Avatar billede gudiksen Nybegynder
12. januar 2007 - 18:33 #15
Linie 110 er ifølge dreamweaver:
        if(mail($modtager, $emne, $helebesked, "From: ".$_POST['username']." "<".$_POST['useraddr'].">")) {
Avatar billede simplus Nybegynder
12. januar 2007 - 22:46 #16
du skal fjerne ' indeni [ og ]
Avatar billede erikjacobsen Ekspert
12. januar 2007 - 22:49 #17
Ret
  if(mail($modtager, $emne, $helebesked, "From: ".$_POST['username']." "<".$_POST['useraddr'].">")) {
til
  if(mail($modtager, $emne, $helebesked, "From: ".$_POST['username']."<".$_POST['useraddr'].">")) {
Avatar billede gudiksen Nybegynder
12. januar 2007 - 23:25 #18
Så har jeg fået det til at virke! Nu validere den også kun de felter jeg ønsker...

Jeg håber denne løsning holder vand, og at jeg ikke behøves at tilføje "kontrol" af felter - som f.eks. at tlf skal indeholde 8 cifre.

En sidste ting jeg kunne være interesseret i;
Nå beskeden er sendt, vil jeg gerne man hopper ned i bunden af siden hvor kontaktformularen befinder sig – dette om den er sendt korrekt eller om man har glemt at udfylde noget.

Er dette muligt?

Formularen er HELT i bunden på siden og derfor upraktisk og usikkert om folk ser om meddelelsen er sendt eller ej…
Avatar billede gudiksen Nybegynder
12. januar 2007 - 23:28 #19
Hvordan er det jeg belønner med de her 30points? Det er ikke giv Karma vel?
Avatar billede simplus Nybegynder
13. januar 2007 - 12:29 #20
det med at den skal hoppe ned gør du ved at angive et id til meddelelsen f.eks. således:

<div id="hopned">Meddelelse her...</div>

også under <form> skriver du #hopned i action

du skal dog være opmærksom på at hvis meddelelsen står på en anden side end selve formularen så skal du bare skrive det i action, dvs: sidenavn.htm#hopned
Avatar billede gudiksen Nybegynder
13. januar 2007 - 17:53 #21
Super, så virker det sørme :)

<form action='".$_SERVER['PHP_SELF']."#contactcontent' method='post'>

Hvordan gir jeg de 30 points?
Avatar billede simplus Nybegynder
13. januar 2007 - 19:09 #22
Du behøver ikke give mig dem, jeg samler nemlig ikke på dem.

Men du kan give dig selv dem ved at trykke på svar ude i venstre side - lige ved siden af tekst feltet som du skriver kommentare i. og derefter skriver du bare et eller andet og trykker "Send".

Så kommer dit navn frem nederst på siden til venstre (der hvor du valgte 'svar' før), det markere du og trykker accepter.

Så har du fået dine point.
Avatar billede shooka Nybegynder
13. januar 2007 - 21:30 #23
Ja, jeg synes også du selv skal tage dem :)
Avatar billede gudiksen Nybegynder
14. januar 2007 - 00:45 #24
hehe, det gør jeg så - nu har jeg også forsøgt at bidrage et par steder hvor jeg lige kunne :)
Avatar billede shooka Nybegynder
14. januar 2007 - 01:17 #25
Simplus > Ang. det med at fjerne ' mellem [ og ], så er det ikke noget man skal. Det er nærmere en smagssag. Jeg putter dem ind for at være på den sikre side ;)
Avatar billede simplus Nybegynder
14. januar 2007 - 17:18 #26
Ja det fandt jeg lige ud af, jeg var åbenbart lidt forvirret da jeg sagde det, det burde nemlig heller ikke løse problemet nu hvor jeg tænker over det.

Det er taget til eftertanke og burde ikke kunne ske igen :-)
Avatar billede shooka Nybegynder
14. januar 2007 - 22:02 #27
Hehe, sådan var det heller ikke ment :)
Avatar billede gudiksen Nybegynder
01. februar 2007 - 15:17 #28
Hmmm guys,

Nu har jeg haft fred for spamrobotterne i noget tid, men de er vendt tilbage. Jeg tror det er nødvendigt med validering af eks. tlf. feltet.
Om der _skal_ være 8 tal, eller den kun kan godkendes med tal er jeg ikke helt sikker på. Hvis nogle kunne finde på at skrive +, skal det måske også med.

Har i mulighed for at hjælpe med at udvide scriptet lidt, således den validere tlf feltet med følgende: +,0,1,2,3,4,5,6,7,8,9 - og hvis den indeholder andre tal, så bliver den afvist med samme meddelse som ellers.

Eller har i et bedre forslag?
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