Avatar billede minus Nybegynder
04. november 2008 - 20:47 Der er 4 kommentarer

captha til mailform

Hej eksperter,

Der er sket det at en spambot har fanget min mailformular på min hjemmeside og derved begyndt at spamme mig.

Af den grund kunne jeg godt tænke mig en mailform af en art til min formular, så jeg undgår at modtage disse mails.

Min kode ser sådan ud nu:

-----------
kontakt.php


<form method="post" action="mailform.php">
    <div class="kontakt">
        <div class="kontakttekst">Navn*</div>
            <div class="kontaktbox">
                <input type="text" name="navn" id="navn" size="40" />
        </div>
    </div>
    <div class="kontakt">
        <div class="kontakttekst">Email*</div>
            <div class="kontaktbox">
                <input type="text" name="mail" id="mail" size="40" />
        </div>
    </div>
    <div class="kontakt">
        <div class="kontakttekst">Emne*</div>
            <div class="kontaktbox">
                <input type="text" name="emne" id="emne" size="40" />
        </div>
    </div>
    <div class="kontakt">
        <div class="kontakttekst">Besked*</div>
            <div class="kontaktbox">
                <textarea name="besked" id="besked" rows="8" cols="40" ></textarea>
        </div>
    </div>
      <div class="kontakt">
        <div class="kontakttekst"></div>
            <div class="kontaktbox">
                <input type="submit" value="Send" />
        </div>
    </div>
</form>
<br /><br />
<div class="kontakt" style="font-size:10px;">*Skal udfyldes.</div>


----

mailform.php

<?php
$name = $_POST['navn'] ;
$email = $_POST['mail'] ;
$subject = $_POST['emne'] ;
$message = $_POST['besked'] ;
mail( "email@domænet.her", "Retard.dk - Besked fra $name angående $subject",
$message, "From: $email" );
echo "Din besked er hermed sendt. Jeg vil vende tilbage hurtigst muligt.";
?>

-------------

Jeg har tilføjet valideringer af formularen via javascript, info skal indtastest korrekt. Men det hjælper intet viser det sig.

Hvis nogen kan hjælpe med at indsætte en simpel captcha af en art, ville det være til stor hjælp :)

Mange tak på forhånd.
Avatar billede showsource Seniormester
05. november 2008 - 01:35 #1
Cirkus:

<?php
session_start();

$_SESSION["hiddenfelt"] = "php_".rand();
?><html><head><title>No spam</title>
</head>
<body>


<form method="post" action="mailform.php">
<input type="hidden" name="<?php echo $_SESSION["hiddenfelt"]; ?>">

    <div class="kontakt">
        <div class="kontakttekst">Navn*</div>
            <div class="kontaktbox">
                <input type="text" name="navn" id="navn" size="40" />
        </div>
    </div>
    <div class="kontakt">
        <div class="kontakttekst">Email*</div>
            <div class="kontaktbox">
                <input type="text" name="mail" id="mail" size="40" />
        </div>
    </div>
    <div class="kontakt">
        <div class="kontakttekst">Emne*</div>
            <div class="kontaktbox">
                <input type="text" name="emne" id="emne" size="40" />
        </div>
    </div>
    <div class="kontakt">
        <div class="kontakttekst">Besked*</div>
            <div class="kontaktbox">
                <textarea name="besked" id="besked" rows="8" cols="40" ></textarea>
        </div>
    </div>
      <div class="kontakt">
        <div class="kontakttekst"></div>
            <div class="kontaktbox">
                <input type="submit" value="Send" />
        </div>
    </div>
</form>
<br /><br />
<div class="kontakt" style="font-size:10px;">*Skal udfyldes.</div>

</body></html>

og

<?php
session_start();

if(isset($_SESSION["hiddenfelt"], $_POST[$_SESSION["hiddenfelt"]])) {

$name = $_POST['navn'] ;
$email = $_POST['mail'] ;
$subject = $_POST['emne'] ;
$message = $_POST['besked'] ;
mail( "email@domænet.her", "Retard.dk - Besked fra $name angående $subject",
$message, "From: $email" );
echo "Din besked er hermed sendt. Jeg vil vende tilbage hurtigst muligt.";

}

?>
Avatar billede showsource Seniormester
05. november 2008 - 01:36 #2
Hov, efter linien med:
if(isset($_SESSION["hiddenfelt"], $_POST[$_SESSION["hiddenfelt"]])) {

skal selvf. en unset() !!!!!

if(isset($_SESSION["hiddenfelt"], $_POST[$_SESSION["hiddenfelt"]])) {
unset($_SESSION["hiddenfelt"]);
Avatar billede minus Nybegynder
05. november 2008 - 21:36 #3
showsource --> Jeg ser ikke noget anderledes inde på min side. Men hvad er det din kode gør på formularen?

Ved ikke om det var forkert af mig at gøre... men ændrede det sidste til følgende:

if(isset($_SESSION["hiddenfelt"], $_POST[$_SESSION["hiddenfelt"]]))
unset($_SESSION["hiddenfelt"]); {

er det korrekt eller forkert gjort? :) (flyttede på tuborgparentesen)
Avatar billede showsource Seniormester
06. november 2008 - 13:57 #4
Ja, det er forkert!

Ved at bruge sessions, kan man gemme info fra den ene side til den anden.

Sammen med rand() bliver et hiddenfelt navngivet forskelligt ved hver load af siden.
Navnet registreres med sessions.

Siden der postes til bruger også sessions, og tjekker om $_SESSION["hiddenfelt"] er sat, og er den det, om der også er sat en $_POST[$_SESSION["hiddenfelt"]]
Hvis det er tilfældet, så er post ok, det er ikke en spamrobot.

Derudover bør du nok tjekke på $_POST["email"] at der ikke forsøges at sende spam ud.
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