PHP code voor formulier correct?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Pagina: « vorige 1 2

- SanThe -

- SanThe -

18/01/2018 13:58:22
Quote Anchor link
Anja v op 18/01/2018 13:41:14:
Ik heb de code naar MS Word gekopieerd ...


Nooit MS Word gebruiken voor dit soort codes.
Gebruik dan Notepad of een goede ASCII editor.
 
PHP hulp

PHP hulp

22/12/2024 15:03:35
 
- Ariën  -
Beheerder

- Ariën -

18/01/2018 14:02:53
Quote Anchor link
Ikzelf zou dan eerder Notepad++ aanraden. Deze is speciaal bedoeld voor programmeren en dus ook voor PHP-code.
 
Anja v

Anja v

22/01/2018 16:15:30
Quote Anchor link
Ik zal het onthouden. Zoals doe je maar één keer fout.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?php
if(isset($_POST['submit'])){
    $email_from    = "[email protected]";
    $email_to      = "[email protected]";
    $email_subject = "Contactform";
    $emailadres    = filter_input(INPUT_POST,'emailadres', FILTER_VALIDATE_EMAIL);
    $naam          = $_POST['naam'];
    $plaats        = $_POST['plaats'];
    $email         = $_POST['email'];
    $geslacht      = $_POST['geslacht'];
    $comment       = $_POST['comment'];
    $html          = true;


$email_message = nl2br($comment);

$headers .= "From:". $email_from . "\r\n";
$headers .= "To:". $email_to . "\r\n";
$headers .= "X-Mailer: PHP/".phpversion(). "\r\n";
$headers .= ($html) ? "MIME-Version: 1.0" . "\r\n" : '';
$headers .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n" : '';

if(mail($email_to,$email_subject,$email_message,$headers)) {    
 //Alles Oké? we sturen de gebruiker door naar de bedankt pagina.
    header("location: bedankt.html");
    exit();
}
else {
    echo "Er is een technische fout aan onze kant. Gelieve ons een mail te sturen op: ".$email_to;
}
}

    
// define variables and set to empty values
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr = "";
$naam    = $plaats    = $email    = $geslacht    = $comment = "";

if ("POST" == $_SERVER["REQUEST_METHOD"]) {
  if (empty($_POST["naam"])) {
    $naamErr = "Typ a.u.b. uw naam";
  }
else {
    $naam = test_input($_POST["naam"]);
    // check if name only contains letters and whitespace
    if ( ! preg_match("/^[a-zA-Z ]*$/", $naam)) {
      $naamErr = "Alleen letters en spaties toegestaan";
    }
  }

  
  if (empty($_POST["plaats"])) {
    $plaatsErr = "Typ a.u.b. uw woonplaats";
  }
else {
    $plaats = test_input($_POST["plaats"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/", $plaats)) {
      $plaatsErr = "Alleen letters en spaties toegestaan";
    }
  }

  
  
  if (empty($_POST["email"])) {
    $emailErr = "Typ a.u.b. een geldig emailadres";
  }
else {
    $email = test_input($_POST["email"]);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Ongeldige email";
    }
  }

    
   if (empty($_POST["geslacht"])) {
    $geslachtErr = "Maak geslachts keuze";
  }
else {
    $geslacht = test_input($_POST["geslacht"]);
  }
}

    
  if (empty($_POST["comment"])) {
    $comment = "Typ uw opmerking of vraag";
  }
else {
    $comment = test_input($_POST["comment"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z0-9\. ]*$/", $plaats)) {
      $plaatsErr = "Alleen (hoofd)letters, cijfers, punten en spaties toegestaan";
      }
  }


function
test_input($data)
{

  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
    
  return $data;
}

    
?>

    
<form class="form-horizontal" method="post" name="contactform" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    
<h6>* Verplichte velden</h6><br />            
                
<div class="form-group row">
<label for="naam" class="col-sm-2 col-form-label">naam*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="naam" id="naam" placeholder="voor en achternaam" required>
<span class="error"><?php echo $naamErr;?></span>
</div>
</div>
                
