Avatar billede webcreator Nybegynder
18. november 2003 - 19:38 Der er 11 kommentarer og
1 løsning

Overføre flere værdier fra SELECT - Multiple

Hej.

Jeg står og roder med en <select multiple>. Men så kom jeg til at tænke på, hvordan søren jeg får overført alle værdierne fra denne "boks". For jeg skal jo give mine brugere mulighed for, at foretage flere valg.

Hvis hver eneste <option> skal have et navn, så skal jeg jo kende indholdet af selecten - men det gør jeg ikke nødvendigvis, da denne genereres ud fra indholdet i en database.
Avatar billede morpheus Nybegynder
18. november 2003 - 19:53 #1
prøv lige at smid noget kode
Avatar billede jakoba Nybegynder
18. november 2003 - 19:59 #2
din select skal have et navn. og det er det eneste navn (hvis du prøver at navngive dine options går det grueligt galt.)

php anbefaler at du bruger et 'ikke rigtig lovligt' navn der ender med []
fx:  <select name="minsel[]" ...>  når så php prøver at lægge form-værdierne i $_POST arrayet bliver de forskellige værdier for din select til et array med navnet $minsel
Det er ikke kønt, og det gør det klumset at adressere den select i javascript (hvor '[' og ']' også har specialbetydning)

Så jeg foretrækker a bruge nedenstående, hvor din select blot skal have et helt almindeligt (lovligt) navn:

sørg før at nedenstående linie står i din  php.ini:
    always_populate_raw_post_data = 1

så bliver formdata lagt i $GLOBALS['HTTP_RAW_POST_DATA'] og du kan hente dem derfra.

som navnet antyder er det de "RÅ" data. du kan hente dem med en funktion i retning af:

<?php
function RequestArguments() {
        $data = $GLOBALS['HTTP_RAW_POST_DATA'];
        echo $data . "<br />\n";
        $pairs = explode('&', $data);
        $out = array();
        foreach($pairs AS $pair) {
                if (!$pair) continue;
                list($key,$value) = explode('=', $pair);
                $key = str_replace( rawurldecode( $key ), ".", "_" );
                $value = rawurldecode( $value )
                if (isset($out[$key])) {
                        if (!is_array($out[$key])) {
                                $out[$key] = array($out[$key], $value);
                        } else {
                                $out[$key][] = $value;
                        }
                } else {
                        $out[$key] = $value;
                }
        }
        return $out;
}
$MULTI_POST = RequestArguments();
print_r($MULTI_POST);
?>
Avatar billede jakoba Nybegynder
18. november 2003 - 20:04 #3
Ups, jeg glemte et ';' efter linien:
                $value = rawurldecode( $value );
Avatar billede webcreator Nybegynder
18. november 2003 - 20:22 #4
Jakob > Din 2. løsning ser lidt besværlig ud. Synes egentlig, at den første lød meget fornuftig :)

gider du forklare lidt om den ? Hvordan får jeg fat i værdierne i det oprettede array ?
Avatar billede jakoba Nybegynder
18. november 2003 - 20:52 #5
du adresserer dem med numre som i et normalt array
altså
<select name="ladVereMedAtBrugeSadanNogenNavne[]" multiple="multiple">
  <option value="nr 0">text 0</option>
  <option value="nr 1">text 1</option>
  <option value="nr 2">text 2</option>
  <option value="anna">text 3</option>
</select>
første og sidste option er valgt idet der submittes. så
vil:  $_POST["ladVereMedAtBrugeSadanNogenNavne"][0]  indeholde "nr 0"
og:  $_POST["ladVereMedAtBrugeSadanNogenNavne"][1]  indeholde "anna"

( som du nok kan gætte synes jeg ikke meget om det valg :-)

mvh JakobA
Avatar billede webcreator Nybegynder
18. november 2003 - 20:55 #6
Heh, havde det på fornemmelsen :)
Avatar billede webcreator Nybegynder
18. november 2003 - 20:56 #7
Jeg fik faktisk også ovenstående til at virke, inden jeg fik dit reply. Skulle lige til at stille et nyt spm nemlig :)

Jeg har denne kode :

$i = 0;
while ($var) {
  echo "$i : ". $var[$i] . "<br>";
$i++;
}

Men som det tydeligt ses, stopper While'en aldrig. Kan man give den en betingelse, så den KUN gennemkøres indtil array'et er "tomt" ?
Avatar billede webcreator Nybegynder
18. november 2003 - 20:56 #8
(har afsat et par points mere :)
Avatar billede jakoba Nybegynder
18. november 2003 - 21:00 #9
while ( $i < count($var) )
Avatar billede jakoba Nybegynder
18. november 2003 - 21:01 #10
så vil jeg da ha dem :)
Avatar billede webcreator Nybegynder
18. november 2003 - 21:04 #11
Helt perfekt, heh. Værsgo :)
Avatar billede webcreator Nybegynder
18. november 2003 - 21:04 #12
Tak for hjælpen :-)
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