Avatar billede loevstroem Nybegynder
29. januar 2008 - 12:45 Der er 8 kommentarer og
1 løsning

Foreach check by function?

Hej Eksperter.

Jeg er ved at lave mig en helper class der skal hjælpe ved validering af bruger input. Til dette er der en række forskellige funktioner der kan tjekke forskellige ting afhængigt af input type i feltet.

Min class funktion: http://pastebin.com/m5d62062

Endvidere har jeg lavet sådan jeg kan tjekke om adskillige felter er tomme (dette gøres via et array):

if($_POST) {

    $helper = new Helper();
   
    $field_checks = array(
                          "Fornavn" => $_POST['first_name'],
                          "Efternavn" => $_POST['last_name'],
                          "E-mail" => $_POST['email'],
                          "Brugernavn" => $_POST['username'],
                          "Kodeord" => $_POST['password'],
                          "Kodeord igen" => $_POST['password2'],
                          "E-mail" => $_POST['email'],
                          "Firma/Gruppe" => $_POST['group']
                        );
                       
    $result_check = $helper->validate_empty($field_checks);
   
    if($result_check == false) {
       
        // do something cool
       
    } else {
       
        $there_are_errors_on_this_page = true; // use this true to print the errors elsewhere
       
    }
   
}   
?>


Min problemstilling ligger i at få min funktion ved $_POST til at lave multiple checks? (tager brug af nogle af de andre functions i min helper class)

Jeg håber jeg har formuleret mig på bedste vis, ellers spørg endelig (:

På forhånd mange tak
loevstroem
Avatar billede loevstroem Nybegynder
29. januar 2008 - 12:49 #1
Jeg glemte vist at stille mit spørgsmål:
Ved brug af multiple functions

$result_check = $helper->validate_empty($field_checks);
$result_exist = $helper->validate_allready_exists($_POST['email']);

ville simpelthen kun returnere den første funktion $result_check = $helper->validate_empty($field_checks);

Hvordan laver jeg det godt? smart? (:
Avatar billede loevstroem Nybegynder
29. januar 2008 - 13:09 #2
Dette kunne selvfølelig laves via en lang række if-statements, men så forsvinder det smarte desværre i at kunne genbruge funktionerne på forskellige sider hvor brugergenereret indhold eksistere.
Avatar billede zurekk Nybegynder
29. januar 2008 - 21:52 #3
Jeg forstår altså ikke hvad du vil =/

Vil du checke om alle felter i $field_checks er udfyldt?
Avatar billede zurekk Nybegynder
29. januar 2008 - 21:53 #4
Det kan jeg nu se du vil.

Men hvad er problemet helt præcist?
Avatar billede loevstroem Nybegynder
29. januar 2008 - 22:41 #5
Jeg er bange for at jeg har formuleret for mig dårligt.

Min funktion som tjekker om felterne er udfyldt fungere fint, dog har jeg et problem når jeg vil udbygge min validation funktion til også at tjekke andre ting. fx. vil jeg gerne udbygge min helperclass sådan jeg også kan tjekke om emailen indtastet nu er valid, samt om den allerede er registreret-

dette kunne fx. gøres sådan: (bemærk dog funktionen ikke er lavet i min helper endnu- blot et eksempel)
$result_exist = $helper->validate_allready_exists($_POST['email']);

Dog ligger problemet i (det er det her jeg ikke kan regne ud) at i min POST funktion hvis jeg vil tjekke flere ting virker det ikke (ting udover om felterne er udfyldt)

if($_POST) {

    $helper = new Helper();
 
    $field_checks = array(
                          "Fornavn" => $_POST['first_name'],
                          "Efternavn" => $_POST['last_name'],
                          "E-mail" => $_POST['email'],
                          "Brugernavn" => $_POST['username'],
                          "Kodeord" => $_POST['password'],
                          "Kodeord igen" => $_POST['password2'],
                          "E-mail" => $_POST['email'],
                          "Firma/Gruppe" => $_POST['group']
                        );
                     
    $result_check = $helper->validate_empty($field_checks);
 
    if($result_check == false) {
     
        // do something cool
     
    } else {
     
        $there_are_errors_on_this_page = true; // use this true to print the errors elsewhere
     
    }
 

?>
Avatar billede zurekk Nybegynder
29. januar 2008 - 23:07 #6
Er det så ikke bare at tjekke de forskellige felter med hvert sin funktion?

Ellers kunne du jo give $field_checks noget ekstra information.

Eksempelvis:
$field_checks = Array()
$field_checks['Fornavn'] = Array(
'value' => stripslashes( $_POST['first_name'] ),
'type' => 'medium_string',
'error_msg' => 'Indeholdet dit fornavn virkelig "%s"??'
);
$field_check['E-mail'] = Array(
'value' => stripslashes( $_POST['email'] ),
'type' => 'mail',
'error_msg' => 'Giv mig nu en ordentlig e-mail, ik'å?!'
);

Og så kunne du checke felt typerne i din funktion, og validere derudfra.

Noget ala. dette måske:
public function validateFields( $fields )
{
    foreach( $fields as $name => $params )
    {
        switch( $params['type'] )
        {
            case 'mail': return $this->valMail( $params['value'], $params['error_msg'] );
            case 'small_text': return $this->valText( 'small', $params['value'], $params['error_msg'] );
            case 'med_text': return $this->valText( 'medium', $params['value'], $params['error_msg']
        }
    }
}


error_msg skal selvfølgelig bruges til at udforme fejlbeskeder.
En validate-function kunne for eksempel se således ud:
private function valText( $size, $txt, $err_msg )
{
    switch( $size )
    {
        case 'small':
            $min_size = '5';
            $max_size = '20';
            $all_char = 'A-Za-z';
            break;
        case 'medium':
            $min_size = '15';
            $max_size = '80';
            $all_char = 'A-Za-z ';
            break;
        case 'huge':
            $min_size = '1000';
            $max_size = 'milliardmillion';
            $all_char = '^<>';
            break;
    }
   
    $str_size = strlen( $txt );
   
    if( $str_size < $min_size ) return $this->error_func( 'Too small BAHA!' );
    if( $str_size > $max_size ) return $this->error_func( 'Too big BAHAAHAHA!' );
    if( !preg_match( '/^[' . $all_char . ']$/', $txt ) ) return $this->error_func( sprintf( $err_msg, $all_char ) );
}
Avatar billede loevstroem Nybegynder
30. januar 2008 - 12:14 #7
Jeg har fundet en anden løsning, dog baseret på dit udkast. Jeg takker ærbødigt mange gange :)

Venligst drop et svar
Avatar billede zurekk Nybegynder
02. februar 2008 - 15:05 #8
There you go.
Avatar billede zurekk Nybegynder
02. februar 2008 - 19:48 #9
Taxa!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Politiets Efterretningstjeneste

Bliv IT-supporter i PET's IT Servicedesk

Udlændinge- og Integrationsministeriet

Contract manager til it-området i Udlændingestyrelsen

Zealand Business College

Faglig teamleder til IT Drift & Support

Styrelsen for Grøn Arealomlægning og Vandmiljø

Teamleder til Application Management