Logisch...
De print_r() functie is vooral bedoeld voor ontwikkeling, zodat je kan zien wat er in een array zit. Op je 'live site' behoor je dit ook niet te gebruiken, en netjes de juiste $_POST waardes te echo'en, of je array met foreach door te lopen. Het boeit je bezoekers echt niks dat je een array gebruikt, en wat er in verpakt zit.
Dus als je de waardes los wilt tonen: $_POST['naam'], $_POST['emailadres'] etc....
Ik neem aan dat je deze basis hopelijk wel kent, lees het anders eens rustig door.
Nog een advies: Plaats na een location-header een exit();, want je script moet dan ook stoppen, en geen andere dingen uitvoeren.
<?php
$message = '
<!DOCTYPE html>
<html lang="nl" xml:lang="nl" xmlns="http://www.w3.org/1999/xhtml">
<head>';
?>
Enzovoort.
Maak er dus een volledige pagina van die correcte html bevat.
Als het niet al te fancy hoeft kun je ook gewoon "platte tekst" gaan met wat line breaks:
<?php
$message =
"Naam: {$_POST['naam']}\n" .
"E-mailadres: {$_POST['emailadres']}\n" .
"Bericht:\n\n{$_POST['bericht']}"
mail("[email protected]", "Mail vanaf de website", $message);
header('Location: bedankt.html');
?>
Voordeel is dat je geen gedoe hebt met htmlspecialchars(), geen extra headers, enz. Note: ik ben er wel even vanuit gegaan dat alle velden in de $_POST bestaan.
Ze bestaan, maar het is wel zo netjes om te controleren of je het formulier via POST verstuurd hebt.
<?php
if($_POST['REQUEST_METHOD'] == "POST") {
// verstuurd via POST method
} else {
// niet via POST verstuurd.
}
?>
Daarmee bestaat het veld "naam" toch; of zie ik dat verkeerd?
Bij "normaal" gebruik zal het veld zeker bestaan. Maar alles wat client-side gebeurt ("in de browser") kan gemanipuleerd worden. Ondanks dat je dus een POST binnen krijgt kan het dus zijn dat er velden ontbreken, andere velden zijn toegevoegd, of dat de content van het veld niet is wat je verwacht (het veld "emailadres" hoeft bijvoorbeeld helemaal geen geldig e-mailadres te zijn, maar misschien "<'" - als iemand wat SQL-injectie en/of XSS wil testen).