[PHP] Jak wykonać formularz z datą w postaci pól OPTION, aby nie dało się wybrać daty z przeszłości?
Chcesz stworzyć formularz z polami SELECT/OPTION, w których można wybrać rok, miesiąc i dzień, ale nie mogą to być daty z przeszłości.
Datę w formularzach podaje się niemal na każdym kroku. Można ją wpisać ręcznie, ale wtedy łatwo o pomyłkę lub zamienienie miesiąca z dniem. Mało tego, zwykle daty zapisywane są w różnych formatach, więc trzeba je dokładnie sprawdzać.
Bardzo łatwo możesz zrobić datę, której nie trzeba wpisywać ręcznie bo wystarczy ją wybrać z menu zawierającego dzień, miesiąc i rok. To jeszcze nic - jeżeli ktoś zechce wybrać datę z przeszłości, nie zrobi tego i otrzyma stosowny komunikat. Nie muszę chyba dodawać, że data sama ustawia się na aktualnym dniu, aby maksymalnie uprościć wypełnianie formularza. Zróbmy taki mechanizm:
<script language="JavaScript" type="text/javascript">
<!--
function sprawdz() {
data=new Date();
m=data.getMonth()+1;
d=data.getDate();
r=data.getFullYear();
dzisiaj=""+r+((m<10)?"0":"")+m+((d<10)?"0":"")+d;
pr=document.f1.rok[document.f1.rok.selectedIndex].value;
pm=document.f1.miesiac[document.f1.miesiac.selectedIndex].value;
pd=document.f1.dzien[document.f1.dzien.selectedIndex].value;
wybrany=""+pr+((pm<10)?"0":"")+pm+((pd<10)?"0":"")+pd;
if (dzisiaj>wybrany) {
alert("Wybrana data z przeszłości!");
document.f1.rok.options[r-document.f1.rok[0].value].selected=true;
document.f1.miesiac.options[m-1].selected=true;
document.f1.dzien.options[d-1].selected=true;
}
}
//-->
</script>
<form name="f1">
Wybierz datÄ™:<br>
<select name="rok" onchange="sprawdz()">
<?
for ($i=2002;$i<=2010;$i++) {
echo "<option value=$i";
if ($i==date("Y")) echo " selected";
echo ">$i</option>";
}
?>
</select>
<select name="miesiac" onchange="sprawdz()">
<?
for ($i=1;$i<=12;$i++) {
echo "<option value=$i";
if ($i==date("m")) echo " selected";
echo ">$i</option>";
}
?>
</select>
<select name="dzien" onchange="sprawdz()">
<?
for ($i=1;$i<=31;$i++) {
echo "<option value=$i";
if ($i==date("d")) echo " selected";
echo ">$i</option>";
}
?>
</select>
</form>
PoczÄ…tek formularza
Wybierz datÄ™:
Dół formularza
Generowanie daty to wypisanie w pętli wybranych lat, wszystkich miesięcy i dni w elementach OPTION. Dla aktualnych wartości wybieramy wstępnie pola za pomocą polecenia selected.
Przy każdej zmianie daty następuje wywołanie funkcji sprawdz(), która czuwa aby data nie pochodziła z przeszłości. Funkcja jest prosta - tworzy ciąg składający się z aktualnej daty i z daty ustawionej w formularzu.
Potem dwa ciągi dat są porównane i jeżeli ustawiony jest mniejszy od obecnego, to jest to data zabroniona (z przeszłości). W takim wypadku skrypt znowu ustawia datę dzisiejszą, aby użytkownik mógł dokonać ponownego wyboru.