Hoe kun je IN PHP uitvragen welke waarde 'selected' waarbij nog geen submit heeft plaats gevonden?
Ik vul een dropdown met datums. Wat correct werkt en geen problemen geeft.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?PHP
$dropdown = '<select id="dropdown_date" name="dropdown_date" onchange="this.form.submit();">';
$i = 0;
foreach($aintervalDates as $date) {
$dropdown .= '<option value="'.$date.'" ';
if ( ((isset($_POST['dropdown_date'])) && ($_POST['dropdown_date'] == $date)) || ((empty($_POST['dropdown_date'])) && ($i == 0)) )
$dropdown .= 'selected="selected"';
$dropdown .= ' >'.$date.'</option>';
$i++;
} //END foreach($aintervalDates as $date) {
$dropdown .= "</select>";
?>
$dropdown = '<select id="dropdown_date" name="dropdown_date" onchange="this.form.submit();">';
$i = 0;
foreach($aintervalDates as $date) {
$dropdown .= '<option value="'.$date.'" ';
if ( ((isset($_POST['dropdown_date'])) && ($_POST['dropdown_date'] == $date)) || ((empty($_POST['dropdown_date'])) && ($i == 0)) )
$dropdown .= 'selected="selected"';
$dropdown .= ' >'.$date.'</option>';
$i++;
} //END foreach($aintervalDates as $date) {
$dropdown .= "</select>";
?>
Zoals je ziet is het afhankelijk of de pagina initieel geopend wordt, dan wordt het eerste dropdown item 'selected' en als iemand een datum wijzigt dan kun je gewoon met $_Post uitvragen.
Vervolgens heb ik deze datum als input voor een volgende PHP functie nodig voor een dB query.
Natuurlijk ik kan testen of empty($_POST['dropdown_date']) is.
Kan ik in PHP de waarde uitvragen van de option die 'selected' is? (Sorry ik zet het er maar even bij server sided voor de duidelijkheid - en niet met javascript/jQuery. Hier zijn legio voorbeelden van)
Of kan ik met PHP de option met een bepaalde index selecteren? Bij deze oplossing zou ik dan altijd de option met index [0] kunnen kiezen.
Nico
Nee, dat kan php niet, javascript kan dat wel.
De titel van dit topic luidt:
"Hoe kun je IN PHP uitvragen welke waarde 'selected' waarbij nog geen submit heeft plaats gevonden?"
Jij zet zelf in jouw code als het formulier nog niet gesubmit is, de eerste datum op selected. Die eerste datum weet je dan toch al?
Maar dat is waarschijnlijk onbedoeld :). Als je wilt dat iemand een bewuste keuze maakt dan kun je dat op bovenstaande wijze simpel afdwingen.
"Hoe kun je IN PHP uitvragen welke waarde 'selected' waarbij nog geen submit heeft plaats gevonden?"
Zo luidt de vraag ... die waarde is dus altijd de 1e waarde in de selectbox. Daarom begrijp ik de vraag (of de intentie daarvan) ook niet helemaal ... :-s
Het antwoord daarop is "niet" :). De informatie moet eerst terug naar de server. De browser selecteert de optie met de property selected (met waarde selected), of als deze niet aanwezig is de eerste optie in de lijst. En als je van de eerste optie dan een dummy-optie maakt kun je altijd een andere (valide) keuze registreren met het onchange-event.
Maar de TS vraagt welke waarde selected is ** als er nog niet is gesubmit **. Dat is toch gewoon automatisch de eerste waarde in de selectbox? Die zet hij namelijk zelf op selected. Vervolgens wijzigt een bezoeker de waarde en submit hij ... via $_POST komt dan de gewijzigde waarde binnen.
Ok, het is mij duidelijk. Het verhaal is iets anders. Ik bouw de drowpdown <select> helemaal in php op en dan weet je welke selected. Gevoelsmatig zeg ik je bouwt hem in PHP op dan moet je ook kunnen weten welke op selected is gezet.
Maar dat is gevoelsmatig.
Hierdoor dacht ik niet dat het niet van invloed zou zijn maar wat ik er niet bij verteld had is dat ik het via een method in een bepaalde class doe. Deze method retouneert de complete drowpdown met maand einddata etc. Deze echo ik simpelweg in mijn presentatie laag.
Wat ik nu gedaan heb, en dat is OO-technisch denk ik netjes of zelfs zo het hoort. Ik sla de selected waarde op in een class private property. Deze haal ik dan via een 'getSeletedItem' method op en kan ik hem gebruiken in mijn signatuur voor mijn volgende functie!
Opgelost, bedankt voor het mee denken
Gewijzigd op 11/06/2017 22:55:44 door nkamp Kamp van de
Hm, je zou ook een abstracte klasse FormField kunnen hebben met een protected value. En een form class met een routine voor het initialiseren van waarden van deze formuliervelden. En vervolgens een routine voor het afdrukken van formfields. Wat een waarde betekent voor een FormField hangt af van dat specifieke element.
Bedankt voor het meedenken/idee. Dat is goeie, (misschien) de volgende keer ga ik het op die manier oplossen!
Nico