Avatar billede kimox Nybegynder
04. maj 2008 - 22:07 Der er 48 kommentarer og
1 løsning

hjælp til at gemme dropdown

Hej eksperter.

Jeg har en kontakt side hvor man skal oplyse nogen felter før mailen bliver sendt, men der er flere dropdown menuer, og hvis man glemmer at udfylde en eller flere så nulstiller de andre dropdown menuer når man trykker "Send" og det skal de ikke. De skal gemme det valgte også efter man har trykket send.

min select ser sådan herud:

                      <select name="jobstatus"id="jobstatus" class="input" style="width:300px;" onChange="SelectedMethod(this,'jandet');">
                        <option value="0">V&ae lig;lg status</option>
                        <option value="Ledig">Ledig</option>
                        <option value="I arbejde">I arbejde</option>
                        <option value="andet">Andet</option>
                      </select>
            <div id="jandet" style="position:relative; display:none; background-color:#E3E3E3;">
            <img src="images/pil.gif"> <input name="jobstat_andet" type="text" class="input" id="jobstat_andet" value="<? echo $_POST['jobstat_andet'] ?>" size="44">
              </div>

den div der er i bunden bliver aktiveret når der er valgt "andet" .. dvs hvis siden reloader så skal den gemme hvad man havde valgt i menuen, og hvis man har valgt "andet" så skal den aktiverer div'en .. jeg kan oplyse jeg har prøvet at sætte "andet" til selcted=selected .. men det aktiverer ikke div¨'en da den kun bliver aktiv ved "onchange"


håber i kan hjælpe
Avatar billede jakobdo Ekspert
04. maj 2008 - 22:43 #1
Det du skal gøre, er at gemme alle info i en session, inden du tjekker om info er sat eller ej.

Du kunne f.eks. lave:

function savePost(){
foreach($_POST AS $name => $value){
$_SESSION['savedPost'][$name] = $value;
}
}

og denne:
function getPost($name){
return $_SESSION['savedPost'][$name];
}

Og i din kode:

bare et eksempel på en af dine options:

<option value="0" <?=(getPost('jobstatus')=0)?'selected="selected"':'');?>>V&ae lig;lg
<option value="0" <?=(getPost('jobstatus')='Ledig')?'selected="selected"':'');?>>V&ae lig;lg
<option value="0" <?=(getPost('jobstatus')='I arbejde')?'selected="selected"':'');?>>V&ae lig;lg status</option>

osv...
Avatar billede kimox Nybegynder
05. maj 2008 - 21:18 #2
den siger Fatal error: Can't use function return value in write context in

det er på denne linje <option value="0" <?=(getPost('civil_status')=0)?'selected="selected"':'');?>>V&aelig;lg status</option>
Avatar billede jakobdo Ekspert
05. maj 2008 - 21:26 #3
Skal denne linje:
getPost('civil_status')=0
måske rettes til:
getPost('civil_status')==0
Prøv lige.
Avatar billede kimox Nybegynder
05. maj 2008 - 21:29 #4
så skete der lidt :o)

nu siger den Parse error: syntax error, unexpected ')', expecting ',' or ';' in

