Ik heb een functie die een drop down / selectie lijst vult in een formulier.
Nu wil ik graag data uit die lijst filteren/verwijderen omdat deze niet meer actief zijn (datum is gepasseerd).
De functie:
<?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;
}
?>
De code in het formulier voor de selectielijst:
<?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).

Je zou er 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.
Waar komt $values1 vandaan?
Die zou je moeten aanpassen.

<?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;
}
?>


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.

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.
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.
<?php
$values1 = array();
//hiermee geef je de 1e data weer uit lijst prijzen
for ($i=0; $i<sizeof($prijs); $i+=1) {
$values1[$i] = array('id' => $i, 'text' => $prijs[$i][0]);
}
?>
De 'database' array:
<?php
$prijs = array( array("22 december 2012","29 december 2012", enz?>
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
Afgezien van het feit dat je openings vraag dan verkeerd 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.
Hmmm, je hebt wel een beetje gelijk ;0)
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?

Reageren