Probleem met formulier
Code (php)
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
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
<?php
ini_set ('display_errors', 'On');
error_reporting(E_ALL);
include '../../inc/stats.php';
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Arrays declareren voor opslag van fouten en data
$aErrors = array();
$aData = array();
// Velden die in het formulier aanwezig moeten zijn
$aFormulierVelden = array('NAAM_afzender', 'EMAIL_afzender', 'Bericht',);
// Alle formuliervelden doorlopen
foreach($aFormulierVelden as $sVeld)
{
// Controleren of er een waarde voor het formulierveld bestaat
if(isset($_POST[$sVeld]))
{
// Spaties aan begin en eind weghalen
$sValue = trim($_POST[$sVeld]);
// Controle of variabele gevuld is
if(empty($sValue))
{
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
else
{
$aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
}
}
// Controleren of er geen fouten opgetreden zijn
if(empty($aErrors))
{
// Formulier succes!
echo '<p>Je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:</p>';
echo '<p>Naam: '.$aData['NAAM_afzender'].'<br />';
echo 'Email: '.$aData['EMAIL_afzender'].'</br >';
echo 'Bericht: '.$aData('Bericht').'</p>';
}
else
{
// Fouten opgetreden: weergeven en terug naar formulier
header('Refresh: 3; url=verwerk.php');
foreach($aErrors as $sError)
{
echo '<p style="color:red">'.$sError.'</p>';
}
}
}
else
{
// Verwerk.php mag nog niet bezocht worden, terug naar het formulier
header('Location: verwerk.php');
}
?>
ini_set ('display_errors', 'On');
error_reporting(E_ALL);
include '../../inc/stats.php';
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Arrays declareren voor opslag van fouten en data
$aErrors = array();
$aData = array();
// Velden die in het formulier aanwezig moeten zijn
$aFormulierVelden = array('NAAM_afzender', 'EMAIL_afzender', 'Bericht',);
// Alle formuliervelden doorlopen
foreach($aFormulierVelden as $sVeld)
{
// Controleren of er een waarde voor het formulierveld bestaat
if(isset($_POST[$sVeld]))
{
// Spaties aan begin en eind weghalen
$sValue = trim($_POST[$sVeld]);
// Controle of variabele gevuld is
if(empty($sValue))
{
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
else
{
$aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
}
}
// Controleren of er geen fouten opgetreden zijn
if(empty($aErrors))
{
// Formulier succes!
echo '<p>Je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:</p>';
echo '<p>Naam: '.$aData['NAAM_afzender'].'<br />';
echo 'Email: '.$aData['EMAIL_afzender'].'</br >';
echo 'Bericht: '.$aData('Bericht').'</p>';
}
else
{
// Fouten opgetreden: weergeven en terug naar formulier
header('Refresh: 3; url=verwerk.php');
foreach($aErrors as $sError)
{
echo '<p style="color:red">'.$sError.'</p>';
}
}
}
else
{
// Verwerk.php mag nog niet bezocht worden, terug naar het formulier
header('Location: verwerk.php');
}
?>
Gewijzigd op 28/07/2024 10:33:54 door - Ariën -
En wat is je probleem of vraag?
Toevoeging op 25/07/2024 15:09:20:
Aanvulling. Krijg 2 foutmeldingen over regel 5. Daarna foutmelding dat Bericht niet is gepost.
Blijkbaar heb je een veld in je HTML die niet genoemd is op lijn 14.
Kan het fout gaan, omdat Bericht een textarea betreft?
Gewijzigd op 26/07/2024 11:56:24 door - Ariën -
Warning: include(../../inc/stats.php): Failed to open stream: No such file or directory in I:\xampp\htdocs\Php\Test\verwerk.php on line 5
Warning: include(): Failed opening '../../inc/stats.php' for inclusion (include_path='I:\xampp\php\PEAR') in I:\xampp\htdocs\Php\Test\verwerk.php on line 5
Je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:
Naam: 1
Email: 2
Fatal error: Uncaught Error: Array callback must have exactly two elements in I:\xampp\htdocs\Php\Test\verwerk.php:48 Stack trace: #0 {main} thrown in I:\xampp\htdocs\Php\Test\verwerk.php on line 48
het lukt niet om de file ../../inc/stats.php te lezen om hem te includen.
Afhankelijk van wat daarin staat en of je dat voor de rest van je script nodig hebt, kan dat vervelend uitpakken.
Dus stap 1: zoek uit waar dat bestand wel staat, want kennelijk niet in I:\xampp\inc\
---
het vreemde van de "succes"melding is, dat daar niet Bericht genoemd wordt, terwijl die regel gewoon achter staat in je script.
Klopt het dat je voor naam en email "1" en "2" hebt ingevuld?
Mogelijk is het ook zinnig om het html-form erbij te vermelden. Klopt die name-property bijvoorbeeld?
is fout. Je moet blokhaken gebruiken:
Vandaar die call-back error.
1 en 2 heb ik ingevuld om controle op juiste invulling te zien. Ik moet dus nog regels vinden voor controle letters en email en bericht.
Ik voeg nu contact.html toe.
Code (php)
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
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
<!DOCTYPE html>
<html lang="nl">
<head>
<title>Contactformulier</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" type="text/css" media="screen,print" href="styles/sjabloon.css"/>
<script type="text/javascript" src="scripts/general.js"></script>
<script type="text/javascript" src="scripts/namen_index.js"></script>
<script type="text/javascript">
<!--
function RadioClicked(EnableList) {
var SelectList = getObject("formfield_2");
var emptyOptionTwo = ' ';
var tmpDN;
if (EnableList == "true") {
SelectList.disabled = false;
SelectList[0].text = emptyOptionTwo;
SelectList[0].value = "-1";
for (i=0;i<personen.length;i++) {
tmpDN = personen[i].xAchternaam + ", " + personen[i].xDisplayName + " " + personen[i].xGeboorteDT + " " + personen[i].xSterfDTjs;
tmpDN = tmpDN.replace( /<[^<>]+>/g,'');
SelectList[i+1]= new Option(tmpDN);
SelectList[i+1].value = tmpDN;
}
} else {
SelectList.disabled = true;
}
}
//-->
</script>
</head>
<body>
<div id="menu">
<p>Menu</p>
<a href="index.html">Home</a>
<a href="parenteel.html">Parenteel</a>
<a href="familie_cirkel.html">Familiecirkel</a>
<a href="kwartierstaat.html">Kwartierstaat</a>
<a href="kwartier_txt.html" class="submenu">Tekstueel</a>
<a href="kwartier_blad.html" class="submenu">Kwartierblad</a>
<a href="kwartier_cirkel.html" class="submenu">Kwartiercirkel</a>
<a href="namen_index.html">Namen index</a>
<a href="contact.html">Contact</a>
<a href="zoeken.html">Zoeken</a>
</div>
<div id="ald_banner"><img src="images/aldfaer.jpg" alt="alfaer logo" /> <center><a href="http://www.aldfaer.org">Aldfaer</a></center></div>
<div id="content">
<h1>Contactformulier Familie</h1>
<form method="post" action="verwerk.php" name="Contactformulier Familie Kamphof">
<fieldset style="border:none;">
<input type="hidden" name="recipients" value="[email protected]"/>
<input type="hidden" name="subject" value="[STAMBOOM] Reactie vanaf website Kamphof"/>
<input type="hidden" name="good_url" value="bedankt.html"/>
</fieldset>
<table>
<colgroup>
<col width="100"/>
<col width="275"/>
</colgroup>
<tr>
<td colspan="2"><input type="radio" name="TYPE_reactie" checked="checked" onclick="RadioClicked('false');" value="Algemeen Contact">Algemeen Contact<input type="radio" name="TYPE_reactie" onclick="RadioClicked('true');" value="Fout Rapporteren">Fout in Stamboom melden<input type="radio" name="TYPE_reactie" onclick="RadioClicked('false');" value="Sjabloon Vraag">Sjabloon vraag</td>
</tr>
<tr>
<td><strong><label for="formfield_2">Fout melden over</label></strong></td>
<td><select name="FOUT_over" disabled="disabled" id="formfield_2">
<option>Ja</option>
<option>Nee</option>
</select>
</td>
</tr>
<tr>
<td><strong><label for="formfield_3">Naam</label></strong></td>
<td><input class="inputmessage" type="text" name="NAAM_afzender" id="formfield_3" size="30" required></td>
</tr>
<tr>
<td><strong><label for="formfield_4">E-mail</label></strong></td>
<td><input class="inputmessage" type="text" name="EMAIL_afzender" id="formfield_4" size="30" required></td>
</tr>
<tr>
<td><strong><label for="formfield_5">Bericht</label></strong></td>
<td><textarea class="inputmessage" name="Bericht" id="formfield_5" rows="6" cols="45" required></textarea></td>
<tr>
<td> </td>
<td><input type="submit" class="btn" value="Verzenden" /> <input type="reset" class="btn" value="Wissen" name="B1" /></td>
</tr>
</table>
</form>
</div>
<div id="footer">
<address>
Gegenereerd met <a href="http://www.aldfaer.org/" title="Aldfaer Website">Aldfaer</a> versie 10.1 op 16-07-2024 om 12:27:43<br />
</address>
</div>
</body>
</html>
<html lang="nl">
<head>
<title>Contactformulier</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" type="text/css" media="screen,print" href="styles/sjabloon.css"/>
<script type="text/javascript" src="scripts/general.js"></script>
<script type="text/javascript" src="scripts/namen_index.js"></script>
<script type="text/javascript">
<!--
function RadioClicked(EnableList) {
var SelectList = getObject("formfield_2");
var emptyOptionTwo = ' ';
var tmpDN;
if (EnableList == "true") {
SelectList.disabled = false;
SelectList[0].text = emptyOptionTwo;
SelectList[0].value = "-1";
for (i=0;i<personen.length;i++) {
tmpDN = personen[i].xAchternaam + ", " + personen[i].xDisplayName + " " + personen[i].xGeboorteDT + " " + personen[i].xSterfDTjs;
tmpDN = tmpDN.replace( /<[^<>]+>/g,'');
SelectList[i+1]= new Option(tmpDN);
SelectList[i+1].value = tmpDN;
}
} else {
SelectList.disabled = true;
}
}
//-->
</script>
</head>
<body>
<div id="menu">
<p>Menu</p>
<a href="index.html">Home</a>
<a href="parenteel.html">Parenteel</a>
<a href="familie_cirkel.html">Familiecirkel</a>
<a href="kwartierstaat.html">Kwartierstaat</a>
<a href="kwartier_txt.html" class="submenu">Tekstueel</a>
<a href="kwartier_blad.html" class="submenu">Kwartierblad</a>
<a href="kwartier_cirkel.html" class="submenu">Kwartiercirkel</a>
<a href="namen_index.html">Namen index</a>
<a href="contact.html">Contact</a>
<a href="zoeken.html">Zoeken</a>
</div>
<div id="ald_banner"><img src="images/aldfaer.jpg" alt="alfaer logo" /> <center><a href="http://www.aldfaer.org">Aldfaer</a></center></div>
<div id="content">
<h1>Contactformulier Familie</h1>
<form method="post" action="verwerk.php" name="Contactformulier Familie Kamphof">
<fieldset style="border:none;">
<input type="hidden" name="recipients" value="[email protected]"/>
<input type="hidden" name="subject" value="[STAMBOOM] Reactie vanaf website Kamphof"/>
<input type="hidden" name="good_url" value="bedankt.html"/>
</fieldset>
<table>
<colgroup>
<col width="100"/>
<col width="275"/>
</colgroup>
<tr>
<td colspan="2"><input type="radio" name="TYPE_reactie" checked="checked" onclick="RadioClicked('false');" value="Algemeen Contact">Algemeen Contact<input type="radio" name="TYPE_reactie" onclick="RadioClicked('true');" value="Fout Rapporteren">Fout in Stamboom melden<input type="radio" name="TYPE_reactie" onclick="RadioClicked('false');" value="Sjabloon Vraag">Sjabloon vraag</td>
</tr>
<tr>
<td><strong><label for="formfield_2">Fout melden over</label></strong></td>
<td><select name="FOUT_over" disabled="disabled" id="formfield_2">
<option>Ja</option>
<option>Nee</option>
</select>
</td>
</tr>
<tr>
<td><strong><label for="formfield_3">Naam</label></strong></td>
<td><input class="inputmessage" type="text" name="NAAM_afzender" id="formfield_3" size="30" required></td>
</tr>
<tr>
<td><strong><label for="formfield_4">E-mail</label></strong></td>
<td><input class="inputmessage" type="text" name="EMAIL_afzender" id="formfield_4" size="30" required></td>
</tr>
<tr>
<td><strong><label for="formfield_5">Bericht</label></strong></td>
<td><textarea class="inputmessage" name="Bericht" id="formfield_5" rows="6" cols="45" required></textarea></td>
<tr>
<td> </td>
<td><input type="submit" class="btn" value="Verzenden" /> <input type="reset" class="btn" value="Wissen" name="B1" /></td>
</tr>
</table>
</form>
</div>
<div id="footer">
<address>
Gegenereerd met <a href="http://www.aldfaer.org/" title="Aldfaer Website">Aldfaer</a> versie 10.1 op 16-07-2024 om 12:27:43<br />
</address>
</div>
</body>
</html>
Toevoeging op 27/07/2024 13:32:04:
Ik heb de laatste aanwijzingen in het script gezet met het volgende resultaat.
Warning: include(../../inc/stats.php): Failed to open stream: No such file or directory in I:\xampp\htdocs\Php\Test\verwerk.php on line 5
Warning: include(): Failed opening '../../inc/stats.php' for inclusion (include_path='I:\xampp\php\PEAR') in I:\xampp\htdocs\Php\Test\verwerk.php on line 5
Je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:
Quote:
Behalve inc/stats werkt het zo te zien goed.
Kan ik die regel verwijderen? Werkt het in deze vorm nu ook op internet of moet ik iets over verzenden toevoegen.
Ik zoek nog wel regels om de letters en email op juistheid te controleren. Staan die ook op de site?
Gewijzigd op 28/07/2024 17:54:10 door - Ariën -
Niemand is gebaat bij je e-mailadres die je nu openbaar plaatst. ;-)
Gewijzigd op 27/07/2024 14:18:43 door - Ariën -
Staat er ook iets op de site over het versturen van e-mail met het verwerk.php bestand, dat nu werkt.
Ook zoek ik nog een regel om de letters en het e-mail adres te valideren en waar ik die rels precies moet neerzetten.
![Afbeelding Afbeelding](https://www.phphulp.nl/img/icon/forum/edit.png)
Validatie kan erin, maar het is wel wat complexer als je alle velden benoemt, zonder aan te geven wat voor velden het zijn, en hoe die gevalideerd moeten worden.
In feite zou je jouw array kunnen uitbouwen:
Code (php)
1
2
3
4
2
3
4
$aFormulierVelden = array(
'NAAM_afzender' => 'text',
'EMAIL_afzender' => 'e-mail',
'Bericht' => 'text');
'NAAM_afzender' => 'text',
'EMAIL_afzender' => 'e-mail',
'Bericht' => 'text');
En dan aan de hand van aFormulierVelden[1] (of het text of e-mail is) aangeven welke validatie plaats moet vinden per veld. Maar dan is het de vraag of je dit nog verder wilt uitkristalliseren naar de minimale lengte, maximale lengte, verplichte tekenreeks.
Maar dan kom je neer op wat dit doet:
https://github.com/SandroMiguel/verum-php
Of je kan het simpeler maken, door geen array te gebruiken, en al je velden handmatig te controleren met aparte if-statements.
Toevoeging op 28/07/2024 18:23:22:
Lijn 16 t/m 32 (excl de start en sluittag):
Code (php)
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
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
<?php
/* Bericht */
// Controleren of er een waarde voor het formulierveld bestaat
if (isset($_POST['bericht'])) {
// Spaties aan begin en eind weghalen
$sValue = trim($_POST['bericht']);
// Controle of variabele gevuld is
if (empty($sValue)) {
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om ' . $sVeld . ' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
/* E-mail */
if (isset($_POST['emailadres'])) {
// Spaties aan begin en eind weghalen
$sValue = trim($_POST['emailadres']);
// Controle of variabele gevuld is
if (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
$aErrors[] = 'Het e-maialdres is niet correct ingevuld';
}
// Ingevulde waarde aan data array toevoegen
$aData[$sVeld] = $sValue;
}
?>
/* Bericht */
// Controleren of er een waarde voor het formulierveld bestaat
if (isset($_POST['bericht'])) {
// Spaties aan begin en eind weghalen
$sValue = trim($_POST['bericht']);
// Controle of variabele gevuld is
if (empty($sValue)) {
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om ' . $sVeld . ' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
/* E-mail */
if (isset($_POST['emailadres'])) {
// Spaties aan begin en eind weghalen
$sValue = trim($_POST['emailadres']);
// Controle of variabele gevuld is
if (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
$aErrors[] = 'Het e-maialdres is niet correct ingevuld';
}
// Ingevulde waarde aan data array toevoegen
$aData[$sVeld] = $sValue;
}
?>
Gewijzigd op 28/07/2024 18:23:49 door - Ariën -
Nu moet het contactformulier nog van mijn verzonden worden met mail. Hoe gaat dat precies en waar moet ik de regels plaatsen?
"Formulier succes!"
Daar moet je de mailfunctie plaatsen.
Bedankt
Graag gedaan!