på samme linje
Avatar billede jakobdo Ekspert
05. maj 2008 - 21:43 #5
Jamen for fanden, jeg er en spasser.
Der skal også en ekstra ( foran (getPost...
Avatar billede kimox Nybegynder
05. maj 2008 - 21:56 #6
haha det er jeg vist lige så meget.. det havde jeg ik lige set.

nu viser den i det mindste min side.. men den vil ikke huske det jeg sætter min dropdown til .. min select:
                    <select name="civil_status" class="input" style="width:300px;">
                      <option value="0" <?=((getPost('civil_status')==0)?'selected="selected"':'');?>>V&aelig;lg status</option>
                      <option value="Fraskilt" <?=((getPost('civil_status')=='Fraskilt')?'selected="selected"':'');?>>Fraskilt</option>
                      <option value="Gift" <?=((getPost('civil_status')=='Gift')?'selected="selected"':'');?>>Gift</option>
                      <option value="K&aelig;reste" <?=((getPost('civil_status')=='K&aelig;reste')?'selected="selected"':'');?>>K&aelig;reste</option>
                      <option value="Single" <?=((getPost('civil_status')=='Single')?'selected="selected"':'');?>>Single</option>
                          </select>

skal den sætte value="xxx" først i optionen=?
Avatar billede jakobdo Ekspert
05. maj 2008 - 22:22 #7
Husker du at kalde:

function savePost(){
foreach($_POST AS $name => $value){
$_SESSION['savedPost'][$name] = $value;
}
}

Lige når siden bliver postet ?
Avatar billede kimox Nybegynder
05. maj 2008 - 22:24 #8
ja den ligger aller øverst i på min side i en <? ?>
Avatar billede jakobdo Ekspert
05. maj 2008 - 22:32 #9
Øv, så er der et eller andet sted kæden hopper af.
Og du viser ikke nok kode til jeg kan gennemskue hvor.
Avatar billede kimox Nybegynder
05. maj 2008 - 22:38 #10
jamen jeg vil gerne poste hele siden, men ved ikke om man på poste så lang en side.
Avatar billede olebole Juniormester
05. maj 2008 - 23:46 #11
<ole>

"ja den ligger aller øverst" >> Jeg vil håbe, der aller øverst står session_start()  ;o)

/mvh
</bole>
Avatar billede jakobdo Ekspert
06. maj 2008 - 11:01 #12
Prøv at se siden her:
http://www.codebreaker.dk/exp/830254exp.php

og koden er her:
<?php
//http://www.eksperten.dk/spm/830254
session_start();

function printSelect($name,$num_options, $selected=NULL){
    $output  = '<select name="' . $name . '">';
    for($i = 1; $i <= $num_options; $i++){
        $output .= '<option value="' . $i . (($selected == $i) ? ' selected="selected"' : '' ) . '">Option ' . $i . '</option>';
    }
    $output .= '</select>';
    return $output;
}

function savePost(){
    foreach($_POST AS $name => $value){
        $_SESSION['savedPost'][$name] = $value;
    }
}

function getPost($name){
    $rVal = 0;
    if(isset($_SESSION['savedPost'][$name])){
        $rVal = $_SESSION['savedPost'][$name];
        unset($_SESSION['savedPost'][$name]);
    }
    return $rVal;
}

if(isset($_POST['doit'])){
    savePost();
}

echo '<form action="830254exp.php" method="post">';
echo 'Select 1: ' . printSelect('select1', 5,getPost('select1')) . '<br />';
echo 'Select 2: ' . printSelect('select2',10,getPost('select2')) . '<br />';
echo 'Select 3: ' . printSelect('select3', 2,getPost('select3')) . '<br />';
echo '<input type="submit" name="doit" value="Test">';
echo '</form>';
?>

Håber du selv kan gennemskue hvordan det spiller! :o)
Avatar billede kimox Nybegynder
06. maj 2008 - 11:24 #13
jeg vil lige prøve med session_start.. kan ikke huske om den er kommet på hehe ..

men jakobdo - den virker heller ikke den med dit link :o/ - i hvert fald ikke når jeg prøver den
Avatar billede jakobdo Ekspert
06. maj 2008 - 11:33 #14
Hvad mener du med den ikke virker?
Når du trykker TEST, så står der da samme info i select'erne, efter du har trykket! :o)
Avatar billede kimox Nybegynder
06. maj 2008 - 11:45 #15
ikke ved mig :o/ der nulstiller den til option 1
Avatar billede jakobdo Ekspert
06. maj 2008 - 12:12 #16
Avatar billede kimox Nybegynder
06. maj 2008 - 12:34 #17
hmm mærkeligt.. stadig ikke.
Avatar billede jakobdo Ekspert
06. maj 2008 - 12:37 #18
Hvordan tester du ?
Avatar billede kimox Nybegynder
06. maj 2008 - 12:41 #19
internet explorer .. jeg har testet på flerer pc'er nu .. hmm
Avatar billede jakobdo Ekspert
06. maj 2008 - 12:52 #20
Men hvad gør du helt præcist ?
Avatar billede jakobdo Ekspert
06. maj 2008 - 12:54 #21
Fandt lige en lille fejl i koden.
FF gjorde det rigtige alligevel, men kunne godt se fejlen i IE.
Avatar billede kimox Nybegynder
06. maj 2008 - 12:57 #22
ja se .. det var jo bedre haha :D

Jeg kunne godt bruge lidt forklaring på din select.. hvordan indfører jeg mine ting?
Avatar billede jakobdo Ekspert
06. maj 2008 - 14:04 #23
Har du et link til din side nu ?
Avatar billede kimox Nybegynder
06. maj 2008 - 14:10 #24
jeg har ikke opdateret med den nye kode :o)

Men tænkte bare over din select echo 'Select 2: ' . printSelect('select2',10,getPost('select2')) . '<br />';

om ",10," betyder den skal gå fra 1-10 eller hvordan
Avatar billede jakobdo Ekspert
06. maj 2008 - 14:13 #25
Ja, det var bare for at gøre det nemt for mig selv.
Men du skal teste getPost('Navn_paa_select') op mod value i hver af dine options.
Og matcher de, så skal du lave: selected="selected"
Så bliver den option selected fra start.
Avatar billede kimox Nybegynder
06. maj 2008 - 16:40 #26
jeg kan vel ik få dig til at vise mig det på den første select:

                      <select name="jobstatus"id="jobstatus" class="input" style="width:300px;" onChange="SelectedMethod(this,'jandet');">
                        <option value="0">Vælg status</option>
                        <option value="Ledig">Ledig</option>
                        <option value="I arbejde">I arbejde</option>
                        <option value="andet">Andet</option>
                      </select>
