formulier controle
Ik wil een de invoer velden van een formulier controleren.
Maar ik krijg het niet voorelkaar.
Code (php)
De controle:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php // Kleurtjes
if(!trim($_POST['naam'])) {
echo 'Er is geen naam ingevuld<br />';
}
if(!eregi("[A-Za-z0-9_-]+([.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([.]{1}[A-Za-z0-9-]+)+", $_POST['email'])) {
echo 'Er is geen geldig e-mailadres ingevuld<br />';
}
if(!trim($_POST['bericht'])) {
echo'Er is geen bericht ingevuld<br />';
}
[/code]
Ik heb het geprobeerd, maar krijg het niet werkend.
Kan iemand mij helpen?
[quote=Modedit]Code in [ignore][code][/ignore]-tags geplaatst[/quote]
if(!trim($_POST['naam'])) {
echo 'Er is geen naam ingevuld<br />';
}
if(!eregi("[A-Za-z0-9_-]+([.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([.]{1}[A-Za-z0-9-]+)+", $_POST['email'])) {
echo 'Er is geen geldig e-mailadres ingevuld<br />';
}
if(!trim($_POST['bericht'])) {
echo'Er is geen bericht ingevuld<br />';
}
[/code]
Ik heb het geprobeerd, maar krijg het niet werkend.
Kan iemand mij helpen?
[quote=Modedit]Code in [ignore][code][/ignore]-tags geplaatst[/quote]
Gewijzigd op 28/05/2010 09:59:22 door Chris -
Mijn probleem is vooral dat ik deze twee delen niet samen gevoegd krijg.
Het formulier werk goed en de controle heb ik uit eeen ander formulier.
Ik probeer dus, controleer naam, email, bericht als dat goed is insert_mail
Jullie aanpassingen zal ik doen!
Gewijzigd op 26/05/2010 23:18:46 door Dennis D
Kijk eens naar isset & empty & strlen.
Verder inderdaad preg_match gebruiken. Ik kan je aanraden deze ergens van internet te plukken, of je moet erg gedreven zijn in het leren van regexp, maar dit is nog best lastig.
Succes
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
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
<?php
// Includes
require('config.php');
include('form.php');
if (isset($_POST['email'])) {
// Je controle
if(!trim($_POST['naam'])) {
$fout = 'Er is geen naam ingevuld<br />';
}
if (((preg_match('/^\w[-.\w]*@(\w[-._\w]*\.[a-zA-Z]{2,}.*)$/', $_POST['email'])) ? '0' : '1') == '1') {
$fout = 'Er is geen geldig e-mailadres ingevuld<br />';
}
if(!trim($_POST['bericht'])) {
$fout = 'Er is geen bericht ingevuld<br />';
}
// Fouten
if (empty($fout)) {
insert_mail();
} else {
echo "$fout";
}
}
?>
// Includes
require('config.php');
include('form.php');
if (isset($_POST['email'])) {
// Je controle
if(!trim($_POST['naam'])) {
$fout = 'Er is geen naam ingevuld<br />';
}
if (((preg_match('/^\w[-.\w]*@(\w[-._\w]*\.[a-zA-Z]{2,}.*)$/', $_POST['email'])) ? '0' : '1') == '1') {
$fout = 'Er is geen geldig e-mailadres ingevuld<br />';
}
if(!trim($_POST['bericht'])) {
$fout = 'Er is geen bericht ingevuld<br />';
}
// Fouten
if (empty($fout)) {
insert_mail();
} else {
echo "$fout";
}
}
?>
Echter zou ik !trim veranderen naar iets als dit:
Gewijzigd op 26/05/2010 23:25:50 door Sander de Vos
Top man, bedankt het werkt!
Is strlen een beter comando dan trim?
en, Wat betekend (of doet) de < 1 in de code?
strlen() doet gewoon heel wat anders dan trim(). De laatste die je nu gebruikt geeft de lengte van de string terug en die < 1 vergelijkt dus of die waarde kleiner is dan 1.
Tip: zie de php.net handleiding als je niet precies weet wat een php functie doet...
De functie Tip: zie de php.net handleiding als je niet precies weet wat een php functie doet...
Ik zou het persoonlijk zo doen
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
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
<?php
# Bestanden includen
include_once 'config.php';
include_once 'form.php'; // Deze snap ik niet.. Je geeft toch gewoon bij action de link van dit bestand op?
# Kijken of de pagina zichzelf heeft aangeroepen. Jouw controle moet nog worden uitgebreid
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['email'], $_POST['naam'], $_POST['bericht']))
{
# Errors bijhouden doormiddel van een array
$aErrors = array();
# Kijken of er een geldige naam is ingevoerd
if(is_string($_POST['naam']))
{
# Spaties voor en achter de input verwijderen
$aName = trim($_POST['naam']);
# Kijken of de input een bepaalde lengte heeft
if(strlen($_POST['naam']) < 3)
{
# Melding geven dat er teweining karakters is ingevoerd
$aErrors[] = 'Vul een naam in van minimaal 3 tekens lang';
}
# Je kan hier nog elseif maken om te controleren of hij langer is dan bv 25. Lengte van namen komen daar in de praktijk gezien niet boven
}
else
{
# Melding geven dat er geen valide naam is opgegeven
$aErrors[] = 'Vul een valide naam in';
}
# Kijken of er een geldig e-mailadres is ingevoerd
if(!is_string($_POST['email']) || !preg_match('#\A[-_a-z0-9\'+*$^&%=~!?{}]++(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d++)?\z#i', $_POST['email']))
{
# Melding dat er geen valid e-mailadres is ingevoerd
$aErrors[] = 'Vul a.u.b. een valide mailadres in.';
}
# Hier overige formulier validatie doen.. Dit is even een voorbeeld van hoe het wel moet.. want bijvoorbeeld if(!trim($_POST['bericht'])) { is niet echt de bedoeling.
}
# Om te controleren of er foutmeldingen zijn opgetreden kun je gebruik maken van de functie empty of count.. Allebei hier onder uitgewerkt
// Empty
if(!empty($aErrors))
{
foreach($aErrors as $errorContent)
{
echo $errorContent;
}
}
// Count
if(isset($aErrors) and count($aErrors) > 0 )
{
# Je kan hier ook gebruik maken van de methode implode. Ik gebruik altijd foreach, maar je mag zelf natuurlijk een andere optie kiezen. Ik geloof dat implode wel sneller is.
}
# Nu die mail functie aanroepen, eerst kijken of er fouten zijn opgetreden
if(empty($aErrors) and count($aErrors) == 0)
{
# Mail versturen
insert_mail();
}
?>
# Bestanden includen
include_once 'config.php';
include_once 'form.php'; // Deze snap ik niet.. Je geeft toch gewoon bij action de link van dit bestand op?
# Kijken of de pagina zichzelf heeft aangeroepen. Jouw controle moet nog worden uitgebreid
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['email'], $_POST['naam'], $_POST['bericht']))
{
# Errors bijhouden doormiddel van een array
$aErrors = array();
# Kijken of er een geldige naam is ingevoerd
if(is_string($_POST['naam']))
{
# Spaties voor en achter de input verwijderen
$aName = trim($_POST['naam']);
# Kijken of de input een bepaalde lengte heeft
if(strlen($_POST['naam']) < 3)
{
# Melding geven dat er teweining karakters is ingevoerd
$aErrors[] = 'Vul een naam in van minimaal 3 tekens lang';
}
# Je kan hier nog elseif maken om te controleren of hij langer is dan bv 25. Lengte van namen komen daar in de praktijk gezien niet boven
}
else
{
# Melding geven dat er geen valide naam is opgegeven
$aErrors[] = 'Vul een valide naam in';
}
# Kijken of er een geldig e-mailadres is ingevoerd
if(!is_string($_POST['email']) || !preg_match('#\A[-_a-z0-9\'+*$^&%=~!?{}]++(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d++)?\z#i', $_POST['email']))
{
# Melding dat er geen valid e-mailadres is ingevoerd
$aErrors[] = 'Vul a.u.b. een valide mailadres in.';
}
# Hier overige formulier validatie doen.. Dit is even een voorbeeld van hoe het wel moet.. want bijvoorbeeld if(!trim($_POST['bericht'])) { is niet echt de bedoeling.
}
# Om te controleren of er foutmeldingen zijn opgetreden kun je gebruik maken van de functie empty of count.. Allebei hier onder uitgewerkt
// Empty
if(!empty($aErrors))
{
foreach($aErrors as $errorContent)
{
echo $errorContent;
}
}
// Count
if(isset($aErrors) and count($aErrors) > 0 )
{
# Je kan hier ook gebruik maken van de methode implode. Ik gebruik altijd foreach, maar je mag zelf natuurlijk een andere optie kiezen. Ik geloof dat implode wel sneller is.
}
# Nu die mail functie aanroepen, eerst kijken of er fouten zijn opgetreden
if(empty($aErrors) and count($aErrors) == 0)
{
# Mail versturen
insert_mail();
}
?>
Iedereen bedankt, Vooral ook voor de duidelijke uitleg in het script.
Ik leer hier weer een hoop van!
De regel 5:include_once 'form.php'; // Deze snap ik niet..
Dit verwijst volgens mij naar het bestand waar het formulier staat.
"De regel 5:include_once 'form.php'; // Deze snap ik niet..
Dit verwijst volgens mij naar het bestand waar het formulier staat."
Ok, dat snap ik. Maar waarom doe je dat niet gewoon zo?
Code (php)
1
2
3
2
3
<form method="POST" action="./behandelhetformulier.php" />
// Hier je formulier
</form>
// Hier je formulier
</form>
Gewijzigd op 28/05/2010 09:34:59 door Niels K
Niels:
Bij elk script wat je maakt doe je het de volgende keer beter.
Dat is id zo! Bij alles wat je maakt doe je het de volgende keer beter.
Dat is misschien ook wel de rede dat ik niet niet snel 100% tevreden ben.
regel 5). Het <form> kan ook id wel gelijk onder het script staan.
vraagje:
Nu schrijft hij alles naar de db,..heel mooi
maar kan ik nu ook een kopie van de data gelijk per email versturen?
Zo ontvang ik ook gelijk een melding van een nieuw geplaatst bericht.
Gewijzigd op 29/05/2010 00:28:19 door Dennis D
"Het <form> kan ook id wel gelijk onder het script staan."
Dat bedoelde ik niet. Ik bedoelde dat je in je action een file op kan geven die je POST variabelen dus controleert. Je kunt dus dat 'include_once 'form.php';' weglaten zodra je hem in de actie zet. Zet je hem gewoon onder de form afhandeling gebruik je bij action deze action="" of deze: action="htmlspecialchars(basename($_SERVER['PHP_SELF']))"
Je tweede vraag: Ja dit kan. Kijk hier voor op mail()
Gewijzigd op 29/05/2010 11:51:40 door Niels K
<input type="button" name="step3" value="Verder naar Stap 3" onclick="SubmitForm(); return false;" ></td>
en de input als eerste stap laat controleren met javascript (in de <head>-section)
(zie onderstaande code). Vervolgens controleert de form met action="doeerwatmee.php" op de ingevoerde post.
Is dat ook een goed alternatief of te omslachtig? Het is wel makkelijk even de snelle check van javascript. Iemand wijze raad?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
echo " <script language=\"javascript\">\n";
echo " function SubmitForm() {\n";
echo " var form = document.forms[0];\n";
echo " var bRequired = true;\n";
echo " if ((form.fname.value.length < 1) ||\n";
echo " (form.lname.value.length < 1) ||\n";
echo " (form.address.value.length < 1) ||\n";
echo " (form.zip.value.length < 1) ||\n";
echo " (form.city.value.length < 1) ||\n";
echo " (form.email.value.length < 1)) {\n";
echo " alert(\"Minstens alle vereiste(*) velden invullen.\");\n";
echo " bRequired = false;\n";
echo " }\n";
echo " if (!bRequired) return false;\n";
echo " form.submit();\n";
echo " }\n";
echo " </script>\n";
?>
echo " <script language=\"javascript\">\n";
echo " function SubmitForm() {\n";
echo " var form = document.forms[0];\n";
echo " var bRequired = true;\n";
echo " if ((form.fname.value.length < 1) ||\n";
echo " (form.lname.value.length < 1) ||\n";
echo " (form.address.value.length < 1) ||\n";
echo " (form.zip.value.length < 1) ||\n";
echo " (form.city.value.length < 1) ||\n";
echo " (form.email.value.length < 1)) {\n";
echo " alert(\"Minstens alle vereiste(*) velden invullen.\");\n";
echo " bRequired = false;\n";
echo " }\n";
echo " if (!bRequired) return false;\n";
echo " form.submit();\n";
echo " }\n";
echo " </script>\n";
?>
Gewijzigd op 31/05/2010 13:14:04 door Wolf Wolf
Ten eerste is de php functie empty totaal zinloos, dus als je die gebruikt ben je niet goed bezig.
Zie: http://www.php.net/empty
The following things are considered to be empty:
0 (0 as an integer)
"0" (0 as a string)
En dan ziet ik nog constructies als:
wel, dat is ook nutteloze controle want waarden in superglobales zijn bij default nu eenmaal van het type string
Gebruik bij controleren valideren altijd functies als:
http://www.php.net/isset
http://www.php.net/ctype
http://www.php.net/manual/en/ref.pcre.php
http://www.php.net/trim
http://www.php.net/manual/en/language.operators.comparison.php
http://www.php.net/manual/en/language.operators.logical.php
In javascript form waarden controleren is leuk en aardig maar je zal het altijd ook aan de server kant moeten controleren en valideren
Gewijzigd op 31/05/2010 15:18:23 door Noppes Homeland
Noppes Homeland op 31/05/2010 15:10:52:
In javascript form waarden controleren is leuk en aardig maar je zal het altijd ook aan de server kant moeten controleren en valideren
Dat is ook wat ik schreef "als eerste controle". Deze controle vindt dan client-side plaats. Waarom onnodig een script server-side uitvoeren?
Afgezien van het feit dat er met javascript nog meer checks/omzettingen kunnen plaatsvinden zal er natuurlijk altijd na akkoord en verzending vanaf client-side(browser) op server-side worden gecontroleerd op validity van de inputwaarden.