Omdat ik het ingevulde formulier graag naar een e-mail adres wil laten sturen ben ik weer opzoek gegaan. Via phphulp.nl en PHPwiki heb ik stukjes code gevonden en vervolgens geprobeerd die stukjes script aan de code van w3schools.com toe te voegen. Klopt de code nu nog wel? Wellicht de volgorde?
Ik zie door de bomen het bos niet meer. Kan iemand mij alstublieft helpen?
Wat verwacht je dat nl2br() met meerdere argumenten moet doen?
Er gaan 1 of 2 parameters die functie in: een string die eventueel enters bevat, en een boolean die middels true/false aangeeft wat voor smaak html je gebruikt.
[size=xsmall]Toevoeging op 22/01/2018 16:29:09:[/size]
verder zou ik ipv
<?php if(isset($_POST['submit']))?>
liever gaan voor
<?php if('POST' == $_SERVER['REQUEST_METHOD']) ?>
je wilt immers weten of een formulier gepost werd? Niet of dat toevallig gedaan werd door een klik op een button of dat javascript of "enter" daarvoor verantwoordelijk was...
Je wilt immers controleren of een formulier verstuurd is, en niet of er op een knop gedrukt is.
Klik eens in je code-blok op de functienaam nl2br(). Dan zie je dat er twee argumenten voor zijn, dus je mag geen komma's gebruiken voor elk veld. Normaliter gebruik je nl2br() op de output, en niet op de invoer.
<?php
if (!preg_match("/^[a-zA-Z0-9\. ]*$/", $plaats)) {
$plaatsErr = "Alleen (hoofd)letters, cijfers, punten en spaties toegestaan";
}
?>
afgezien van dat je hiet $plaats en $plaatsErr gebruikt terwijl je met $_POST['comment'] bezig bent:
je bent hier heel strikt in wat jij vindt dat er in een invoer hooft te staan.
Kennlijk geen komma's in commentaar. En ook de ' of een létter met àcçent mag niet van jou.
Ik zie eigenlijk geen reden om dat ter verbieden.
Dat je checkt of een emailadres een emailadres zou kunnen zijn, kan ik begrijpen.
Maar waarom een woonplaats maar bepaalde letters en tekens mag bevatten? Je staat wel toe dat je het veld leeg laat (in elk geval in de preg-functie)
maar plaatsnamen met een koppelteken of een accent, mag weer niet.
Idem voor namen.
En wat heb je nu precies gewonnen met deze restrictie?
Een rij geërgerde gebruikers die hun naam en woornplaats niet in mogen voeren, zoals het normaal geschreven wordt?
De enige tekens die eventueel schadelijk zouden kúnenn zijn, zijn mi. de ', de < en >
Maar die vang je af met de juiste escape functies: mysqli_real_escape_string voor de ' als het om query's gaat en htmlspecialchars() voor de <> en dan met name bij het schrijven van de teksten (de output)
Ivo P = Het is natuurlijk niet de bedoeling dat een bezoeker gefrustreerd raakt. Ik heb dit zo overgenomen van de code op W3Schools. Ik weet nu alleen hoe je een punt toevoegt \.
Ik zal kijken of ik iets met de informatie kan, want dit alles is voor mij nieuw. Het is een leerproces.
Ik kan met termen om m'n hoofd worden geslingerd, en het zal goed bedoeld zijn, maar dan is het nog de vraag of ik het voor elkaar krijg om het goed toe te passen. Het is vaak lastig om te weten hoe en waar je wat moet plaatsen.
Nu zie je in de e-mail alle informatie achter elkaar staan.
Het zou mogelijk moeten zijn om de informatie (naam, plaats etc.)elk op een nieuwe regel te zien, dat is overzichtelijker. Ik heb nog niet kunnen vinden hoe je dat kunt doen.
Excuses dat dit niet netjes onder elkaar staat. Het gebeurt bij het kopieren.
In het php bestand staat het wel netjes onder elkaar. Als ik het met de hand aanpas staat het wel netjes onder elkaar, totdat ik op 'wijzigen' druk, dan staat het niet meer onder elkaar zoals nu. Vreemd.
Als ik dit zie, dan heb ik het idee van: 'waarom?'
je kopieert feitelijk gewoon $_POST variabelen opnieuw in een PHP-variabele.
Wat is het nut daarvan?
Je kan immers prima $_POST['naam'], $_POST['plaats'] etc in je script gebruiken.
regel 3: hier defineer je de afzender van de mail. Daar zou een mailadres moeten staan. Mogelijk is het ook ok om "mijn site <[email protected]>" te gebruiken. Maar niet zo maar een tekst.
regel 4: $email_to zegt waar de mail heen gaat.
regel 9: $email bevat het mailadres dat de bezoeker intikte en dat je ergens in de inhoud van de mail vermeldt
regel 35: is overbodig: dat staat al op regel 40 als eerste parameter van de functie mail().
Je mail bevat geen html. Op regel 12 lijkt me false dan ook op zijn plaats.
[size=xsmall]Toevoeging op 24/01/2018 10:36:26:[/size]
Jullie adviezen heb ik, zover ik kon, doorgevoerd, dank daarvoor.
$content heb ik iets veranderd, de informatie uit het formulier komt in de e-mail nu netjes elk op een nieuwe regel. Wel zo overzichtelijk.
Ivo P
Bedoel je met deze zin 'htmlspecialchars() voor de <> en dan met name bij het schrijven van de teksten (de output)'
dat ik in plaats van deze code voor de invoer, !pregmatch() in het bijzonder:
<?php
if ("POST" == $_SERVER["REQUEST_METHOD"]) {
if (empty($_POST["naam"])) {
$naamErr = "Typ a.u.b. uw voor- en achternaam";
} else {
$naam = ($_POST["naam"]);
// de code hieronder bedoel ik
if (!preg_match("/^[a-zA-Z ]*$/", $naam)) {
$naamErr = " ";
?>
deze kan gebruiken? Zodat gebruikers hun naam wel goed kunnen schrijven?
<?php
if (!preg_match(htmlspecialchars($naam))){
$naamErr = " ";
?>