Avatar billede jakobdo Ekspert
06. maj 2008 - 17:49 #27
Det må blive noget ala dette:

<select name="jobstatus"id="jobstatus" class="input" style="width:300px;" onChange="SelectedMethod(this,'jandet');">
    <option value="0">Vælg status</option>
    <option value="Ledig"<?=((getPost('jobstatus')=='Ledig') ? ' selected="selected"' : '');?>>Ledig</option>
    <option value="I arbejde"<?=((getPost('jobstatus')=='I arbejde') ? ' selected="selected"' : '');?>>I arbejde</option>
    <option value="andet"<?=((getPost('jobstatus')=='andet') ? ' selected="selected"' : '');?>>Andet</option>
</select>
Avatar billede kimox Nybegynder
06. maj 2008 - 17:58 #28
okay fint, når jeg gør det så selected=selected den, den nederste i min select boks uden der er blevet valgt noget i select.
Avatar billede jakobdo Ekspert
06. maj 2008 - 19:37 #29
Test min side igen.

Nu har jeg lavet koden mere så du måske kan bruge den direkte i din kode.

<?php
//http://www.eksperten.dk/spm/830254
session_start();

function printSelect($name,$options=array(), $selected=NULL){
    $output  = '<select name="' . $name . '">';
    foreach($options AS $value => $text){
        $output .= '<option value="' . $value . '"' . (($selected == $value) ? ' selected="selected"' : '' ) . '>' . $text . '</option>';
    }
    $output .= '</select>';
    return $output;
}

function savePost(){
    foreach($_POST AS $name => $value){
        $_SESSION['savedPost'][$name] = $value;
    }
}

function getPost($name){
    $rVal = 0;
    if(isset($_SESSION['savedPost'][$name])){
        $rVal = $_SESSION['savedPost'][$name];
    }
    return $rVal;
}

if(isset($_POST['doit'])){
    savePost();
}

$select1 = array(0 => 'V&aelig;lg status', 1 => 'Ledig', 2 => 'I arbejde', 3 => 'andet');
$select2 = array(0 => 'V&aelig;lg alder', 1 => '0-25', 2 => '26-50', 3 => '51-75', 4 => '76-?');
$select3 = array(0 => 'V&aelig;lg civilstatus', 1 => 'Single', 2 => 'Samboende', 3 => 'Gift');

echo '<form action="830254exp.php" method="post">';
echo 'Select 1: ' . printSelect('select1', $select1, getPost('select1')) . '<br />';
echo 'Select 2: ' . printSelect('select2', $select2, getPost('select2')) . '<br />';
echo 'Select 3: ' . printSelect('select3', $select3, getPost('select3')) . '<br />';
echo '<input type="submit" name="doit" value="Test">';
echo '</form>';
?>
Avatar billede kimox Nybegynder
06. maj 2008 - 21:33 #30
nu gir jeg snart op :/.

