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: 1 2 volgende »

Anja v

Anja v

16/01/2018 16:13:51
Quote Anchor link
Hallo allemaal,

Ik heb met HTML5 (Bootstrap3) een contactformulier gemaakt.

Omdat ik de server taal PHP niet beheers ben ik opzoek gegaan naar een veilige code. Via w3schools.com kwam ik
een uitgebreid PHP script tegen voor formulieren.
https://www.w3schools.com/php/showphp.asp?filename=demo_form_validation_complete

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?


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
154
155
156
157
158
<?php
    
if(isset($_POST['emailadres']))
{

    $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;

$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";

@
mail($email_to,$email_subject,$email_message,$headers);    
}

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

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["naam"])) {
    $naamErr = "Typ uw naam in";
  }
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";
    }
  }

  
  if (empty($_POST["plaats"])) {
    $plaatsErr = "Typ uw woonplaats in";
  }
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";
    }
  }

  
  
  if (empty($_POST["email"])) {
    $emailErr = "Typ geldig email adres";
  }
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-Z ]*$/",$plaats)) {
      $plaatsErr = "Alleen letters en spaties";
      }
  }


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" class="btn btn-primary" value="sent">Verzend</button>    
</div>    
</div>    
</form>

<?php
echo "<h2>Your Input:</h2>";
echo $naam;
echo "<br />";
echo $plaats;
echo "br />"
echo $email;
echo "<br />";
echo $geslacht;
echo "<br />";
echo $comment;
echo "<br />";
?>

Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 16/01/2018 16:26:54 door - Ariën -
 
PHP hulp

PHP hulp

22/12/2024 09:34:31
 
- Ariën  -
Beheerder

- Ariën -

16/01/2018 16:29:03
Quote Anchor link
De structuur is niet echt super netjes. Het is bij PHP niet enkel een kwestie van code kopiëren en plakken, maar je zult ook moeten begrijpen wat er gebeurt.

Uiteindelijk krijg je een aansluitend geheel en steekt de puzzel in elkaar.

Ik zal vanavond (mits iemand anders mij voor is) een voorbeeldje maken, zodra ik gegeten heb ;-)
Gewijzigd op 16/01/2018 16:29:24 door - Ariën -
 
Ben van Velzen

Ben van Velzen

16/01/2018 16:32:30
Quote Anchor link
Waar komt die idiote test_input functie vandaan? Ik zie hem vaker voorbij komen, de bedenker daarvan moet serieus een schop onder zijn/haar kont hebben.
 
- Ariën  -
Beheerder

- Ariën -

16/01/2018 17:07:28
Quote Anchor link
W3schools. Ze begrijpen niet dat je output moet beveiligen, en juist niet de input.
 
Thomas van den Heuvel

Thomas van den Heuvel

16/01/2018 17:29:14
Quote Anchor link
@Anja, ik neem aan dat je op regel 6 de daadwerkelijke (e-mail)bestemming invult?

Dan mis je op regel 18 waarschijnlijk een verwijzing naar $comment, dit moet mogelijk zoiets zijn als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$email_message = nl2br($comment);


Verder ziet het er in de gauwigheid wel ok uit, afgezien van enkele technische keuzes misschien *kuch* :).

Maar kun je concreet aangeven of/wat er precies misgaat? Als de bestemming klopt ($email_to) zou je -indien alles verder ok is- op den duur een e-mailbericht moeten ontvangen. Indien daar geen sprake van is kunnen we verder op zoek gaan naar mogelijke oorzaken.

Dus parkeer het script in een tijdelijke directory en probeer het eens uit :). Mogelijk wil je op den duur wel een soort van controle inbouwen tegen spam, maar dat is stap 2 of 3, voor nu heb je in principe genoeg code om snel te testen of dit werkt.

Voor ontwikkeling zou je bovenaan de code nog tijdelijk het volgende kunnen toevoegen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
// voor ontwikkeling
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>

Dit zorgt ervoor dat je code "mondig" is in het melden van fouten, deze worden dan op je scherm gedumpt, dit kan een handig geheugensteuntje zijn voor als je ergens iets vergeten bent en/of ergens een typefout hebt gemaakt ofzo.
 
Michael -

Michael -

16/01/2018 18:19:00
Quote Anchor link
Ik dacht dat W3schools best hoog staat aangeschreven, maar dat script van hun is om te janken.
 
Obelix Idefix

Obelix Idefix

16/01/2018 19:45:27
Quote Anchor link
Is het logisch om eerst te controleren of emailadres is ingevuld en en zo ja een e-mail te versturen en daarna pas controleren of alle (verplichte) velden wel ingevuld zijn?
 
