Voor een client heb ik een site gemaakt met een aantal formulieren. Nu heeft de client van zijn hostingbedrijf te horen gekregen dat er vanaf zijn site spam verstuurd wordt.

De formulieren moeten dus aangepast worden op de 1 of andere manier.

Heb tutorial doorgelezen http://www.phphulp.nl/php/tutorials/10/340/694/

maar hiervoor heb ik te weinig php kennis om alles goed aan te passen.

Wie kan mij helpen?? Liefst zo spoedig mogelijk, vergoeding in overleg!
@ Roos : wat wil je nu precies hebben?

Iemand die dit formulier kan aanpassen of indien nodig opnieuw aanmaken zodanig dat er geen spam meer verstuurd kan worden via het formulier.

Blijkbaar is de manier van formulieren maken waarop ik het tot nu toe deed niet voldoende en omdat ik niet alles tegelijk kan leren heb ik er nu voor gekozen om de (dacht ik) snelste weg te bewandelen en een (betaalde) oproep te plaatsen om het probleem op te lossen.

Ik heb de hoop wanneer ik 1 goed werkend (antispam) formulier aangeleverd krijg ik de rest van de formulieren die op die site staan (misschien) zelf kan aanpassen...

De code hierna is van Jan Koehoorn als antwoord van een tijdje geleden:


<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') 
    {
        // hier zit nog geen controle bij of er wel iets is ingevuld in de velden
        // dat kun je doen met bijv: if (empty ($_POST['naam']))
        $to = '[email protected]';  // zelf veranderen
        $subj = 'Via contactformulier';
        $msg = "
            Naam: '" . $_POST['naam'] . "'
            E-mail: '" . $_POST['email'] . "'
            Onderwerp: '" . $_POST['onderwerp'] . "'
            Bericht: '" . $_POST['bericht'] . "'
            ";
        $headers = 'From: contactformulier website';
        
        if (mail ($to, $subj, $msg, $headers))
        {
            $msg = '<p style="color: red;">De mail is verzonden</p>';
        }
        else
        {
            $msg = '<p style="color: red;">Het verzenden van de mail is mislukt</p>';
        }
    }
?>

Nu kun je overal waar je wilt dit doen:
<?php
    echo $msg;
?>

Hier heb je er een met wat validates (o.a. e-mail validate, en iig een waarde bij naam, email en vragen etc.)

Vergeet niet het volgende te veranderen:

- De action van de form te veranderen in send.php
- Email waar het heen moet (staat nu op [email protected]).
- Succes pagina (staat nu op succes.html)
- Error pagina (staat nu op error.html)

Maak een php bestand aan met de volgende code, en noem dit bestand: send.php
<?PHP
error_reporting(7);

function check_string($value, $low, $high, $mode, $optional)
{
 if ( (strlen($value) == 0) && ($optional === true) )
 {
  return true;
 } 
 elseif ( (strlen($value) >= $low) && ($mode == 1) )
 {
  return true;
 } 
 elseif ( (strlen($value) <= $high) && ($mode == 2) )
 {
  return true;
 } 
 elseif ( (strlen($value) >= $low) && (strlen($value) <= $high) && ($mode == 3) )
 {
  return true;
 } else {
  return false;
 }
}

function check_email($email, $optional)
{
 if ( (strlen($email) == 0) && ($optional === true) ) 
 {
  return true;
 } elseif ( eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email) )
 {
  return true;
 } 
 else 
 {
  return false;
 }
}

$FTGnaam = $_POST['naam'];
$FTGemail = $_POST['email'];
$FTGonderwerp = $_POST['onderwerp'];
$FTGbericht = $_POST['bericht'];

$validationFailed = false;

if ( (! check_string($FTGnaam, 1, 0, 1, false)))
{
 $validationFailed = true;
}

if ( (! check_email($FTGemail, false)))
{
 $validationFailed = true;
}

if ( (! check_string($FTGbericht, 1, 0, 1, false)))
{
 $validationFailed = true;
}

if ($validationFailed == true)
{
//Verander
 header("Location: error.html");
 exit;
}

//Verander hieronder jouwn naam en email, en het onderwerp van de email

$emailTo = '"Sabine" <[email protected]>';
 
$emailSubject = "Contact opgenomen via website";

//Klaar
$emailBody = "naam: $FTGnaam\n"
 . "email: $FTGemail\n"
 . "onderwerp: $FTGonderwerp\n"
 . "bericht: $FTGbericht\n"
 . "\n"
 . "";

$emailHeader = "From: [email protected]\n"
 . "Reply-To: [email protected]\n"
 . "MIME-Version: 1.0\n"
 . "Content-type: text/plain; charset=\"ISO-8859-1\"\n"
 . "Content-transfer-encoding: quoted-printable\n";

mail($emailTo, $emailSubject, $emailBody, $emailHeader);

//Verander  
header("Location: succes.html");
exit;

?>
Zit nu het tweede gedeelte van het formulier (Lizzy) te bestuderen.

Moet ik dit ook aanpassen?

$emailHeader = "From: [email protected]\n"

BTW Rooz het is lissy ^_-

ja dat lijkt mij wel of dit is je email adres?
Marthijn Hoiting schreef op 17.08.2006 23:40
Haha de kindjes willen geld bijverdienen, dan moet je toch echt bij de boer gaan werken op het land:D


Als je even terug leest zie je staan in mijn post:

Dit zal niet veel meer dan 5 minuten werk zijn. En kan dus makkelijk voor niks
Sorry lissy ;(

Ik twijfel gewoon aan alles momenteel (op php-gebied), ik dacht e.e.a. toe te kunnen passen maar het voelt momenteel of ik er helemaal niets meer van bak......
PHP Newbie schreef op 18.08.2006 10:25
[quote=Marthijn Hoiting schreef op 17.08.2006 23:40]Haha de kindjes willen geld bijverdienen, dan moet je toch echt bij de boer gaan werken op het land:D


Als je even terug leest zie je staan in mijn post:

Dit zal niet veel meer dan 5 minuten werk zijn. En kan dus makkelijk voor niks[/quote]

Zet dan hier wat neer in plaats van te blijven zeggen.
Zo help je Roos niet echt en zoals al eerder gezegd stellen wij het niet op prijs om middels PM of mail te gaan helpen.
@ Roos : zet is neer wat je tot nu toe hebt. We kunnen dan kijken waar we nog wat kunnen aanpassen en of helpen.
Het probleem onstaat dat je ongecontrolleerde waarden in de header van je email plaats.

In het voorbeeld, gepost door lissy, worden geen velden uit het formulier opgenomen in de header. Dit geeft altijd 100% veiligheid voor de betreffende mail() aanroep.

Wil je echter wel de waarden van velden uit het formulier opnemen, dan moet je deze waarden i.i.g checken op quotes, slashes en enters.


function escapeHeaders($string)
{
    $string = str_replace("\n", "", $string); // Verwijder \n
    $string = str_replace("\r", "", $string); // Verwijder \r
    $string = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $string)); // Escape slashes en quotes

    return $string;
}



Je header kan dan bijv. worden:


$header = "FROM \"" . escapeHeaders($name) . "\" <" . escapeHeaders($email) . ">";

Reageren