<div class="form-group row">
<label for="plaats" class="col-sm-2 col-form-label">Woonplaats*</label>
<div class="col-sm-2">
<input class="form-control" type="text" name="plaats" id="plaats" required>
<span class="error"><?php echo $plaatsErr;?></span>
</div>
</div>
    
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">E-mail*</label>
<div class="col-sm-3">
<input class="form-control" type="email" name="email" placeholder="[email protected]" id="email" required>
<span class="error"><?php echo $emailErr;?></span>
</div>
</div>
                
<div class="form-group row">
<label for="geslacht" class="col-sm-2">Geslacht*</label>
<div class="col-sm-2">
<select class="form-control" name="geslacht" id="geslacht">
<option>Man</option>
<option>Vrouw</option>
</select>
<span class="error"><?php echo $geslachtErr;?></span>
</div>
</div>
                
<div class="form-group row">
<label for="comment" class="col-sm-2">Opmerking*</label>
<div class="col-sm-5">
<textarea class="form-control" rows="3" name="comment" id="comment"></textarea>
<span class="error"><?php echo $commentErr;?></span>
</div>
</div>    
                
<div class="form-group row">
<div class="col-sm-2"></div>
<div class="col-sm-2">
<button type="submit" name="submit" class="btn btn-primary">Verzend</button>    
</div>    
</div>    

</form>






Het formulier werkt!
Nadat ik code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if(isset($_POST['emailadres']))?>

veranderd had in
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if(isset($_POST['submit']))?>

Dat geeft een goed gevoel.

Nu komt alleen de $comment binnen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $email_message = nl2br($comment);?>


Ik dacht dat ik dat kon aanpassen door dit toe te voegen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $email_message = nl2br($naam,$plaats,$email,$comment);?>

Maar als ik dat doe, dan ontvang ik opeens geen email(s) meer.

Mogen die komma's niet? Zie ik iets over het hoofd?
Gewijzigd op 22/01/2018 16:26:07 door - Ariën -
 
Ivo P

Ivo P

22/01/2018 16:27:31
Quote Anchor link
enig idee wat nl2br eigenlijk doet?

http://php.net/nl2br

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.



Toevoeging op 22/01/2018 16:29:09:

verder zou ik ipv
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if(isset($_POST['submit']))?>


liever gaan voor

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?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...
 
- Ariën  -
Beheerder

- Ariën -

22/01/2018 16:29:26
Quote Anchor link
Vervang dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if(isset($_POST['submit']))?>


door dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if($_SERVER['REQUEST_METHOD']=="POST") {
?>


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.

Dus dat moet je nog aanpassen.
 
Ivo P

Ivo P

22/01/2018 16:38:59
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?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)
 
Anja v

Anja v

23/01/2018 17:24:49
Quote Anchor link
Eén stap vooruit, twee achteruit. Wel leerzaam.

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.

Het is me gelukt om meer informatie te versturen dan alleen 'comment' :)
Op de pagina werd uitgelegd hoe je dat kunt doen:
http://webprofis.nl/discussion/372/handleiding-verwerken-data-formulier