Nick Vledder

Nick Vledder

16/01/2018 19:56:02
Quote Anchor link
Wel netjes dat je bij het ontbreken van verplichte input of foutieve input meldingen geeft, maar dat is na een roundtrip server. Wat je veelal ziet, is clientside form validation (jQuery + jQuery Validation Plugin, bijvoorbeeld). Er wordt niet verzonden, voordat voldaan is aan de requirements zoals je die zelf hebt gedefinieerd (minimale lengte, required, postcodeNL, etc.). Tevens worden meldingen weergegeven in de gewenste taal als iets (nog) niet juist is.

Je zou ook nog iets kunnen doen tegen ongewenst formuliergebruik door bots (captcha) of ander ongewenst gebruik (unique id) als waarborg dat enkel formulieren in behandeling worden genomen, die binnen bepaalde tijdspanne zijn uitgegeven door jouw server.

PS welke values horen bij de respectievelijke geslachten?
Gewijzigd op 16/01/2018 19:57:04 door Nick Vledder
 
Jan Koehoorn

Jan Koehoorn

16/01/2018 20:24:52
Quote Anchor link
In ieder geval de echt grote fouten, waardoor de pagina helemaal niets deed, eruit gehaald. Er zijn zeker nog verbeteringen mogelijk, zoals gezegd, maar hier kun je wel mee verder denk ik.
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
<?php
if (isset($_POST['emailadres'])) {
    $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" : '';

    @
mail($email_to, $email_subject, $email_message, $headers);
}


// 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 uw naam in";
    }
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";
        }
    }


    if (empty($_POST["plaats"])) {
        $plaatsErr = "Typ uw woonplaats in";
    }
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";
        }
    }


    if (empty($_POST["email"])) {
        $emailErr = "Typ geldig email adres";
    }
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-Z ]*$/", $plaats)) {
        $plaatsErr = "Alleen letters en spaties";
    }
}

function
test_input($data)
{

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

    return $data;
}


?>


<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form class="form-horizontal" method="post" name="contactform">

        <h6>* Verplichte velden</h6>

        <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" class="btn btn-primary" value="sent">Verzend</button>
</div>
</div>

    </form>
</body>
</html>
 
- Ariën  -
Beheerder

- Ariën -

16/01/2018 22:28:26
Quote Anchor link
Als je het helemaal netjes doet haal je de @ weg, en bouw je foutafhandeling in.
Mocht je mail() functie om vreemde redenen niet werken, dan krijgt de bezoeker netjes een foutmelding.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php // kleurtjes tonen
if(mail($email_to, $email_subject, $email_message, $headers)) {
    // Alles is oké! We stturen de gebruiker nu door naar bedankt.php waar een bedankje op vermeld staat.
    header("Location: bedankt.php");
    exit();
}
else {
    echo "Er is een technische fout aan onze kant. Gelieve ons een mail te sturen op: ".$email_to;
}

?>
 
Ivo P

Ivo P

17/01/2018 10:53:32
Quote Anchor link
regel 17 lijkt me overbodig: dat wordt in de function mail() al aangegeven..

regel 72: er zijn zat namen waarin andere tekens dan de letters A-Z of een spatie staan:
Willem-Alexander en Máxima: een - voor de koning, en de á van de koningin vallen niet onder jouw filter!
Idem voor de plaatsnaam: 's-Hertogenbosch komt op 2 punten niet door het filter.

de functie test_input()
dat suggereert dat je iets test, maar je verandert daar een invoer. Trim() kan ik nog vatten, maar stripslashes? Dat is iets wat hooguit voorkomt uit de "magic-quotes" settings in PHP. Maar die staat al jaaaren default uit, en kán tegenwoordig niet eens meer aan. Dus je stript hooguit slashes die er wel horen te staan.

en htmlspecialchars() heeft alleen nut in html. Nu pas je dat inderdaad toe op deze mail(), maar als je de setting op regel 12 verandert, veranderen je headers mee, maar htmlspecialchars blijft actief...


En je textarea "comment". Die mag vreemd genoeg alleen letters en spaties bevatten. Geen interpunctie, geen enters, geen cijfers. Vreemd genoeg verwacht je op regel 14 wel dat er enters voor kunnen komen.

NB de accolade op regel 65 zou naar 76 moeten, lijkt me

-------
qua opbouw:
ik zou beginnen met het blok dat op regel 29 begint:
je wilt eerst weten of er fouten zijn.
Zo nee, (dus als alle $xxxErr leeg zijn) ga je de mail sturen
Zo ja, dan toon je het form opnieuw met de melding(en).
 
Anja v

Anja v

