Drop down lijst filteren
Nu wil ik graag data uit die lijst filteren/verwijderen omdat deze niet meer actief zijn (datum is gepasseerd).
De functie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function draw_pull_down_menu($name, $values, $default = '', $parameters = '') {
$field = '<select name="' . $name . '"';
if ($parameters) $field .= ' ' . $parameters;
$field .= '>';
for ($i=0; $i<sizeof($values); $i+=1) {
$field .= '<option value="' . (string)$values[$i]['id'] . '"';
if ($default == $values[$i]['id']) {
$field .= ' SELECTED';
}
$field .= '>' . (string)$values[$i]['text'] . '</option>';
}
$field .= '</select>';
return $field;
}
?>
function draw_pull_down_menu($name, $values, $default = '', $parameters = '') {
$field = '<select name="' . $name . '"';
if ($parameters) $field .= ' ' . $parameters;
$field .= '>';
for ($i=0; $i<sizeof($values); $i+=1) {
$field .= '<option value="' . (string)$values[$i]['id'] . '"';
if ($default == $values[$i]['id']) {
$field .= ' SELECTED';
}
$field .= '>' . (string)$values[$i]['text'] . '</option>';
}
$field .= '</select>';
return $field;
}
?>
De code in het formulier voor de selectielijst:
Code (php)
1
<?php echo draw_pull_down_menu('vertrekdatum', $values1, $_POST['vertrekdatum'], 'id="vertrekdatum" class="select"'); ?>
Hoe kan ik er nu voor zorgen dat datums uit het verleden niet meer getoond worden (ik kan ze niet verwijderen uit de database, omdat ze in een ander overzicht op een andere plek op de website nog wel getoond worden).
![Afbeelding Afbeelding](http://www.twin-r.nl/datum_selectie.jpg)
Gewijzigd op 06/02/2013 13:28:48 door Ruud Schaft
DateTime van kunnen maken. Als ik me niet vergis kan je dan rechtstreeks een vergelijking maken, dus met een object dat de huidige datum bevat. En anders kan je natuurlijk ook diff-method gebruiken, die het verschil (in dagen) tussen twee datums berekent. Wanneer de waarde dan kleiner dan 0 is, kan je besluiten dat de datum gepasseerd is.
Je zou er Die zou je moeten aanpassen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function draw_pull_down_menu($name, $values, $default = '', $parameters = '')
{
$field = '<select name="' . $name . '" '.($parameters ?: '').'>';
foreach($values as $value)
{
if(strtotime($value['id']) > time())
{
$field .= '<option value="'.$value['id'].'"'.($default == $value['id'] ? ' selected' : '').'>'.$value['text'].'</option>';
}
}
$field .= '</select>';
return $field;
}
?>
function draw_pull_down_menu($name, $values, $default = '', $parameters = '')
{
$field = '<select name="' . $name . '" '.($parameters ?: '').'>';
foreach($values as $value)
{
if(strtotime($value['id']) > time())
{
$field .= '<option value="'.$value['id'].'"'.($default == $value['id'] ? ' selected' : '').'>'.$value['text'].'</option>';
}
}
$field .= '</select>';
return $field;
}
?>
Zoiets? Er vanuit gaande dat de id's in $values te converteren is middels de strtotime functie. Wat dus bijvoorbeeld 2013-02-06 kan zijn
Ruud Schaft op 06/02/2013 13:26:25:
Hoe kan ik er nu voor zorgen dat datums uit het verleden niet meer getoond worden (ik kan ze niet verwijderen uit de database, omdat ze in een ander overzicht op een andere plek op de website nog wel getoond worden).
Als de datums uit de database komen, dan moet je in je query de data filteren, niet in php gaan lopen klooien. Dat wil niet zeggen dat je ze uit de database moet verwijdern, maar gewoon alleen die datums selecteren die na vandaag (of welke datum dan ook) liggen.
Ik zat zelf te denken om een conditie te maken op een waarde die toegevoegd wordt aan de array (bijv. 0 = inactief en 1 = actief)
Er is een database in array's waarmee de website wordt gevuld.....
De $value1 maakt een enkele array van de meervoudige array, dus positie 1 = eerste dag, positie 2 = 2e dag met daarachter diverse prijzen en andere data.
Code (php)
De 'database' array:
Ruud Schaft op 06/02/2013 14:55:57:
Een vergelijking met tijd gaat niet op omdat er ook reizen in de toekomst volgeboekt zijn en dus niet meer met de data in de lijst mogen voorkomen.
Wat een rare conclusie.... Het een sluit het ander natuurlijk niet uit.
Wat ik bedoel is dat een controle op huidige datum niet voldoende is en dus niet de oplossing van het probleem is
Ruud Schaft op 06/02/2013 13:26:25:
Nu wil ik graag data uit die lijst filteren/verwijderen omdat deze niet meer actief zijn (datum is gepasseerd).
is deze laatste conclusie van je ook alweer vreemd te noemen.
Je wil dus op twee dingen filteren:
- op datum voor die opties die over de datum zijn
- op het feit dat ze vol zijn
De tweede heeft niets met een datum te maken, dus het hele datum filteren kan je daar los van zien, dat zijn twee verschillende stappen die je moet nemen en die je afhankelijk van waar de gegevens vandaan komen (en hoe) los van elkaar kunt uitvoeren.
Dus begin eens opnieuw met helder je probleem uit te leggen en daarbij, ook belangrijk, eens duidelijk aan te geven hoe je de gegevens ophaalt.
Ik kom er nu achter dat het weg laten van de datums niet werkt, omdat met de output van de selectielijst weer prijzen uit de originele array worden opgehaald. De posities moeten dus altijd gelijk zijn.
Is het misschien mogelijk om de datums in de selectielijst door te halen aan de hand van een waarde uit de $prijs array?
Alles is mogelijk... maar ik denk echt dat het een stuk sneller gaat als je duidelijk uitlegt wat de situatie is. Waar komt de data vandaan? Welke controle heb je over de data, is het een relationele database bijvoorbeeld? Zo niet, hoe wordt dan precies die data aangeleverd, in welk format?
1. de data komt uit een php-bestand met daarin een array, genaamd $prijs
2. de meervoudige array wordt in stukjes geknipt ($values1, 2 etc) zodat elke positie in een aparte array komt (alle begin datums in de ene array en alle vertrekdatum in een andere array)
3. Deze arrays worden getoond in een selectielijst via een functie genaamd draw_pull_down_menu
4. Doel: hoe kan ik een onderscheid maken tussen datum die nog te boeken zijn en datums die al vol of zich in het verleden bevinden? Verwijderen uit de $values array is geen optie, omdat ik met de geselecteerde waarde terug ga naar de $prijs-array om daar de prijs behorende bij de datum op te halen.
Ik hoop dat ik nu duidelijk ben, door deze discussie heb ik al wel geleerd dat het weglaten van datums niet mogelijk is!
2) Ik vraag me af waarom dat nodig is. Als ik het goed begrijp heb je hier in elk geval wel controle over, dus ik zou het dan gewoon bij elkaar laten.
4) Uiteraard kan dat. Je kan de complete array doorlopen en elk element dat niet aan bepaalde eisen voldoet 'unsetten'. Ja, dat is dus weggooien, maar je opmerking over dat je de data nog ergens anders nodig hebt doet daarbij helemaal niet terzake. Je kan natuurlijk gewoon een array copieren van de oorspronkelijke variabele naar een andere en in die andere de boel door elkaar gooien. De oorspronkelijke blijft gewoon in tact, dus dat is geen enkel probleem.
Ruud Schaft op 06/02/2013 16:51:05:
Ik hoop dat ik nu duidelijk ben, door deze discussie heb ik al wel geleerd dat het weglaten van datums niet mogelijk is!
En nog een conclusie die ik totaal niet kan plaatsen. Hoezo je kan een datum niet weglaten?
Maar zo schieten we niets op, bedankt voor je input.
Graag of heel niet....