De code ziet er nu zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
if($_SERVER['REQUEST_METHOD']=="POST") {
    $email_from    = "domeinnaam";
    $email_to      = "[email protected]";
    $email_subject = "Contactform";
    $emailadres    = filter_input(INPPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
    $naam          = $_POST['naam'];
    $plaats           = $_POST['plaats'];
    $email           = $_POST['email'];
    $geslacht      = $_POST['geslacht'];
    $comment       = $_POST['comment'];
    $html           = true;


//opmaken email    
$content     = "";
$content    .= "Naam: ";
$content    .= $naam;
$content    .= "\n";
$content    .= "plaats: ";
$content    .= $plaats;
$content    .= "\n";
$content    .= "email: ";
$content    .= $email;
$content    .= "\n";
$content    .= "geslacht: ";
$content    .= $geslacht;
$content    .= "\n";
$content    .= "comment: ";
$content    .= $comment;
$content    .= "\n";         
    
    
$headers    .= "From:". $email_from . "\r\n";
$headers    .= "To:". $email_to . "\r\n";
$headers    .= "X-Mailer: PHP/".phpversion(). "\r\n";
$headers    .= ($html) ? "MIME-Version: 1.0" . "\r\n" : '';
$headers    .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n" : '';
    
if(mail($email_to,$email_subject,$content,$headers)) {    
 //Alles Oké? we sturen de gebruiker door naar de bedankt pagina.
    header("location: bedankt.html");
    exit();
}
else {
    echo "Er is een technische fout aan onze kant. Gelieve ons een mail te sturen op: ".$email_to;
}
}

----
knip-----    

    
?>


Is $email & $emailadres eigenlijk niet dubbel?

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.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
        $naam
          = $_POST['naam'];
    $plaats           = $_POST['plaats'];
    $email           = $_POST['email'];
    $geslacht      = $_POST['geslacht'];
    $comment       = $_POST['comment'];
    $html           = true;
?>



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.
Gewijzigd op 23/01/2018 18:59:17 door Anja v
 
- Ariën  -
Beheerder

- Ariën -

23/01/2018 22:04:07
Quote Anchor link
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.
 
Ivo P

Ivo P

24/01/2018 10:34:53
Quote Anchor link
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.

Toevoeging op 24/01/2018 10:36:26:

o
en regel 6 bevat een fout

$emailadres = filter_input(INPPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

INPUT_POST is met een P minder.
Maar die hele regel is overbodig: je gebruikt $emailadres zo te zien helemaal niet.
 
Anja v

Anja v

26/01/2018 14:26:23
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
if($_SERVER['REQUEST_METHOD']=="POST") {
    $email_from    = "domeinnaam <[email protected]>";
    $email_to      = "[email protected]";
    $email_subject = "Contactform";
    $naam          = $_POST['naam'];
    $plaats        = $_POST['plaats'];
    $email         = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
    $geslacht      = $_POST['geslacht'];
    $comment       = $_POST['comment'];
    $html           = false;

$content     = 'Naam: ' . $naam . "\r\n" . 'Plaats: ' . $plaats . "\r\n" . 'E-mail: ' . $email . "\r\n"
            .  'Geslacht: ' . $geslacht . "\r\n" . 'Vraag: ' . $comment;

$headers    .= "From:". $email_from . "\r\n";
$headers    .= "X-Mailer: PHP/".phpversion(). "\r\n";
$headers    .= ($html) ? "MIME-Version: 1.0" . "\r\n" : '';
$headers    .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n" : '';
    
if(mail($email_to,$email_subject,$content,$headers)) {    
 //Alles Oké? we sturen de gebruiker door naar de bedankt pagina.
    header("location: bedankt.html");
    exit();
}
else {
    echo "Er is een technische fout aan onze kant. Gelieve ons een mail te sturen op: ".$email_to;
}
}


?>

----knip------


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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?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?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

    if  (!preg_match(htmlspecialchars($naam))){
      $naamErr = " ";

?>
Gewijzigd op 26/01/2018 14:28:45 door Anja v
 
Ivo P

Ivo P

26/01/2018 14:49:56
Quote Anchor link
Nee, ik bedoel te zeggen, dat de mensen over het algemeen zelf heel goed weten hoe ze hun naam moeten schrijven.

In mijn naam komt geen J voor.
Dus stel dat ik daarom maar verbied om een "j" op te nemen in een naam.
Hoe ga jij je naam dan invoeren?

Dat is wat jij namelijk doet met "a-zA-Z "
Je staat een aantal tekens toe, en een hele boel niet. Waarom mogen Willem-Alexander en Máxima hun naam niet invoeren?

Ja, je kunt dit "oplossen" door en "a-zA-Zá -" te plaatsen in de regex. Maar dan komt Véronique langs. etc etc.

Daarom terug naar de vraag: wáárom verbied je die andere letters?
Het enige dat ik kan bedenken, is een beveiliging tegen XSS of SQL-injectie.
En daarvoor zijn prima andere oplossingen: htmlspecialchars() als je een naam op het scherm zet, of mysqli-real-escape-string() in je query.

Bij je controle functie hierboven zou ik hooguit controleren of de lengte van de naam groter is dan 0 tekens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if(strlen(trim($naam)) == 0) { // de naam was leeg, of bestond uit spaties } ?>


de functie htmlspecialchars() hoor je alleen te gebruiken in combinatie met "echo"
 
Anja v

Anja v

20/02/2018 15:20:54
Quote Anchor link
Goedemiddag iedereen,
De laatste tijd ben ik druk bezig geweest met het beveiligen van het formulier. Ik vraag me af of ik op de goede weg ben.

Bij de 2de 'if' van anti-flood worden er geen accolades gebruikt, maar zover ik weet hoort dit normaal gesproken wel. Waarom hier dan niet?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
session_start();        
if($_SERVER['REQUEST_METHOD']=="POST") {
    $email_from    = "[email protected]";
    $email_to      = "[email protected]";
    $email_subject = "Contactform";
    $vnaam         = $_POST['vnaam'];
    $anaam         = $_POST['anaam'];
    $plaats        = $_POST['plaats'];
    $email         = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
    $geslacht      = $_POST['geslacht'];
    $comment       = $_POST['comment'];
    $persoon       = filter_input(INPUT_POST, 'persoon', FILTER_VALIDATE_INT);
    $html           = false;

    //anti-flood 30 sec. vertraging
    if (!empty($_SESSION['antiflood'])) {    
  }
  $seconde = 30;
     $tijd = time() - $_SESSION['antiflood'];
    if ($tijd < $seconde)
     $antiflood = 1;
      // hier geen accolades?
    
    
$content     = 'Voornaam: ' . $vnaam ."\r\n" . 'Achternaam: ' . $anaam . "\r\n" . 'Plaats: ' . $plaats .    
                "\r\n" . 'E-mail: ' . $email . "\r\n" . 'Geslacht: ' . $geslacht . "\r\n" . 'Vraag: ' . $comment;

$headers    .= "From:". $email_from . "\r\n";
$headers    .= "X-Mailer: PHP/".phpversion(). "\r\n";
$headers    .= ($html) ? "MIME-Version: 1.0" . "\r\n" : '';
$headers    .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n" : '';
    
    
    if ($antiflood == "")
  {
  $_SESSION['antiflood'] = time();
    mail($email_to, $email_subject, $content, $headers);
     //Alles oke?
    header("location: bedankt.html");
    exit();
  }
else  {
        echo "Er is een technische fout.";
  }  
}

    
            

// define variables and set to empty values
$vnaamErr = $anaamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr = $persoonErr = "";
$vnaam    =    $anaam    = $plaats    = $email    = $geslacht    = $comment    = $persoon    = "";

            
if ("POST" == $_SERVER["REQUEST_METHOD"]) {
  if (empty($_POST["vnaam"])) {
    $vnaamErr = "Voornaam verplicht";
  }
else {
    $vnaam = strip_tags(trim($_POST["vnaam"]));
    // niets ingevuld of bestond uit spaties
    if(strlen(trim($vnaam)) == 0) {  
        $vnaamErr = "Typ a.u.b. uw voornaam";
    }
  }

    

  if (empty($_POST["anaam"])) {
    $anaamErr = "Achternaam verplicht";
  }
else {
    $anaam = strip_tags(trim($_POST["anaam"]));
    //  niets ingevuld of bestond uit spaties
    if(strlen(trim($anaam)) == 0) {
        $anaamErr = "Typ a.u.b. uw achternaam";
    }
  }

    
  
  if (empty($_POST["plaats"])) {
    $plaatsErr = "Woonplaats verplicht";
  }
else {
    $plaats = strip_tags(trim($_POST["plaats"]));
    // check if name only contains letters and whitespace
    if (strlen(trim($plaats)) ==0) {
      $plaatsErr = "Typ a.u.b. uw woonplaats";
    }
  }

  
  
  if (empty($_POST["email"])) {
    $emailErr = "E-mail adres verplicht";
  }
else {
    $email = filter_var($email, FILTER_SANITIZE_EMAIL);
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
      $emailErr = "Ongeldige e-mail";
    }
  }

                
  
   if (empty($_POST["geslacht"])) {
    $geslachtErr = "Maak een keuze";
  }
else {
    $geslacht = strip_tags(($_POST["geslacht"]));
  }

    
    
  if (empty($_POST["comment"])) {
    $commentErr = "Stel uw vraag";
  }
else {
    $comment = htmlentities(trim($_POST["comment"]), ENT_NOQUOTES);
    // check of veld niet leeg is en max. 200 tekens bevat
    if (strlen($_POST['comment'])>= 1 && strlen($_POST['comment'])<=200) {
      $commentErr = "Typ uw vraag of opmerking, maximaal 200 tekens.";
      }
  }


    
  if (empty($_POST["persoon"])) {
    $persoonErr = "Geef een antwoordt op de vraag";
  }
else {
    $persoon = intval($_POST["persoon"]);
    // Correct of fout antwoordt.
    if ($persoon !== 40) {
    $persoonErr = "Dat is helaas niet het goede antwoordt";    
    }  
  }

?>
Gewijzigd op 20/02/2018 15:23:25 door Anja v
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/02/2018 16:46:07
Quote Anchor link
Indien er slechts één statement na een if of else volgt kunnen de accolades weggelaten worden. Dit bevorderd de leesbaarheid echter niet en vergroot de kans dat je fouten maakt.

dus

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if ($tijd < $seconde)
    $antiflood = 1;
?>


is het zelfde als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ($tijd < $seconde) {
    $antiflood = 1;
}

?>
Gewijzigd op 20/02/2018 16:47:15 door Frank Nietbelangrijk
 
Rob Doemaarwat

Rob Doemaarwat

20/02/2018 19:46:14
Quote Anchor link
Hm, maar wat doet die sluit-accolade aan het begin van regel 18? Ik vermoed dat ie ergens rond regel 43 moet komen (alleen verder als je überhaupt pas 'antiflood' in je $_SESSION hebt).
Gewijzigd op 20/02/2018 19:47:03 door Rob Doemaarwat
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/02/2018 20:28:56
Quote Anchor link
Zoals SanThe al aangaf: Gebruik een goede editor. Bijvoorbeeld Netbeans is gewoon gratis te downloaden. even je code in deze editor geplakt en alles geselecteerd en de code even geordend met [Alt]+[Shift]+[F] en het wordt al een stuk leesbaarder. Tabulaties (die een goede php editor weer omzet in een vast aantal spaties) zijn heel erg belangrijk. Zo laat je je code netjes inspringen en weet je of je in een lus dan wel een if zit of niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<?php

session_start();
if ($_SERVER['REQUEST_METHOD'] == "POST")
{

    $email_from = "[email protected]";
    $email_to = "[email protected]";
    $email_subject = "Contactform";
    $vnaam = $_POST['vnaam'];
    $anaam = $_POST['anaam'];
    $plaats = $_POST['plaats'];
    $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
    $geslacht = $_POST['geslacht'];
    $comment = $_POST['comment'];
    $persoon = filter_input(INPUT_POST, 'persoon', FILTER_VALIDATE_INT);
    $html = false;

    //anti-flood 30 sec. vertraging
    if (!empty($_SESSION['antiflood']))
    {

        // EEN LEGE IF ???
    }
    
    $seconde = 30;
    $tijd = time() - $_SESSION['antiflood'];
    if ($tijd < $seconde)
        $antiflood = 1;
    // hier geen accolades?


    $content = 'Voornaam: ' . $vnaam . "\r\n" . 'Achternaam: ' . $anaam . "\r\n" . 'Plaats: ' . $plaats .
            "\r\n" . 'E-mail: ' . $email . "\r\n" . 'Geslacht: ' . $geslacht . "\r\n" . 'Vraag: ' . $comment;

    $headers .= "From:" . $email_from . "\r\n";
    $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
    $headers .= ($html) ? "MIME-Version: 1.0" . "\r\n" : '';
    $headers .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n" : '';


    if ($antiflood == "")
    {

        $_SESSION['antiflood'] = time();
        mail($email_to, $email_subject, $content, $headers);
        //Alles oke?
        header("location: bedankt.html");
        exit();
    }
else
    {
        echo "Er is een technische fout.";
    }
}




// define variables and set to empty values
$vnaamErr = $anaamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr = $persoonErr = "";
$vnaam = $anaam = $plaats = $email = $geslacht = $comment = $persoon = "";


if ("POST" == $_SERVER["REQUEST_METHOD"])
{

    if (empty($_POST["vnaam"]))
    {

        $vnaamErr = "Voornaam verplicht";
    }
else
    {
        $vnaam = strip_tags(trim($_POST["vnaam"]));
        // niets ingevuld of bestond uit spaties
        if (strlen(trim($vnaam)) == 0)
        {

            $vnaamErr = "Typ a.u.b. uw voornaam";
        }
    }



    if (empty($_POST["anaam"]))
    {

        $anaamErr = "Achternaam verplicht";
    }
else
    {
        $anaam = strip_tags(trim($_POST["anaam"]));
        //  niets ingevuld of bestond uit spaties
        if (strlen(trim($anaam)) == 0)
        {

            $anaamErr = "Typ a.u.b. uw achternaam";
        }
    }



    if (empty($_POST["plaats"]))
    {

        $plaatsErr = "Woonplaats verplicht";
    }
else
    {
        $plaats = strip_tags(trim($_POST["plaats"]));
        // check if name only contains letters and whitespace
        if (strlen(trim($plaats)) == 0)
        {

            $plaatsErr = "Typ a.u.b. uw woonplaats";
        }
    }



    if (empty($_POST["email"]))
    {

        $emailErr = "E-mail adres verplicht";
    }
else
    {
        $email = filter_var($email, FILTER_SANITIZE_EMAIL);
        // check if e-mail address is well-formed
        if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false)
        {

            $emailErr = "Ongeldige e-mail";
        }
    }



    if (empty($_POST["geslacht"]))
    {

        $geslachtErr = "Maak een keuze";
    }
else
    {
        $geslacht = strip_tags(($_POST["geslacht"]));
    }



    if (empty($_POST["comment"]))
    {

        $commentErr = "Stel uw vraag";
    }
else
    {
        $comment = htmlentities(trim($_POST["comment"]), ENT_NOQUOTES);
        // check of veld niet leeg is en max. 200 tekens bevat
        if (strlen($_POST['comment']) >= 1 && strlen($_POST['comment']) <= 200)
        {

            $commentErr = "Typ uw vraag of opmerking, maximaal 200 tekens.";
        }
    }



    if (empty($_POST["persoon"]))
    {

        $persoonErr = "Geef een antwoordt op de vraag";
    }
else
    {
        $persoon = intval($_POST["persoon"]);
        // Correct of fout antwoordt.
        if ($persoon !== 40)
        {

            $persoonErr = "Dat is helaas niet het goede antwoordt";
        }
    }

?>


Toevoeging op 20/02/2018 20:32:13:

Behalve die accolade sluiten van Rob mis je onderin ook nog een accolade sluiten.
Waarom twee keer controleren of de request methode 'POST' is?
 
Anja v

Anja v

13/03/2018 11:12:11
Quote Anchor link
Dankjewel voor je advies Frank.

Ik heb Netbeans ondertussen in gebruik genomen, handig programma.

Daarnaast ben ik een boek over PHP aan het lezen: PHP7 in easy steps.
Na dit boek wil ik me gaan verdiepen in OOP (Object Oriented PHP).
Zodat ik een PHP framework kan gebruiken.
Gewijzigd op 13/03/2018 11:13:01 door Anja v
 
- Ariën  -
Beheerder

- Ariën -

13/03/2018 11:32:53
Quote Anchor link
Mooie goals :-)

Veel plezier met programmeren!
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.