Toon posts:

[Selectbox +?] Een waarde die is gepost als selected zetten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben met zo'n leuk contentmanagingsysteem bezig(lees: een paar honderd regels RegEx's), maar nu wil ik dat als iemand in een selectbox invult dat hij item3 wil zien, dat dan item 3 SELECTED is in het nieuwe scherm en niet item1(als die tenminste als standaard is ingesteld. Ik denk dat ik met een hoop RegEx's wel het gewenste effect kan bereiken, maar ik zie het wel vaker op sites en het lijkt met sterk dat ze het op deze manier doen, omdat deze nogal omslachtig is. Is er een betere manier om dit te doen?

Verwijderd

Topicstarter
Ik kan het ook doen met een combinatie van een while loop en steeds dezelfde variabele if-statement, maar het lijkt me een standaardactie, dus ik denk dat er wel een functie voor is ook al ben ik die nog niet tegengekomen. Ik heb wel bij google gezocht, maar die gaf niet echt goede resultaten(ja, wel over hoe je een selectbox maakt).

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Ik neem aan dat de selectbox dynamisch wordt gevuld (bij voorbeeld uit een database).
Als je dit doet door middel van een handig ingedeelde array kun je dit als volgt oplossen:

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
30
$items = array();

while (/*haal items uit database*/)
{
    $items[$id] = array("description" => $desc, "value" => $id, "selected" => false);
}

if (isset($_POST["selectbox"]) && isset($items[$_POST["selectbox"]]))
{
    $items[$_POST["selectbox"]]["selected"] = true; // er is een item gekozen
}
else
{
    $items[0]["selected"] = true; // standaard geselecteerd
}

// maak de selectbox
echo "<select name=\"selectbox\">";
foreach ($items as $item)
{
    if ($item["selected"])
    {
        echo "<option value=\"" . $item["value"] . "\" selected=\"selected\">" . $item["description"] . "</option>";
    }
    else
    {
        echo "<option value=\"" . $item["value"] . "\">" . $item["description"] . "</option>";
    }
}
echo "</select>";

Pas de replâtrage, la structure est pourrie.


  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
Als ik je goed begrijp zou het er ongeveer zo uit moeten zien...
PHP:
1
2
3
4
5
6
7
8
<form action="" method="post">
<select name="slct">
<option<?=$_POST['slct'] == "vla" ? " selected" : ""?>>vla
<option<?=$_POST['slct'] == "yoghurt" ? " selected" : ""?>>yoghurt
<option<?=$_POST['slct'] == "melk" ? " selected" : ""?>>melk
</select>
<input type="submit">
</form>


Trouwens, heb je soms een soort regex-fetish ofzo? Honderd regels aan regexen en dan ook dit met een regex willen oplossen... :+

Verwijderd

Topicstarter
Tegen Ericston: De syntax die je daar neer zet, ken ik niet. Zou je die misschien iets willen toelichten?
Ik heb even op php.net gekeken en daar kwam het op neer dat je volgens mij ook dit kunt zeggen: $ding_net_geselecteerd=$_POST['naam_van_selectname_inform]
Over die syntax: Om precies te zijn: ik snap niet helemaal hoe dat == ? werkt. Of is dat een verkorte if constructie?
Over die RegExen: ja, wel een beetje, ze zijn echt superhandig, en over die paar honderd regels. Ja, dat was een beetje dom, ik ben zegmaar aan het programmeren gegaan en heb niet eerst een paar uur nagedacht over hoe ik het probleem moest aanpakken. Ik moet wel zeggen dat hij nu eindelijk compleet is.

Verwijderd

Ja dat is een verkorte if constructie. Check het usercomment op http://www.php.net/manual/en/control-structures.else.php

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-08 18:36
Inderdaad daniel_hoenderdos.

Toegelicht:
PHP:
1
2
3
4
5
6
7
<?= // echo
$_POST['slct'] == "vla" // if equal
? // then
" selected"
: // else
""
?>


Dus er zitten twee dingen in (de <?= en de tertiaire operator) die normaal niet gebruikt zouden worden voor overzichtelijke code, maar die in dit geval wel handig zijn omdat je relatief veel functionaliteit in een klein stukje code kunt proppen.

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Je kan ook gewoon met een replace value = "eenwaarde" vervangen door value = "eenwaarde" selected.
Je mag er van uit gaan dat "eenwaarde" maar 1x voor komt per select en dat scheelt een hele hoop if-statements.

Dus lijstje maken en daarna even replace( string, "value = 'iets'", "value = 'iets' selected" ) <-- ja dat is geen php ;)

Verwijderd

Topicstarter
Ik vind van wel :-)
Even tussen haakjes(Dit is toch wel PHP? of bestaat er ook zo'n functie in dat dopie javascript)
Pagina: 1