mobiel en vast nummer checken in formulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tortuga web

tortuga web

18/05/2014 15:51:20
Quote Anchor link
Hallo,
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)
PHP script in nieuw venster Selecteer het PHP script
1
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';

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?
 
PHP hulp

PHP hulp

26/04/2024 23:39:40
 
- SanThe -

- SanThe -

18/05/2014 17:01:11
Quote Anchor link
Geef and en or haakjes.

Dit:
... and (... or ...)
is wat anders dan dit:
(... and ...) or ...
 
Ivo P

Ivo P

18/05/2014 17:15:46
Quote Anchor link
klopt het dat bij jouw script de telefoonnummers uit 9 cijfers moeten bestaan?
 
Tortuga web

tortuga web

19/05/2014 07:45:06
Quote Anchor link
@SanThe: Dat ben ik nooit eerder tegengekomen, kun je er iets meer over zeggen hoe dat werkt?

@Ivo: Yep, 'spanish rules'
 
Ivo P

Ivo P

19/05/2014 12:39:46
Quote Anchor link
Dan is het eerste cijfer waarschijnlijk altijd 9?

Geen buitenlandse nummers toegestaan?
 
Tortuga web

tortuga web

19/05/2014 13:04:24
Quote Anchor link
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.
 
Ivo P

Ivo P

19/05/2014 13:21:03
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if(filter_input(INPUT_POST, 'num-1') || filter_input(INPUT_POST, 'num-2'))
{
  
}

else
{
   echo 'vul minimaal 1 nummer in';
}

?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if(filter_input(INPUT_POST, 'num-1', FILTER_VALIDATE_INT) || filter_input(INPUT_POST, 'num-2' ,FILTER_VALIDATE_INT))
{
  
}

else
{
   echo 'vul minimaal 1 nummer in';
}

?>



Toevoeging op 19/05/2014 15:16:59:

Je hebt dan nog steeds geen controle op de lengte van het nummer trouwens.
 
Tortuga web

tortuga web

21/05/2014 10:42:25
Quote Anchor link
Ik ben nog steeds op zoek naar een oplossing met gebruik van preg_match.
Werkelijk niemand die me helpen kan????
 
Jacco Engel

Jacco Engel

21/05/2014 10:55:50
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
<?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';
}

?>


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

tortuga web

21/05/2014 10:58:24
Quote Anchor link
Hoezo dat dan, wat is er mis mee?

En nee, dit is het ook niet.
Gewijzigd op 21/05/2014 12:06:52 door tortuga web
 
Jacco Engel

Jacco Engel

21/05/2014 12:48:24
Quote Anchor link
Tortuga web op 21/05/2014 10:58:24:
Hoezo dat dan, wat is er mis mee?

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
 
Tortuga web

tortuga web

21/05/2014 13:01:53
Quote Anchor link
Uiteraard de data uit een formulier.
$_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
 
Jacco Engel

Jacco Engel

21/05/2014 13:44:24
Quote Anchor link
Welke data vul jij in je formulier dat niet het gewenste resultaat geeft? Mijn code zou normaal gesproken perfect moeten doen wat jij wil (voor zover ik begrijp) dus ofwel je geeft onvolledige informatie of je input is iets anders dan jij nu aangeeft.

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
 
Tortuga web

tortuga web

21/05/2014 16:43:13
Quote Anchor link
Nou, gewoon een nummer met 9 cijfers, bv 941345987.
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.
 
Ivo P

Ivo P

21/05/2014 18:03:46
Quote Anchor link
geef eens de code die je nu gebruikt.

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
 
Tortuga web

tortuga web

21/05/2014 18:27:40
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
$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';
}

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.
 
Ivo P

Ivo P

21/05/2014 18:31:58
Quote Anchor link
wat doet dit:

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
<?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';
}

?>


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)
 
Tortuga web

tortuga web

21/05/2014 18:51:21
Quote Anchor link
Oke, heb het zo aangepast en krijg:
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
 
Ivo P

Ivo P

21/05/2014 18:58:01
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
<?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>';
}

?>
 
Tortuga web

tortuga web

21/05/2014 19:00:44
Quote Anchor link
Ik heb de oplossing gevonden!

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



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.