17/01/2018 15:55:07
Quote Anchor link
Hartelijk dank voor jullie reacties.


Bedankt Ariën voor de code om een bezoeker door te sturen naar een bedankt pagina, dat was inderdaad nog een vraag die ik nog wilde stellen.

Nick Vledder, Anti spam en captcha is zeker belangrijk is deze tijd, als deze code werkt ga ik daar zeker naar opzoek. De values voor het geslacht zijn man of vrouw.
Het idee erachter is dat bij een voornaam het soms niet helemaal duidelijk is of het een man of vrouw betreft. Als men een bericht terug schrijft is het wel fijn om die persoon aan te kunnen schrijven met heer, of mevrouw,

Ivo P ik begrijp je reactie. Ik had zelf al gezien dat je bij het invul veld ‘comment’ geen punt mag gebruiken. Wat denk ik heel frustrerend is voor iemand die een bericht probeert te typen. Maar ik weet helaas niet hoe ik dit kan aanpassen.

De website waar deze pagina uiteindelijk opkomt is voorzien van SSL https://. Dat is denk ik altijd wel belangrijk als men formulieren moet kunnen invullen.

De code ziet er na jullie suggesties 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
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<?php

// voor ontwikkeling
    error_resporting(E-ALL);
    ini_set('display_errors', 'stdout');
    
if(isset($_POST['emailadres'])){
    $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 gebruiken door naar de bedankt pagina.
    header("location: bedankt.php");
    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 ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["naam"])) {
    $naamErr = "Typ uw naam in";
  }
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";
    }
  }

  
  if (empty($_POST["plaats"])) {
    $plaatsErr = "Typ uw woonplaats in";
  }
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";
    }
  }

  
  
  if (empty($_POST["email"])) {
    $emailErr = "Typ geldig email adres";
  }
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-Z ]*$/",$plaats)) {
      $plaatsErr = "Alleen letters en spaties";
      }
  }


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" class="btn btn-primary" value="sent">Verzend</button>    
</div>    
</div>    

</form>

<?php
echo "<h2>Your Input:</h2>";
echo $naam;
echo "<br />";
echo $plaats;
echo "br />"
echo $email;
echo "<br />";
echo $geslacht;
echo "<br />";
echo $comment;
echo "<br />";
?>




Ik heb de php pagina geupload naar de server.
Ik krijg de pagina niet te zien alleen deze foutmeldingen:

Parse error: syntax error, unexpected ';' in /public/sites/www.domeinnaam.nl/testform.php on line 70

$headers .= ($html) ? "MIME-Version: 1.0" . "\r\n";
$headers .= ($html) ? "Content-type:text/html;charset=UTF-8" . "\r\n";
Gewijzigd op 17/01/2018 16:04:28 door Anja v
 
- Ariën  -
Beheerder

- Ariën -

17/01/2018 16:05:49
Quote Anchor link
Ik mis een false, dit moet wel werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$headers
    .= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers    .= ($html) ? 'Content-type: text/html; charset=UTF-8' . "\r\n" : '';
?>


In deze code laat je die twee waardes leeg als HTML uit staat. Je hebt dan geen MIME en Content-Type nodig.

De opbouw is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
(voorwaarde) ? true : false;


Zie ook: https://davidwalsh.name/php-shorthand-if-else-ternary-operators

maar je code is nog steeds verre van netjes. Om even een eerdere bericht aan te halen uit een ander gelijkwaardig topic:

- Ariën - op 17/01/2018 14:58:24:
Persoonlijk zou ik er één script van maken in een enkel bestand. Je wilt immers ook invoer-validatie toevoegen, en het netste is dat je hierbij een melding bij de velden toont die niet of incompleet ingevuld zijn.

Het belangrijkste hierbij is dat je in je script als eerste de PHP-scripting uitvoert, en controleert of er een formulier verstuurd is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
if($_SERVER['REQUEST_METHOD']=="POST") {
// je formulier is verstuurd!
// valideer eerst je invoer
// Als dit allemaal gepasseerd is, dan verstuur je het formulier via mail

} else {
?>

Hier komt je formulier....
<?php
}
?>


In dat topic staan nog een hoop tips hierover.
Gewijzigd op 17/01/2018 16:09:43 door - Ariën -
 
Anja v

Anja v

17/01/2018 16:11:27
Quote Anchor link
Als ik ($html) ? weghaal, foutmelding opeens opgelost, krijg ik vervolgens deze foutmelding:

Parse error: syntax error, unexpected '""' (T_CONSTANT_ENCAPSED_STRING) in /public/sites/www.websitenaam.nl/testform.php on line 75

