[HTML/PHP] De complete lijst van een SELECT list ophalen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb in een formulier een select-list, zoals in dit voorbeeld:
code:
1
2
3
4
5
6
<select name="userlist[]" id="userlist" size="20" multiple="multiple">
   <option value="0" >Zero</option>
   <option value="1" >One</option>
   <option value="2" >Two</option>
   <option value="3" >Three</option>
</select>

Als ik nu uit de $_POST de waarden ophaal, dan zijn dat alleen de geselecteerde opties. Ik wil echter alles ophalen, ongeacht wat er geselecteerd is.

Weet iemand of dit mogelijk is? Zo ja, hoe doe ik dat?

Alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
ik zie het nut niet helemaal, maar je zou met javascript alles kunnen selecteren voordat je het formulier verstuurd. Iets anders zou ik zo even snel niet kunnen verzinnen.

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 19:17

MueR

Admin Tweakers Discord

is niet lief

Dat gaat je met standaard post niet lukken. Het zou vrij nutteloos zijn om alles door te sturen namelijk, dan zou je alsnog niet weten welke items er geselecteerd zijn. Dus ofwel ophalen uit database, ofwel alles automatisch selecteren, wat meteen je selectbox overbodig maakt.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Er wordt alleen meegestuurd wat er geselecteerd is. Als je alle elementen wilt hebben zul je die op dezelfde manier boven water moeten krijgen als hoe je ze krijgt bij het maken van je formulier.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
In een ver verleden heb ik wel eens wat gebouwd waarmee je items tussen twee select-boxen heen en weer kon schieten (selectbox1=niet meenemen, selectbox2=wel meenemen). Bij het verzenden stuurde ik alle items in selectbox2 op.

In zo'n geval heb je niets aan je database. Dit zegt namelijk alleen iets over wat er in selectbox1 of selectbox2 zit, en dus niets over welke items in selectbox2 zitten.

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Array_diff is waarschijnlijk je oplossing, maar je moet wel de lijst met opties bewaren.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

//Array met alle mogelijke opties.
$options = array('Optie1','Optie2','Optie3');

//Is het formulier ingevuld?
if(isset($_POST['opties']))
{
    $ingevuld = $_POST['opties'];
    $niet_ingevuld = array_diff($options, $ingevuld);   //Het verschil tussen wat er ingevuld is, en alle elementen.

} else {    //Geen formulier, laat het zien.

?>
    <form name='f1' method='post'>

    <select name='opties[]' size="<?php echo count($_POST['opties']);?>" multiple="multiple">
    <?php
        foreach($options as $op)
            echo "\t\t<option name='$op' value='$op'>$op</option>\n";
    ?>

    </select>
    </form>
<?php

}

?>

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik denk dat de suggestie van KabouterSuper de juiste is. Het voorbeeld wat hij verderop geeft is precies wat ik wil doen :)

Ik heb een klein java-scriptje, dat zou moeten werken:
code:
1
2
3
4
5
6
7
8
<script>
   function submitform()
   {
      //alert("Blaat!");
      allSelected(document.mijnForm['userlist[]']);
      document.mijnForm.submit();
   }
</script>

Als ik er een alert() inzet, dan wordt die ook daarwerkelijk uitgevoerd. Bij het verzenden van het formulier wordt deze code dus wel doorlopen. Alleen wordt het formulier niet verstuurd. Ik kan klikken wat ik wil (met de alert uitgecommentariseerd) er gebeurt verder niets.

Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Je hoeft je formulier niet in je javascript functie te submitten. Als je in je submit-button een onsubmit-actie toevoegt ben je klaar. De actie bestaat uit het loopen over alle items in je lijst en deze selecteren. Dat zou er bijvoorbeeld zo uit kunnen zien:
code:
1
2
3
4
5
    sel=document.getElementById("selected_emails");
    for (var intLoop=0; intLoop < sel.length; intLoop++) 
    {
      sel[intLoop].selected=true;
    }


Edit: geef eens wat meer (relevante!) code. Het stukje wat je submit is wel erg summier.

[ Voor 13% gewijzigd door KabouterSuper op 16-03-2010 15:11 ]

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 16:04
Ik zou nog een keer alle opties neerzetten maar dan met hidden inputs. Als je ze ook allemaal dezelfde naam geeft met blokhaken op het eind komen ze op dezelfde manier binnen.

Eigenlijk zou ik het aan de server-kant nog een keer uit je database halen; want je moet bedenken dat wat je hier binnenkrijgt user-input is, dus fakebaar (makkelijk zelfs), ook als het hidden inputs zijn.

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met het volgende scriptje heb ik het werkend gekregen:
code:
1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
   function selectAllOptions(given)
   {
      var selObj = document.adminForm.getElementById(given);

      for (var i=0; i<selObj.options.length; i++)
      {
         selObj.options[i].selected = true;
      }
   }
</script>

In <form> tag is deze regel opgenomen:
code:
1
onsubmit="selectAllOptions('userlist')"

En de <select> tag ziet er zo uit:
code:
1
<select name="userlist[]" id="userlist" size="20" multiple="multiple">

Alles bij elkaar zorgt ervoor dat het nu precies doet wat ik wil :)

Bedankt voor alle hulp! d:)b

[ Voor 0% gewijzigd door Verwijderd op 16-03-2010 15:38 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
KabouterSuper schreef op dinsdag 16 maart 2010 @ 14:50:
In een ver verleden heb ik wel eens wat gebouwd waarmee je items tussen twee select-boxen heen en weer kon schieten (selectbox1=niet meenemen, selectbox2=wel meenemen). Bij het verzenden stuurde ik alle items in selectbox2 op.

In zo'n geval heb je niets aan je database. Dit zegt namelijk alleen iets over wat er in selectbox1 of selectbox2 zit, en dus niets over welke items in selectbox2 zitten.
FYI: dat probleem heb je dan destijds verkeerd benaderd. Zo'n gesplitste lijst is nl. niets anders dan een verkapte lijst checkboxes: een item v/d ene naar de andere lijst verplaatsen is hetzelfde als een checkbox aan- of uitvinken.
Pagina: 1