Form controlle tel-nummer fout.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Arthur Heijmen

Arthur Heijmen

04/05/2013 14:51:24
Quote Anchor link
Voor het contact formulier, gebruil ik een fout controlle.
Die is opgebouwd ui Naam,E-mail,Onderwerp,Telefoon en tekst.
Bijna alles werkt zo als het moet werken.
Alleen het gedeelte van de telefoon werkt niet goed.

Dit hier onder is het stukje script waar het om gaat.
Voor de telefoon staat tussen regel 28 t/m 33.
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
<?

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
  {

    $aFouten = array();
//-----------------------------------------------------------------------------naam
    if($_POST['naam'] == '')
      {

        $aFouten[] = 'Geen naam ingevuld !';
       }

           $field = $_POST["naam"];
             if(!ctype_alpha($field)){
               $aFouten[] = 'Geen geldig naam ingevuld !';
        }
      
//-----------------------------------------------------------------------------email
      if($_POST['e_mail'] == '')
        {

          $aFouten[] = 'Geen email ingevuld !';
        }

        if(!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $_POST['e_mail'])) {    
            $aFouten[] = 'Geen geldig email adres ingevuld !';  
        }

//-----------------------------------------------------------------------------onderwerp        
           if($_POST['onderwerp'] == '')
            {

               $aFouten[] = 'Geen onderwerp ingevuld !';
            }

//-----------------------------------------------------------------------------telefoon
              if(preg_match("/[0-9]{2}-[0-9]{8}/",$_POST['telefoon']) OR preg_match("/[0-9]{3}-[0-9]{7}/",$_POST['telefoon']) OR preg_match("/[0-9]{4}-[0-9]{6}/", $_POST['telefoon']))
                {

                  $aFouten[] = 'Geen geldig nummer ingevuld !';
                }

//-----------------------------------------------------------------------------tekst
               if($_POST['text'] == '')
                  {

                     $aFouten[] = 'Geen tekst ingevuld !';
                  }

                     $string = $_POST["text"];
                     if(!preg_match("^[\.\,\?\!\€0-9a-zA-Z ]+$^",$string))
                   {
    
                     $aFouten[] = 'Geen geldig tekst ingevuld !';  
                  
                   }
      
//-----------------------------------------------------------------------------einde
                      
        if(count($aFouten) != 0)
?>

Waar ga ik hier de fout in?
Gewijzigd op 04/05/2013 14:51:59 door Arthur Heijmen
 
PHP hulp

PHP hulp

20/04/2024 14:25:20
 
Roy -

Roy -

04/05/2013 15:46:29
Quote Anchor link
Waarom niet simpelweg alles behalve nummer strippen en kijken of het resultaat 10 karakters heeft?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if(strlen(ereg_replace("[^0-9]", "", $_POST['telefoon'])) == 10){
 
Arthur Heijmen

Arthur Heijmen

04/05/2013 15:57:26
Quote Anchor link
Oke bedankt, dit werkt goed.
 
Obelix Idefix

Obelix Idefix

04/05/2013 16:08:59
Quote Anchor link
ereg_replace gaat je een foutmelding geven: This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged. Kijk naar preg_replace()

Wat als iemand +31 20 1234567 ingeeft? Dat is (internationaal) een geldig telefoonnummer (maar heeft 11 cijfers).
 
Wouter J

Wouter J

04/05/2013 16:11:52
Quote Anchor link
Nee, geen eregi. Dat komt uit PHP4 en is deprecated in php5. Gebruik preg.

Beter is zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (strlen(preg_replace('/^(\d+)-(\d+)$/', '\\1\\2')) == 10) {
    // ...
}
?>

Hierdoor weet je zeker dat er geen verkeerde tekens inzitten, er ergens een streepje in zit (met sowieso 1 nummer ervoor) en je weet dat het totaal aantal nummers 10 is.
 
Arthur Heijmen

Arthur Heijmen

04/05/2013 16:51:08
Quote Anchor link
Wouter J op 04/05/2013 16:11:52:
Nee, geen eregi. Dat komt uit PHP4 en is deprecated in php5. Gebruik preg.

Beter is zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (strlen(preg_replace('/^(\d+)-(\d+)$/', '\\1\\2')) == 10) {
    // ...
}
?>

Hierdoor weet je zeker dat er geen verkeerde tekens inzitten, er ergens een streepje in zit (met sowieso 1 nummer ervoor) en je weet dat het totaal aantal nummers 10 is.


Juist dit geeft een fout melding
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Warning: Wrong parameter count for preg_replace() in C:\werkmap\layout\root\files\contact.php on line 29

dat had ik met die andere niet.
is het dan toch niet beter om preg_match te gebruiken?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
                if(!preg_match('/^[0-9]{10}$/', $_POST['telefoon']))
                {
                 $aFouten[] = 'Geen geldig nummer ingevuld !';
                }

dit werkt goed, zonder foutmelding.
Gewijzigd op 04/05/2013 17:15:29 door Arthur Heijmen
 



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.