Avatar billede nephilim Nybegynder
19. juni 2006 - 17:09 Der er 19 kommentarer og
2 løsninger

foreach + switch

Jeg prøver på at skrive en funktion som kan oprette forms fra et object. Objektet skal ikke altid have udskrevet alle form felter, derfor ville jeg sende et array med som beskriver hvilke forms der skal laves på den side. koden ser ud lidt allá følgende:

function member_form($edit, $fields) {
    $output .= '<div class="member-form">';
    $form = '';
        foreach ($fields as $key => $value){
            print $key . " - " . $value;
            switch($key){
                case 'medlemsnr':
                    $form .= ''; //form element for medlemsnr.
                    break;
                case 'fornavn':
                    $form .= ''; //form element for fornavn.
                    break;
                case 'efternavn':
                    $form .= ''; //form element for efternavn.
                    break;
                }
            $output .= form($form);
            $output .= '</div>';
            }
            return $output;
        }
hvor $edit er mit object, hvis det indeholder værdier for de rette form 'tags' jeg vil bruge indsættes den nuværende værdi. Fields er et array som indeholder ['fieldnavn']['attributes'] hvor attribs kunne være disable, hvis brugeren ikke må ændre det.

Problemet er nu at nær jeg kører denne func med $fields = array('fornavn' => '',    'medlemsnr' => 'disabled', 'efternavn' =>''); får jeg form element
fornavn, fornavn, medlemsnr, fornavn, medlemsnr, efternavn

Det ser for mig ud til at den kører løkken på følgende måde
1
1, 2
1, 2, 3

Er dette meningen, og i så fald, hvordan kan man lave det jeg prøver på, jeg syntes switch så pænt ud, men måske skal jeg over i noget if halløj.
Avatar billede nephilim Nybegynder
19. juni 2006 - 17:23 #1
min ehm "debugger" print $key . " - " . $value; virker forresten fint, det er i switch den går galt
Avatar billede nielle Nybegynder
19. juni 2006 - 18:09 #2
Prøv med at starte med at ændre denne:

$output .= '<div class="member-form">';

- til:

$output = '<div class="member-form">';
Avatar billede nephilim Nybegynder
19. juni 2006 - 18:13 #3
fjerne lidt, nu er løkken som følger

1
2
2, 3
Avatar billede nielle Nybegynder
19. juni 2006 - 18:17 #4
Er det rigtigt eller forkert? Velsagtens forkert, men hvad forventede du så?
Avatar billede nephilim Nybegynder
19. juni 2006 - 18:25 #5
ville gerne have den først løb igennem fandt form elementen via switch til at give mig fornavn formen først, dernæst løb igennem igen og gav mig medlemsnr, og til sidst efternavn, altså gennemløb med resultat
1
2
3
Avatar billede nielle Nybegynder
19. juni 2006 - 18:25 #6
Hvordan ser den kode ud hvor du kalder member_form() fra?
Avatar billede nephilim Nybegynder
19. juni 2006 - 18:28 #7
$fields = array('fornavn' => '',    'medlemsnr' => 'disabled', 'efternavn' =>'');
print member_form($member, $fields));
Avatar billede nielle Nybegynder
19. juni 2006 - 18:38 #8
Med den kode kan den da ellers umuligt skrive

1
2
3

Hvordan ser funktionen form($form) ud?
Avatar billede nephilim Nybegynder
19. juni 2006 - 18:40 #9
den laver det om til et form tag
Avatar billede nielle Nybegynder
19. juni 2006 - 18:42 #10
Hvordan ser koden for form() ud?
Avatar billede nephilim Nybegynder
19. juni 2006 - 18:44 #11
function form($form, $method = 'post', $action = NULL, $attributes = NULL) {
  if (!$action) {
    $action = request_uri();
  }
  return '<form action="'. check_url($action) .'" method="'. $method .'"'. drupal_attributes($attributes) .">\n". $form ."\n</form>\n";
}
Avatar billede nielle Nybegynder
19. juni 2006 - 18:49 #12
Hvad får du med denne her kode?

function member_form($edit, $fields)
{
    $output = '<div class="member-form">';
    $form = '';
    foreach ($fields as $key => $value)
    {
        // print $key . " - " . $value;
        switch($key)
        {
            case 'medlemsnr':
                $form .= ''; //form element for medlemsnr.
                break;
            case 'fornavn':
                $form .= ''; //form element for fornavn.
                break;
            case 'efternavn':
                $form .= ''; //form element for efternavn.
                break;
        }
        $output .= form($form);       
    }
    $output .= '</div>';
    return $output;
}
Avatar billede nephilim Nybegynder
19. juni 2006 - 18:53 #13
samme resultat :-(
Avatar billede nielle Nybegynder
19. juni 2006 - 18:56 #14
Jeg bliver nok nødt til at se noget mere af din kode hvis jeg skal kunne se fejlen.
Avatar billede nephilim Nybegynder
19. juni 2006 - 19:03 #15
prøvede med denne basale kode, så får jeg kun
----
First name
Surname(s)
----

<?php
        $member = array('test' => 'test2');
        $admin_fields = array('fornavn' => '', 'medlemsnr' => '',    'efternavn' =>'3'    );
        print member_form($member, $admin_fields);


function member_form($edit, $fields) {
    //$output .= '<div class="member-form">';
    $form = '';
        foreach ($fields as $key => $value){
       
            switch($key){
                case 'medlemsnr <br>':
                    $form .= 'Membershipid<br>';
                    break;
                case 'fornavn':
                    $form .= 'First name<br>';
                    break;
                case 'efternavn':
                    $form .= 'Surname(s)<br>    ';
                    break;

                }
            $output = $form;
           
            }
            //$output .= '</div>';
            return $output;
        }
       
       
?>
Avatar billede nephilim Nybegynder
19. juni 2006 - 19:06 #16
hmm nå jeg laver min case rigtig her virker den
Avatar billede nephilim Nybegynder
19. juni 2006 - 19:13 #17
hmm det der går galt er $output .= $form; mod $output = $form;
Avatar billede nephilim Nybegynder
19. juni 2006 - 19:16 #18
$output .= $form; er inde i foreach, derfor appender den hele tiden contents af $form
Avatar billede nephilim Nybegynder
19. juni 2006 - 19:17 #19
virker nu, skal, lukker, skal vi dele point?
Avatar billede nielle Nybegynder
19. juni 2006 - 19:17 #20
Hvis du ikke starter med at nulstille din $output i toppen af funktionen så bliver der jo bare lagt i enden af den for hvert kald af funktionen.

I din kode, 19/06-2006 19:03:51, gør du det ikke for her er den udkommenteret:

//$output .= '<div class="member-form">';

Du gjorde det heller ikke i din kode, 17:09:08, for den starter med:

$output .= '<div class="member-form">';

- hvor du altså lægger til det der allered er i $output fra tidligere.

Det var derfor jeg startede med at ændre den til:

$output = '<div class="member-form">';
Avatar billede nielle Nybegynder
19. juni 2006 - 19:17 #21
Svar :^)
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

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