Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Palautelomake arpovalla spamsuojauksella

nerootto [07.09.2009 15:58:42]

#

Tämä on toimiva palautelomake. Toimii PHP5 alustalla.
Omaisuudet:
- Numerospam suojaus, joka arpoo joka kerta numeron.
- Kenttien rajoitukset.
- Ottaa ip:n, hostin, selaimen ja ajan.
- Monipuoliset asetukset

Zip paketissa saa nopeasti:
http://kalahabbo.jouluserver.com/omakala/nerootto@naftis.com/palaute.zip

<?php
$no = rand(10, 99);
setcookie("number", $no, time() + 60 * 60); // Tallennetaan spam numero evästeihin.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" lang="fi">
<head>

    <title>Palautelomake</title>

</head>

<body>

    <h1>Palautelomake</h1>

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

            <input type="hidden" name="Tyyppi" value="PALAUTE" />

            <fieldset><legend>Palautteen tiedot</legend>

                Nimesi:<br />
                <input type="text" name="nimi" size="30" maxlength="50" /></p><br/>

                Otsikko<br />
                <input type="text" name="otsikko" id="otsikko" size="30" maxlength="50" /></p>

                <p><label accesskey="T" for="teksti">Palaute:</label><br />

                    <textarea name="teksti" cols="70" rows="9"></textarea><br />

                </p>

            </fieldset>

            <fieldset><legend>Vastaus</legend>

                Sähköpostiosoitteesi:<br/>
                <input type="text" name="email"/></p>

            </fieldset>

            <img src="kuva.php?no=<?php echo $no; ?>"><br/>
            <input type="text" name="spam" size="5" maxlength="2" />
                        Kirjoita kuvan numerot</p>


            <p>
                <input type="submit" value="Lähetä palaute" name="submit" id="submit" />
                <input type="reset" value="Tyhjennä kentät" name="reset" id="reset" />
            </p>


    </form>


</body>
</html>

kasittely.php

<?php

/* Palautelomake
Tekijä: nerootto
Muuttaa voi vapaasti. */

// Määritetään asetukset

$emails = "gg@nj.fi"; // Tähän sähköpostisi
$onnistui = "Viestin lähetys onnistui.";  // Onnistumisen viesti
$potsikko = "Palaute"; // Viestin otsikko
$virhe = "Jokin kenttä on virheellinen."; // Jos jokin on virheellinen kenttä
$spam = "Vastasit väärin spamkysymykseen!"; // Jos späm kysymys meni väärin.

/* Aloitetaan käsittely.
Ei tarvitse kajota. */

    // Tarkastetaan spam
    if($_POST["spam"]   != $_COOKIE["number"])
        exit($spam);

    /* Tuetaan PHP5 muuttamalla kenttiä */

    $nimi = $_POST['nimi'];
    $otsikko = $_POST['otsikko'];
    $teksti = $_POST['teksti'];
    $vastaus = $_POST['vastaus'];
    $email = $_POST['email'];

        /* Tarkastetaan kentät */

    if (strlen($nimi) <2)
        exit ($virhe);
    if (strlen($nimi) >50)
        exit ($virhe);
    if (strlen($otsikko) <3)
        exit ($virhe);
    if (strlen($otsikko) >50)
        exit ($virhe);
    if (strlen($teksti) <10)
        exit ($virhe);
    if (strlen($teksti) >5100)
        exit ($virhe);
    if (strlen($email) >51)
        exit ($virhe);
        if (strlen($email) <5)
        exit ($virhe);



    $IP = $_SERVER['REMOTE_ADDR'];  // Lähettäjän IP
    $Host = gethostbyaddr($_SERVER['REMOTE_ADDR']);  // Palvelin
    $Selain = $_SERVER['HTTP_USER_AGENT'];   // Selain
    $aika = date('d.m.Y H:i:s'); // Aika

 /* Aloitetaan sähköpostin lähetys */

@mail("$emails", "$potsikko","
Otsikko: $otsikko

Nimi: $nimi
Sähköposti: $email

Palaute:

$teksti


IP: $IP
Selain: $Selain
Host: $Host
Aika: $aika

","From: $email\r\n"."Reply-To: $email");


print $onnistui; // printtaa unnistumisen

?>

kuva.php

<?php
$no = $_GET['no'];
header("Content-type: image/png");

$kuva = imagecreate(100, 25);

$tausta = imagecolorallocate($kuva, 255, 255, 255);
$musta = imagecolorallocate($kuva, 255, 0, 0);

imagestring($kuva, 5, 2, 2, $no, $musta);

imagepng($kuva);
imagedestroy($kuva);
?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta