mobiel en vast nummer checken in formulier
In een formulier moet een telefoonnummer ingevuld, wat een vast nummer, een mobiel nummer of beide kan zijn.
Voorwaarde is dat er 1 nummer zeker ingevuld moet worden. Nu heb ik in mijn controle-script het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
$errors = array();
if (!empty($_POST)) {
if (empty($_POST['num-1']) and empty($_POST['num-2'])
or trim($_POST['num-1']) =='' and trim($_POST['num-2']) == '')
$errors['num'] = TRUE;
if (isset($_POST['num-1']) and (!preg_match( '~^[0-9]{9}$~', $_POST['num-1'])))
$errors['num'] = TRUE;
elseif (isset($_POST[num-2']) and (!preg_match( '~^[0-9]{9}$~', $_POST['num-2'])))
$errors['num'] = TRUE;
}
if (empty($errors))
echo 'Alles gepost';
else
echo 'foutje';
if (!empty($_POST)) {
if (empty($_POST['num-1']) and empty($_POST['num-2'])
or trim($_POST['num-1']) =='' and trim($_POST['num-2']) == '')
$errors['num'] = TRUE;
if (isset($_POST['num-1']) and (!preg_match( '~^[0-9]{9}$~', $_POST['num-1'])))
$errors['num'] = TRUE;
elseif (isset($_POST[num-2']) and (!preg_match( '~^[0-9]{9}$~', $_POST['num-2'])))
$errors['num'] = TRUE;
}
if (empty($errors))
echo 'Alles gepost';
else
echo 'foutje';
Als ik nu 2 telefoonnummers invoer gaat het goed. Ook als ik nu de laatste if of elseif weghaal, en op 1 nummer check, dan werkt het ook. Maar met bovenstaand script krijg ik het niet voor elkaar om 1 nummer in te geven en dat te checken. Ik heb vanalles geprobeerd met isset 1 wel en 1 niet, maar ook dat gaf geen oplossing.
Kan iemand me helpen hoe ik dit voor elkaar kan krijgen?
Dit:
... and (... or ...)
is wat anders dan dit:
(... and ...) or ...
klopt het dat bij jouw script de telefoonnummers uit 9 cijfers moeten bestaan?
@Ivo: Yep, 'spanish rules'
Geen buitenlandse nummers toegestaan?
Kom op Ivo. De nummercheck is oke en behoort niet tot m´n vraag. Ik wil graag weten hoe ik de en/of check oplos.
Code (php)
Dat is stap 1: controleren of er een nummer is ingevuld.
Daarna komt de stap om te kijken of de ingevoerde waarde(n) voldoen aan je nummer check.
Dat kun je ofwel doen met de regex, maar daarvoor kun je ook de 3e parameter van filter_input gebruiken.
hierbij zijn 2 situaties:
1) je eist dat iemand alleen cijfers invult in dus niet 999-123456
2) je stript alles wat geen cijfer is eruit.
Laten we voor het gemak uitgaan van 1:
Code (php)
Toevoeging op 19/05/2014 15:16:59:
Je hebt dan nog steeds geen controle op de lengte van het nummer trouwens.
Werkelijk niemand die me helpen kan????
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
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
<?php
$errors = array();
if (!empty($_POST)) {
$nummer1 = trim($_POST['num-1'])
$nummer2 = trim($_POST['num-2'])
//Als beide nummers leeg zijn
if(empty($nummer1) && empty($nummer2)) {
$errors['num'] = true;
}
//validatie die alleen word uitgevoerd als nummer 1 is ingevuld
if(!empty($nummer1)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer1);
}
//validatie die alleen word uitgevoerd als nummer 2 is ingevuld
if(!empty($nummer2)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer2);
}
}
if (!$error)) {
echo 'Alles gepost';
} else {
echo 'foutje';
}
?>
$errors = array();
if (!empty($_POST)) {
$nummer1 = trim($_POST['num-1'])
$nummer2 = trim($_POST['num-2'])
//Als beide nummers leeg zijn
if(empty($nummer1) && empty($nummer2)) {
$errors['num'] = true;
}
//validatie die alleen word uitgevoerd als nummer 1 is ingevuld
if(!empty($nummer1)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer1);
}
//validatie die alleen word uitgevoerd als nummer 2 is ingevuld
if(!empty($nummer2)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer2);
}
}
if (!$error)) {
echo 'Alles gepost';
} else {
echo 'foutje';
}
?>
Dat zou hem ongeveer moeten zijn.
En tip, probeer iets netter te coden, daar worden problemen mischien niet mee opgelost, maar wel makkelijker te vinden
Gewijzigd op 21/05/2014 10:58:14 door Jacco Engel
Tortuga web op 21/05/2014 10:58:24:
Hoezo dat dan, wat is er mis mee?
En nee, dit is het ook niet.
En nee, dit is het ook niet.
Ok welke data gebruik je om te testen?
En verander je regexp eens in ^[0-9]{2,5}(-)?[0-9]{5,8}$ , geteste matches voor deze expression :
0600000000
06-00000000
052200000000
0522-000000
038-0000000
0380000000
Enige wat je zelf nog even moet doen is controleren of je string 10 of elf karakters lang is
Gewijzigd op 21/05/2014 12:56:30 door Jacco Engel
$_POST['fijo'] en $_POST['movil'], jou num-1 en num-2, overigens wél met ; aan het eind.
Het is nog veel simpeler: gewoon enkel en alleen 9 cijfers, niks meer en niks minder.
Die test werkt wel maar niet:
allebei leeg = fout
1 of de ander ingevuld = goed, maar krijg ik niet voor elkaar
2 ingevuld ook goed, en werkt.
Gewijzigd op 21/05/2014 13:04:43 door tortuga web
Daarom zou ik graag , indien je nog hulp (van mij iig) wil willen weten op basis van welke data jij een resultaat krijgt dat je niet verwacht
Dus, bij num-1 vul ik dit nummer in, en num-2 laat ik leeg. Dan geeft de uitvoer dat num-2 niet klopt en vv.
Vul ik bij num-1 987345259 en bij num-2 654987123 in dan krijg ik wél de return TRUE, dus de individuele nummercheck klopt wel, maar laat niet toe dat 1 van beide leeg is. En wat ik zoek is dat dat dus wel kan.
Het laatste stuk script hierboven geeft namelijk true als er een fout optreedt, en dat lijkt wat in tegenspraak met je laatste opmerking over TRUE
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
$errors = array();
if (!empty($_POST)) {
$nummer1 = trim($_POST['num-1']);
$nummer2 = trim($_POST['num-2']);
if(empty($nummer1) && empty($nummer2)) {
$errors['nummer'] = TRUE;
}
if(!empty($nummer1)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer1);
}
if(!empty($nummer2)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer2);
}
}
if (!$error)) {
echo 'Alles gepost';
} else {
echo 'foutje';
}
if (!empty($_POST)) {
$nummer1 = trim($_POST['num-1']);
$nummer2 = trim($_POST['num-2']);
if(empty($nummer1) && empty($nummer2)) {
$errors['nummer'] = TRUE;
}
if(!empty($nummer1)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer1);
}
if(!empty($nummer2)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer2);
}
}
if (!$error)) {
echo 'Alles gepost';
} else {
echo 'foutje';
}
Dit is letterlijk wat Jacco aangeeft, met verbetering van de ; natuurlijk.
Geen nummers geeft ERROR
1 nummer geeft ERROR
2 nummers geeft OKE
Dus m.i. is de nummercheck wel oke, maar niet dat er slechts 1 nummer ingevuld kan worden.
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
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
<?php
$errors = array();
if (!empty($_POST)) {
$nummer1 = trim($_POST['num-1']);
$nummer2 = trim($_POST['num-2']);
if(empty($nummer1) && empty($nummer2)) {
$errors['nummer'] = TRUE;
echo 'beide zijn leeg';
}
if(!empty($nummer1)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer1);
if($errors['num']) {
echo 'fout met formaat num1';
}
}
if(!empty($nummer2)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer2);
if($errors['num']) {
echo 'fout met formaat num2';
}
}
}
if (!$error)) {
echo 'Alles gepost';
} else {
echo 'foutje';
}
?>
$errors = array();
if (!empty($_POST)) {
$nummer1 = trim($_POST['num-1']);
$nummer2 = trim($_POST['num-2']);
if(empty($nummer1) && empty($nummer2)) {
$errors['nummer'] = TRUE;
echo 'beide zijn leeg';
}
if(!empty($nummer1)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer1);
if($errors['num']) {
echo 'fout met formaat num1';
}
}
if(!empty($nummer2)) {
$errors['num'] = !preg_match( '~^[0-9]{9}$~', $nummer2);
if($errors['num']) {
echo 'fout met formaat num2';
}
}
}
if (!$error)) {
echo 'Alles gepost';
} else {
echo 'foutje';
}
?>
Toevoeging op 21/05/2014 18:33:27:
en ik zie dat je op regel 7 nu de index 'nummer' gebruikt.
Gebruik dan ook eens $error['num1'] en num2, om op regel 26 een dump van $error te kunnen doen. (ipv mijn debug regels met echo)
Als beide leeg zijn de melding: Fout: beide leeg
Als ik er 1 invul krijg ik de melding Fout, maar geen respons van de echo
Hetzelfde als ik er 2 invul.
Maakt trouwens niet uit of ik de naam van de $error verander, in antwoord op je laatste toevoeging
En trouwens: de debug regels houd ik er graag in
Gewijzigd op 21/05/2014 18:52:33 door tortuga web
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
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
<?php
$errors = array();
if (!empty($_POST)) {
$nummer1 = trim($_POST['num-1']);
$nummer2 = trim($_POST['num-2']);
if(empty($nummer1) && empty($nummer2)) {
$errors['nummers'] = TRUE;
echo 'beide zijn leeg';
}
if(!empty($nummer1)) {
$errors['num1'] = !preg_match( '~^[0-9]{9}$~', $nummer1);
if($errors['num1']) {
echo 'fout met formaat num1';
}
}
if(!empty($nummer2)) {
$errors['num2'] = !preg_match( '~^[0-9]{9}$~', $nummer2);
if($errors['num2']) {
echo 'fout met formaat num2';
}
}
}
if (!$error)) {
echo 'Alles gepost';
} else {
echo 'foutje';
echo '<pre>*' . print_r($error,1).'</pre>';
}
?>
$errors = array();
if (!empty($_POST)) {
$nummer1 = trim($_POST['num-1']);
$nummer2 = trim($_POST['num-2']);
if(empty($nummer1) && empty($nummer2)) {
$errors['nummers'] = TRUE;
echo 'beide zijn leeg';
}
if(!empty($nummer1)) {
$errors['num1'] = !preg_match( '~^[0-9]{9}$~', $nummer1);
if($errors['num1']) {
echo 'fout met formaat num1';
}
}
if(!empty($nummer2)) {
$errors['num2'] = !preg_match( '~^[0-9]{9}$~', $nummer2);
if($errors['num2']) {
echo 'fout met formaat num2';
}
}
}
if (!$error)) {
echo 'Alles gepost';
} else {
echo 'foutje';
echo '<pre>*' . print_r($error,1).'</pre>';
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$errors = array();
if (!empty($_POST)) {
if (empty($_POST['num-1']) and empty($_POST['num-2'])
or trim($_POST['num-1']) =='' and trim($_POST['num-2']) == ''){
$errors['num'] = 'Vul nummer in';
if (isset($_POST['num-1']) and (!preg_match( '~^[0-9]{9}$~', $_POST['num-1'])))
$errors['num'] = TRUE;
elseif (isset($_POST[num-2']) and (!preg_match( '~^[0-9]{9}$~', $_POST['num-2'])))
$errors['num'] = TRUE;
}
}
if (empty($errors))
echo 'Alles gepost';
else
echo 'foutje';
if (!empty($_POST)) {
if (empty($_POST['num-1']) and empty($_POST['num-2'])
or trim($_POST['num-1']) =='' and trim($_POST['num-2']) == ''){
$errors['num'] = 'Vul nummer in';
if (isset($_POST['num-1']) and (!preg_match( '~^[0-9]{9}$~', $_POST['num-1'])))
$errors['num'] = TRUE;
elseif (isset($_POST[num-2']) and (!preg_match( '~^[0-9]{9}$~', $_POST['num-2'])))
$errors['num'] = TRUE;
}
}
if (empty($errors))
echo 'Alles gepost';
else
echo 'foutje';