Beste forumleden

Ik probeer een contactformulier in mijn html-pagina effectief werkend te maken.
Echter blijft het al dagen bij proberen, en lukt het me ondanks vele tutorials niet.

Edit: Als er op de button geklikt wordt, wordt het script gewoon weergegeven.
Zou iemand mij kunnen helpen?

HIER STAAT DE PAGINA ONLINE
De gebruikte html voor mijn formulier staat hieronder beschreven:
<form action="form.php" method="post" enctype="multipart/form-data">
<h3 class="structural">Contactformulier</h3>
<dl>
<dt><label for="name">Naam:</label></dt>
<dd><input type="text" id="name" name="name" size="55"/></dd>
<dt><label for="email">Email:</label></dt>
<dd><input type="text" id="email" name="email" size="55"/></dd>
<dt><label for="subject">Onderwerp:</label></dt>
<dd><input type="text" id="subject" name="subject" size="55"/></dd>
<dt><label for="message">Bericht:</label></dt>
<dd><textarea id="message" name="message" cols="56" rows="15"></textarea></dd>
</dl>
<button type="submit" id="submit" name="submit">
<img src="img/icons/mail.ico" alt="verzenden"/> Verzenden&nbsp;
</button>
</form>


De gebruikte php heb ik in onderstaand formulier gezet.
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: Website De Kreeke';
$to = '[email protected]';
$subject = $_POST['subject'];

$body = "From: $name\n E-Mail: $email\n Message:\n $message";

if ($_POST['submit']) {
if (mail ($to, $subject, $body, $from)) {
echo '<p>Je bericht werd succesvol verzonden.</p><p><a href="index.html">Ga terug naar de website.</a></p>';
} else {
echo '<p>Er is iets foutgelopen. Gelieve terug te gaan en het bericht opnieuw te versturen.</p>';
}
}
?>



Alvast bedankt!
Misschien is het bij het vraagstellen ook handig om even aan te geven wat er mis is.

Dat je het al dagen probeert, is geen aanwijzing wát er misgaat.

Wel zie ik een aantal veiligheidsproblemen:
nooit rechtstreeks gebruikersinvoer in de mail-headers gooien.

Subject, en from-headers kunnen gemaninpuleerd worden.
Als iemand enters toevoegt aan het subject, kan hij zo je mailscript kapen en voor jouw rekening mails rondspammen

Ivo P op 11/04/2015 17:06:10

Misschien is het bij het vraagstellen ook handig om even aan te geven wat er mis is.

Dat je het al dagen probeert, is geen aanwijzing wát er misgaat.

Wel zie ik een aantal veiligheidsproblemen:
nooit rechtstreeks gebruikersinvoer in de mail-headers gooien.

Subject, en from-headers kunnen gemaninpuleerd worden.
Als iemand enters toevoegt aan het subject, kan hij zo je mailscript kapen en voor jouw rekening mails rondspammen




Als er op de button geklikt wordt, wordt het script gewoon weergegeven.
Ik ben student, heb (nog) geen enkele ervaring met php.
Ja dat klopt. Je gebruikt een if/else statement om een boodschap aan de gebruiker te tonen maar daarna zal het script gewoon altijd hetzelfde doorlopen.

Ik heb hier een script dat een naam en mailadres laat invullen, compleet met afhandeling en een redirect naar een bedankpagina. Advies is om met dit script te beginnen en dan stap voor stap uit te breiden.

Als je vragen hebt laat het dan weten.


<?php

// functie die de formuliervelden valideert en foutmeldingen aanmaakt
function validate($naam, $email)
{
    $errors = array();
    
    // validatieregels voor de naam
    if(strlen($naam) < 2)
        $errors[] = 'U heeft geen naam ingevuld.';
    
    // validatieregels voor het mailadres
    if(!strlen($email))
        $errors[] = 'U heeft geen email adres ingevuld.';
    else if(!filter_var($email, FILTER_VALIDATE_EMAIL))
        $errors[] = 'U heeft een ongeldig email adres ingevuld.';
    
    // geef de array met foutmeldingen terug
    return $errors;
}

// initialisatie van de variabelen
// Zorgt er voor dat variabelen altijd bestaan en een standaardwaarde hebben.
$naam = '';
$email = '';
$errors = array();

// indien het formulier verstuurd is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // overschrijf de standaardwaarden voor de waarden die ge-POST zijn
    $naam = $_POST['naam'];
    $email = $_POST['email'];
    
    // valideer de ingevulde gegevens
    $errors = validate($naam, $email);
    
    // als er dan geen fouten zijn stuur de gebruiker door naar een bedank pagina
    if(!count($errors))
    {
        // hier kun je nog een email versturen en/of de gegevens opslaan in de database
        
        header('Location: bedankt.html');
        exit;
    }
}
?>
<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>een titel</title>
    </head>
    <body>
        <ul id="errors">
        <?php
            foreach($errors as $error)
            echo '<li>' . $error . '</li>';
        ?>
        </ul>
        <form action="" method="post">
            <input type="text" name="naam" value="<?php echo $naam; ?>" />
            <input type="email" name="email" value="<?php echo $email; ?>" />
            <button type="submit">Verzenden</button>
        </form>
    </body>
</html>


[size=xsmall]Toevoeging op 11/04/2015 17:25:07:[/size]

Op regel 43/44 wordt de gebruiker doorgestuurd naar een andere pagina zodat het formulier niet nog eens getoond wordt als alles goed ingevuld is
Obelix en Idefix op 11/04/2015 17:08:16

Wordt php wel ondersteund?



Heb je het bestand als .php of .html opgeslagen?
ondersteund je hosting php?

Reageren