1: den gemmer ikke ved reload
2: jeg kan ikke sætte class="" oppe i øverste kode osv :o(
3: og for at være ekstra besværlig så skal der faktisk stå noget forskelligt i hver <select>-start  .. da denne linje:  onChange="SelectedMethod(this,'v_branche');" skal være der så den aktivere en div når der bliver valgt "andet"

jeg er ked af jeg skal være så besværlig .. vil meget gerne sende koden til dig, ønsker bare helst ikke at poste den på siden her.
Avatar billede jakobdo Ekspert
06. maj 2008 - 21:40 #31
Kimox: Jeg giver også snart op. :o)
For problemet er jo nok i bund og grund du slet ikke forstår min kode! :o(
Det er meget simpelt, når man ved hvordan det er.
Avatar billede kimox Nybegynder
06. maj 2008 - 21:43 #32
jamen altså den er postet direkte ind i min egen kode.. der er intet som er tastet om .. har kun ændret i

$select1 = array(0 => 'V&aelig;lg status', 1 => 'Ledig', 2 => 'I arbejde', 3 => 'andet');
$select2 = array(0 => 'V&aelig;lg alder', 1 => '0-25', 2 => '26-50', 3 => '51-75', 4 => '76-?');
$select3 = array(0 => 'V&aelig;lg civilstatus', 1 => 'Single', 2 => 'Samboende', 3 => 'Gift');
Avatar billede kimox Nybegynder
06. maj 2008 - 21:58 #33
lol .. ja nu virker den ...

nu mangler jeg bare
2: jeg kan ikke sætte class="" oppe i øverste kode osv :o(
3: og for at være ekstra besværlig så skal der faktisk stå noget forskelligt i hver <select>-start  .. da denne linje:  onChange="SelectedMethod(this,'v_branche');" skal være der så den aktivere en div når der bliver valgt "andet"
Avatar billede kimox Nybegynder
06. maj 2008 - 22:00 #34
og nu kører det med nr. 2 spg.

nu er det kun den sidste nr. 3 jeg godt kunne tænke mig en løsning på
Avatar billede jakobdo Ekspert
06. maj 2008 - 22:17 #35
2: Du skulle godt kunne bruge class="" jo.
3: Du burde sagtens kunne rette til, det vi har lavet med selected="selected" er jo faktisk bare "ren" html.
Avatar billede kimox Nybegynder
06. maj 2008 - 22:21 #36
ja jeg tror jeg er ved at finde ud af det ;)

men det virker ikke helt:

onChange="SelectedMethod(this,""' . $name ."_andet'");"

den skulle gerne se sådan ud når den bliver printet:
onChange="SelectedMethod(this,'select1_andet');"
Avatar billede jakobdo Ekspert
06. maj 2008 - 22:41 #37
Er det fordi du bruger mine funktioner ?
Avatar billede kimox Nybegynder
06. maj 2008 - 22:48 #38
ja altså jeg bruger præcis alle dine oplysninger :) .. problemet er at lave 'navn_andet' så en får ' med i stedet for "
Avatar billede kimox Nybegynder
06. maj 2008 - 23:14 #39
selecten skal se sådan her ud:

<select class="input" style="width:300px;" name="select4" onChange="SelectedMethod(this,'select4_andet');"><option value="............

men lige nu ser den sådan ud:

<select class="input" style="width:300px;" name="select4" onChange="SelectedMethod(this,"select4_andet");"><option value=".........

dvs i (this,"sele.......") skal skiftes ud med ' tegn i stedet for "
Avatar billede kimox Nybegynder
06. maj 2008 - 23:50 #40
og det lykkedes mig der... :) så nu har jeg løst de tre ting.. men kunne godt tænke mig den nulstillede sig når man forlod siden .. så der ikke stod det samme når man gik tilbage på den .. kan det lade sig gøre ? ellers er der ikke noget at gøre ved det
Avatar billede jakobdo Ekspert
07. maj 2008 - 06:32 #41
Ja, du gør følgende:

Du retter funktionen:

function getPost($name){
    $rVal = 0;
    if(isset($_SESSION['savedPost'][$name])){
        $rVal = $_SESSION['savedPost'][$name];
        unset($_SESSION['savedPost'][$name]);
    }
    return $rVal;
}

og samtidig unset'er du $_SESSION['savedPost'], hvis alle POST er ok.
Avatar billede kimox Nybegynder
07. maj 2008 - 17:47 #42
den virker ikke helt .. den ødelægger lidt af min kode hehe .. men jeg må bare sætte en værdi hvis man trykker sig ind på siden ved hjælp af menuen
Avatar billede kimox Nybegynder
07. maj 2008 - 17:50 #43
den sætter alle mine select til det sidste punkt i boksene, i stedet for at selecte value = 0
Avatar billede jakobdo Ekspert
07. maj 2008 - 18:30 #44
Det burde den bestemt ikke.
Det gør den ikke i min kode! :o)
Avatar billede kimox Nybegynder
07. maj 2008 - 18:55 #45
hehe ok .. nå skidt .. det må jeg lege lidt med.. smid et svar .. jeg siger tusinder tak for hjælpen. ved var en hård negl :/.

Hurtigt spg. Kan den laves om til checkboxe også egentlig for så ville jeg da lege lidt med det
Avatar billede jakobdo Ekspert
07. maj 2008 - 19:09 #46
Du får et svar.
Ang. checkboxe, så ja, men der skla du så bruge checked="checked" :o)
Avatar billede kimox Nybegynder
07. maj 2008 - 19:20 #47
det må jeg prøve hehe .. men igen mange tak for hjælpen :-)

-lukket-
Avatar billede kimox Nybegynder
07. maj 2008 - 19:29 #48
ah grunden til den ikke virker optimalt er jo fordi den ikke ved hvad den skal selecte når den ikke får noget afvide.. ved du hvordan jeg hurtigt løser det?

det må jo være noget med hvis savedpost ikke er sat så value=0 eller noget
Avatar billede jakobdo Ekspert
07. maj 2008 - 20:43 #49
Det kan du evt. indbygge i funktionen ja. :o)

Og takker for point.
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