Wat betrekking heeft op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$naamErr
= $plaatsErr = $emailErr = $geslachtErr = $commentErr "";
$naam = $plaats = $email = $geslacht = $comment "";
?>


Als ik dit zou veranderen, geen idee hoe en waarom, maar dan zou de laatste foutmelding zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
echo $email;
echo "<br />";
?>

Want mijn HTML editor geeft namelijk precies dezelfde foutmeldingen aan. De regel nummer staat in het rood aangegeven, als je de cursor er boven houdt krijg je die foutmeldingen.
Gewijzigd op 17/01/2018 16:29:58 door Anja v
 
Jan Koehoorn

Jan Koehoorn

17/01/2018 16:23:02
Quote Anchor link
@Anja: heb je mijn bericht wel gelezen? Daar zijn de fouten uit waar je nu last van hebt.
 
Anja v

Anja v

17/01/2018 16:23:08
Quote Anchor link
Bedoel je dit:
in plaat van

in plaats van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$html
= true;
?>

wordt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$html
= ? true : false;
?>


dit veroorzaakt weer een extra foutmelding = syntac error unexpected '?'

Ik zal de desbetreffende pagina gaan doorlezen, dankjewel.

Het blijft lastig omdat ik php niet beheerst. Ik probeer door het script de bekijken de logica ervan in de zien en indien mogelijk een beetje aan te passen, maar zonder het besef te hebben of het een veilig script is of, of de opbouw ervan goed is. Het is heel fijn omdat hier te kunnen vragen aan forum leden die wel weten hoe de vork in de steel zit.
Gewijzigd op 17/01/2018 16:30:54 door Anja v
 
- Ariën  -
Beheerder

- Ariën -

17/01/2018 16:25:23
Quote Anchor link
Let wel even op, want die zwarte code is alleen de syntax en geen bruikbare code.
Lees anders mijn post nog eens goed.
 
Anja v

Anja v

17/01/2018 16:27:32
Quote Anchor link
Jan Koehoorn op 17/01/2018 16:23:02:
@Anja: heb je mijn bericht wel gelezen? Daar zijn de fouten uit waar je nu last van hebt.


Jazeker, ik heb het PHP script zelfs geprint. En het script aangepast.
Ik zag o.a. dat de echo's onderaan verwijderd waren. Ik wist niet zeker of dat de bedoeling was of dat het per ongeluk niet mee gekopieerd was.
 
- Ariën  -
Beheerder

- Ariën -

17/01/2018 16:29:01
Quote Anchor link
Ik zou misschien eens kijken naar een goede opbouw van het formulier, zoals in het aangehaalde andere topic.
Het kan tevens een mooie beginners-les zijn als je PHP onder de knie wilt krijgen.
 
Jan Koehoorn

Jan Koehoorn

17/01/2018 19:09:33
Quote Anchor link
Anja v op 17/01/2018 16:27:32:
Jan Koehoorn op 17/01/2018 16:23:02:
@Anja: heb je mijn bericht wel gelezen? Daar zijn de fouten uit waar je nu last van hebt.


Jazeker, ik heb het PHP script zelfs geprint. En het script aangepast.
Ik zag o.a. dat de echo's onderaan verwijderd waren. Ik wist niet zeker of dat de bedoeling was of dat het per ongeluk niet mee gekopieerd was.


In mijn code staat bijvoorbeeld dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
// define variables and set to empty values
$naamErr = $plaatsErr = $emailErr = $geslachtErr = $commentErr = "";
$naam    = $plaats    = $email    = $geslacht    = $comment    = "";
?>


Dit ziet er anders uit dan in jouw laatste post ;-)

edit:

Daar staat namelijk:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$naamErr
= $plaatsErr = $emailErr = $geslachtErr = $commentErr "";
$naam = $plaats = $email = $geslacht = $comment "";
?>

(let op het laatste = teken bij mij)
En er zijn nog meer verschillen, waar ik uit opmaak dat je het niet integraal overgenomen hebt.
Gewijzigd op 17/01/2018 19:11:05 door Jan Koehoorn
 
Anja v

Anja v

18/01/2018 13:41:14
Quote Anchor link
**quoteknip**

Ja, ik zie het.
Ik heb de code naar MS Word gekopieerd en uitgeprint om het vervolgens aan te passen. Door het kopiëren naar Word zijn sommige code tekst verplaatst van positie.
Ik heb het nu gekopieerd naar een php bestand. En zal de code nu opnieuw gaan vergelijken. Dankjewel.

Edit:
Het is niet nodig het voorgaande en voorlaatste bericht integraal te quoten.
Gewijzigd op 18/01/2018 14:04:14 door - Ariën -
 

Pagina: 1 2 volgende »



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.