Tak, po stronie serwera jest wszystko w PHP zrobione, chodzi teraz o walidację po stronie klienta (zabezpieczenie formularza pod kątem uzupełnienia wszystkich pól).
Znalazłem taką funkcję, która sprawdza się dosyć dobrze:
<script type="text/javascript" language="JavaScript">
function validateFormOnSubmit(theForm) {
var reason = "";
reason += validateEmpty(theForm.survey_desc);
if (reason != "") {
alert("Some fields need correction:\n" + reason);
return false;
}
return true;
}
function validateEmpty(fld) {
var error = "";
if (fld.value.length == 0) {
fld.style.background = 'Yellow';
error = "The required field has not been filled in.\n"
} else {
fld.style.background = 'White';
}
return error;
}
</script>
Formularz:
<form name="add_survey_step_1" action="test.php?step=2" method="POST" onsubmit="return validateFormOnSubmit(this)"> <textarea name="survey_desc" maxlength="250" style="width: 425px; height: 80px"> <input type="submit" name="submit_1" value="Krok 2 >>>" />
Tylko teraz mam taki problem - załóżmy, że mam 100 pól do sprawdzenia - musiałbym w skrypcie wywołać 100 razy "reason += validateEmpty(theForm.survey_desc);". Czy mógłby mi ktoś pomóc przerobić tę funkcję w taki sposób, żeby sprawdzała ona wszystkie pola z danego formularza (np. za pomocą getElementByTagName("input") ) i zaznaczała jakimś kolorem pola, które nie były wypełnione?
EDIT:
Nieważne.. sam sobie jakoś poradziłem mimo, że o JS nie mam zbyt wielkiego pojęcia.
Jeśli by ktoś potrzebował, to zamieszczam kod:
<script type="text/javascript" language="JavaScript">
var ClassName = "val"; //nazwa klasy elementów, które mają być poddane walidacji
var FocusColor = "#CC0000"; //kolor podświetlenia niewypełnionego pola
function checkForm(theForm) {
var error = false;
var inputfields = document.getElementsByTagName("input");
for(var x = 0 ; x < inputfields.length ; x++ ) {
if(inputfields[x].getAttribute("class") == ClassName) {
if (inputfields[x].value.length == 0) {
inputfields[x].style.background = FocusColor;
error = true;
}
else {
inputfields[x].style.background = 'White';
}
}
}
if(error == true) {
alert("Wypełnij wszystkie pola!");
return false;
}
}
</script>
Formularz:
<form name="add_survey_step_1" action="test.php?step=2" method="POST" onsubmit="return checkForm(this)"> <input type="text" name="survey_desc" class="val" maxlength="250" /> <input type="submit" name="submit_1" value="Krok 2 >>>" />
Należy pamiętać jedną ważną rzecz - aby element został poddany walidacji musi mieć ustawiony atrybut class="". Zrobiłem tak, ponieważ w formularzu będę miał takie pola, które nie muszą być wypełnione i nie będą poddane walidacji.
Problem pojawia się przy <textarea> - jako, że walidacja leci po inputach (var inputfields = document.getElementsByTagName("input")

- wie ktoś jak to przerobić, żeby działało też na textarea?