Avatar billede alexander_j Nybegynder
27. januar 2006 - 18:31 Der er 12 kommentarer og
1 løsning

Multiple selectbox

Jeg har et lille problem med at pakke data korrekt ud sendt via en form med en selectbox med multiple mulighed.

Mit problem er at der kun modtages den første selction også selvom der er valgt flere.

Jeg har læst at det kan løses vha. at navngive selecten "myselect[]", men af forskellige årsager (problemer med et javascript), så kan jeg ikke tillade mig at bruge [] i mit script.

Jeg har hørt at alle data faktisk sendes over, men af de af en eller anden grund ikke opfattes som et array af php'en - og spørgsmålet er om jeg kan gøre noget således at php opfatter data korrekt?
Avatar billede jakobdo Ekspert
27. januar 2006 - 18:36 #1
Prøv til at starte med, at lav testen på den side som data postes til:

<?php

echo "<pre>";
print_r($_POST);
echo "</pre>";

?>
Avatar billede specialty Nybegynder
27. januar 2006 - 19:09 #2
Du nævner at du ikke kan benytte myselect[] på grund af javascript. Hvis du på din select bruger name="myselect[]" og id="myselect" så vil du stadig kunne bruge din javascript på myselect alene... men når du POST'er vil alle valgte blive sendt med som et array.
Avatar billede alexander_j Nybegynder
27. januar 2006 - 19:35 #3
Selectdelen af formen ser sådan her ud:
<select multiple name="select" size='8' style="width:200px">
<option value='1'>Bruger1</option>
<option value='2'>Bruger2</option>
</select>

Jeg får følgende fra din kode:
Array
(
    [select] => 3
)


Jeg er ikke vil med at skulle have forskellig id og name!

Formen submittes med følgende: SelectAll(this.form.select);submit()

Og SelectAll funktionen er følgende:
function SelectAll(fromObject) {
    for (var i=0, l=fromObject.options.length;i<l;i++) {
        fromObject.options[i].text,fromObject.options[i].selected = true;
    }
}
Avatar billede alexander_j Nybegynder
27. januar 2006 - 19:36 #4
Men det betyder vel at jeg ikke får alle data med over eller hvad? Eftersom den kun skriver [select] => 3
Avatar billede jakobdo Ekspert
27. januar 2006 - 20:05 #5
Du skal rette:
name="select"
til:
name="select[]"
Avatar billede alexander_j Nybegynder
27. januar 2006 - 20:07 #6
men så virker min javascript jo ikke :-(
Avatar billede jakobdo Ekspert
27. januar 2006 - 20:10 #7
Det forstår jeg ikke!
Hvad om du retter:
<select multiple name="select" size='8' style="width:200px">
til:
<select id="myselect" multiple name="select" size='8' style="width:200px">
og så bruger:
SelectAll(this.form.myselect);submit()
Avatar billede olebole Juniormester
27. januar 2006 - 20:13 #8
<ole>

Hvad er det, dit JavaScript skal gøre - for det hænger da slet ikke sammen  :)

/mvh
</bole>
Avatar billede olebole Juniormester
27. januar 2006 - 20:15 #9
- og din JS-submit er heller ikke rigtig. Jeg tror, du må komme med noget mere kode
Avatar billede alexander_j Nybegynder
28. januar 2006 - 01:20 #10
Hmm så får I hele molevitten - jeg er langt fra en stjerne til javascript, koden er 'stjålet' andet steds fra :-D

java script:
<script type="text/javascript">
function deleteOption(object,index) {
  object.options[index] = null;
}
function addOption(object,text,value) {
  var defaultSelected = true;
  var selected = true;
  var optionName = new Option(text, value, defaultSelected, selected)
  object.options[object.length] = optionName;
}
function copySelected(fromObject,toObject) {
  for (var i=0, l=fromObject.options.length;i<l;i++) {
    if (fromObject.options[i].selected) addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
  }
  for (var i=fromObject.options.length-1;i>-1;i--) {
    if (fromObject.options[i].selected) deleteOption(fromObject,i);
  }
}
function SelectAll(fromObject) {
  for (var i=0, l=fromObject.options.length;i<l;i++) {
    fromObject.options[i].text,fromObject.options[i].selected = true;
  }
}
</script>

html(form):
<form action="myscript.php" method=post name="myform">
  <select multiple name="select" size='8' style="width:200px">
    <option value='2'>Elev1</option>
    <option value='3'>Elev2</option>
  </select>

  <input type='button' style="width:70px;" value='&lt; Tilføj' onClick="copySelected(this.form.select,this.form.select2)">
  <input type='button' style="width:70px;" value='Fjern &gt;' onClick="copySelected(this.form.select2,this.form.select)">

  <select multiple name="select2" size='8' style="width:200px">
  </select>

  <input type="button" value="Opdater data" onClick="SelectAll(this.form.select);submit()">
</form>
Avatar billede alexander_j Nybegynder
28. januar 2006 - 10:08 #11
hmm fandt en løsning tror jeg - men måske en af jer gad kigge scriptet igennem for at se om løsningen er fornuftig? Derudover kan I også ligge svar - de der vil honoreres med point :-D

java script:
<script type="text/javascript">
function deleteOption(object,index) {
    object.options[index] = null;
}
function addOption(object,text,value) {
    var defaultSelected = true;
    var selected = true;
    var optionName = new Option(text, value, defaultSelected, selected)
    object.options[object.length] = optionName;
}
function copySelected(fromObject,toObject) {
    for (var i=0, l=fromObject.options.length;i<l;i++) {
        if (fromObject.options[i].selected) addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
    }
    for (var i=fromObject.options.length-1;i>-1;i--) {
        if (fromObject.options[i].selected) deleteOption(fromObject,i);
    }
}
function SelectAll(fromObject) {
    for (var i=0, l=fromObject.options.length;i<l;i++) {
        fromObject.options[i].text,fromObject.options[i].selected = true;
    }
}
</script>

HTML (form):
<form action="../groups/new_users_script.php?group_id=" method=post name="myform">

  <select multiple name="select1[]" size='8' style="width:200px">
  </select>

  <input type='button' style="width:70px;" value='&lt; Tilføj' onClick="copySelected(this.form['select2[]'],this.form['select1[]'])">
  <input type='button' style="width:70px;" value='Fjern &gt;' onClick="copySelected(this.form['select1[]'],this.form['select2[]'])">

  <select multiple name="select2[]" size='8' style="width:200px">
    <option value='1'>Alexander Juhl</option>
    <option value='2'>Elev1</option>
    <option value='3'>Elev2</option>
  </select>

  <input type="button" value="Opdater data" onClick="SelectAll(this.form['select1[]']);submit()">
</form>
Avatar billede alexander_j Nybegynder
15. februar 2006 - 15:31 #12
Ingen der vil have point?
Avatar billede jakobdo Ekspert
15. februar 2006 - 15:38 #13
Ikke mig nej tak!
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