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.

<?

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?
Waarom niet simpelweg alles behalve nummer strippen en kijken of het resultaat 10 karakters heeft?


if(strlen(ereg_replace("[^0-9]", "", $_POST['telefoon'])) == 10){
Oke bedankt, dit werkt goed.
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).
Nee, geen eregi. Dat komt uit PHP4 en is deprecated in php5. Gebruik preg.

Beter is zoiets:
<?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.
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:
<?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
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?


                if(!preg_match('/^[0-9]{10}$/', $_POST['telefoon']))
                {
                 $aFouten[] = 'Geen geldig nummer ingevuld !'; 
                }

dit werkt goed, zonder foutmelding.

Reageren