To help you understand:
I have a mother form with an empty form code tab;
This is the code of my 1° child:
<div class="form_item">
<div class="form_element cf_heading">
<h1 class="cf_text">ISCRIZIONI ADMINISTRATOR</h1>
</div>
<div class="cfclear"> </div>
</div>
<select class="cf_inputbox validate-selection" id="paese" size="1" title="" name="paese">
<option value="">Seleziona la Città</option>
<?php
$db =& JFactory::getDBO();
$query = "
SELECT `city`
FROM `#__chronoforms_iscrizioni_ente_2` ";
$db->setQuery($query);
$rows = $db->loadObjectList();
foreach ($rows as $row) {
echo "<option value='$row->city'>$row->city</option>";
}
?>
</select>
<div class="form_item">
<div class="form_element cf_button">
<input value="Continua" name="button_2" type="submit" />
</div>
<div class="cfclear"> </div>
</div>
This is the code of my 2° child:
<input value="" id="hidden_20" name="date_int" type="hidden" />
<div class="form_item">
<div class="form_element cf_heading">
<h1 class="cf_text">ISCRIZIONI</h1>
</div>
<div class="cfclear"> </div>
</div>
<select class="cf_inputbox" id="nome_ente" size="1" title="Il campo è obbligatorio." name="nome_ente">
<option value="">Seleziona l'ente</option>
<?php
$db =& JFactory::getDBO();
$query = "
SELECT `city`, `name_copy`
FROM `#__chronoforms_iscrizioni_ente_2`
WHERE `city` = '".$posted['paese']."'";
$db->setQuery($query);
$rows = $db->loadObjectList();
foreach ($rows as $row) {
echo "<option value='$row->name_copy'>$row->name_copy</option>";
}
?>
</select>
<div class="form_item">
<div class="form_element cf_textbox">
<label class="cf_label" style="width: 150px;">Nome</label>
<input class="cf_inputbox required" maxlength="150" size="30" title="Il campo è obbligatorio!" id="text_1" name="name" type="text" />
<a class="tooltiplink" onclick="return false;"><img height="16" border="0" width="16" class="tooltipimg" alt="" src="components/com_chronocontact/css/images/tooltip.png"/></a>
<div class="tooltipdiv">Nome :: Inserisci il nome del partecipante</div>
</div>
<div class="cfclear"> </div>
</div>
<div class="form_item">
<div class="form_element cf_textbox">
<label class="cf_label" style="width: 150px;">Cognome</label>
<input class="cf_inputbox required" maxlength="150" size="30" title="Il campo è obbligatorio!" id="text_2" name="surname" type="text" />
<a class="tooltiplink" onclick="return false;"><img height="16" border="0" width="16" class="tooltipimg" alt="" src="components/com_chronocontact/css/images/tooltip.png"/></a>
<div class="tooltipdiv">Cognome :: Inserisci il cognome del partecipante</div>
</div>
<div class="cfclear"> </div>
</div>
<div class="form_item">
<div class="form_element cf_textbox">
<label class="cf_label" style="width: 150px;">Data di Nascita</label>
<input class="cf_inputbox required validate-date-au" maxlength="10" size="10" title="Il campo è obbligatorio! Inserisci la data in formato gg/mm/aaaa!" id="text_3" name="date_of_birth" type="text" />
<a class="tooltiplink" onclick="return false;"><img height="16" border="0" width="16" class="tooltipimg" alt="" src="components/com_chronocontact/css/images/tooltip.png"/></a>
<div class="tooltipdiv">Data di Nascita :: Inserisci la Data di Nascita del partecipante</div>
</div>
<div class="cfclear"> </div>
</div>
<div class="form_item">
<div class="form_element cf_radiobutton">
<label class="cf_label" style="width: 150px;">Sesso</label>
<div class="float_left">
<input value="M" title="Sleziona un'opzione!" class="radio validate-one-required" id="radio00" name="radio0" type="radio" />
<label for="radio00" class="radio_label">Maschio</label>
<br />
<input value="F" title="Seleziona un'opzione!" class="radio validate-one-required" id="radio01" name="radio0" type="radio" />
<label for="radio01" class="radio_label">Femmina</label>
</div>
<a class="tooltiplink" onclick="return false;"><img height="16" border="0" width="16" class="tooltipimg" alt="" src="components/com_chronocontact/css/images/tooltip.png"/></a>
<div class="tooltipdiv">Sesso :: Sleziona il sesso del partecipante</div>
</div>
<div class="cfclear"> </div>
</div>
<div class="form_item">
<div class="form_element cf_heading">
<h2 class="cf_text">Gare e Categorie:</h2>
</div>
<div class="cfclear"> </div>
</div>
<table>
<td width="50%">
<div class="form_item">
<div class="form_element cf_checkbox">
<label class="cf_label" style="display: none;">Click Me to Edit</label>
<div class="float_left">
<input value="SI" title="" class="radio" id="check10" name="check1[]" type="checkbox" />
<label for="check10" class="check_label">30 metri</label>
<br />
</div>
</div>
<div class="cfclear"> </div>
</div>
<div class="form_item">
<div class="form_element cf_checkbox">
<label class="cf_label" style="display: none;">Click Me to Edit</label>
<div class="float_left">
<input value="SI" title="" class="radio" id="check20" name="check2[]" type="checkbox" />
<label for="check20" class="check_label">Lancio dei Cerchi</label>
<br />
</div>
</div>
<div class="cfclear"> </div>
</div>
<div class="form_item">
<div class="form_element cf_checkbox">
<label class="cf_label" style="display: none;">Click Me to Edit</label>
<div class="float_left">
<input value="SI" title="" class="radio" id="check30" name="check3[]" type="checkbox" />
<label for="check30" class="check_label">Canestro</label>
<br />
</div>
</div>
<div class="cfclear"> </div>
</div>
<div class="form_item">
<div class="form_element cf_checkbox">
<label class="cf_label" style="display: none;">Click Me to Edit</label>
<div class="float_left">
<input value="SI" title="" class="radio" id="check40" name="check4[]" type="checkbox" />
<label for="check40" class="check_label">Tiro ai Barattoli</label>
<br />
</div>
</div>
<div class="cfclear"> </div>
</div>
</td>
<td>
<br> <br> <br>
<div class="form_item">
<div class="form_element cf_dropdown">
<label class="cf_label" style="width: 150px;"></label>
<select class="cf_inputbox" id="select_18" size="1" title="" name="cat_cerchi">
<option value="">Seleziona una Categoria</option>
<option value="D">Deambulante</option>
<option value="ND">Non Deambulante</option>
</select>
<a class="tooltiplink" onclick="return false;"><img height="16" border="0" width="16" class="tooltipimg" alt="" src="components/com_chronocontact/css/images/tooltip.png"/></a>
<div class="tooltipdiv">Categoria Lancio dei Cerchi :: Seleziona la categoria per la gara "Lancio dei Cerchi"</div>
</div>
<div class="cfclear"> </div>
</div>
<div class="form_item">
<div class="form_element cf_dropdown">
<label class="cf_label" style="width: 150px;"></label>
<select class="cf_inputbox" id="select_19" size="1" title="" name="cat_canestro">
<option value="">Seleziona una Categoria</option>
<option value="D">Deambulante</option>
<option value="ND">Non Deambulante</option>
</select>
<a class="tooltiplink" onclick="return false;"><img height="16" border="0" width="16" class="tooltipimg" alt="" src="components/com_chronocontact/css/images/tooltip.png"/></a>
<div class="tooltipdiv">Categoria Canestro :: Seleziona la categoria per la gara "Canestro"</div>
</div>
<div class="cfclear"> </div>
</div>
<div class="form_item">
<div class="form_element cf_dropdown">
<label class="cf_label" style="width: 150px;"></label>
<select class="cf_inputbox" id="select_20" size="1" title="" name="cat_barattoli">
<option value="">Seleziona una Categoria</option>
<option value="D">Deambulante</option>
<option value="ND">Non Deambulante</option>
</select>
<a class="tooltiplink" onclick="return false;"><img height="16" border="0" width="16" class="tooltipimg" alt="" src="components/com_chronocontact/css/images/tooltip.png"/></a>
<div class="tooltipdiv">Categoria Tiro ai Barattoli :: Seleziona la categoria per la gara "Tiro ai Barattoli"</div>
</div>
<div class="cfclear"> </div>
</div>
</td>
</table>
<div class="form_item">
<div class="form_element cf_button">
<input value="Salva" name="button_3" type="submit" />
</div>
<div class="cfclear"> </div>
</div>
And this is the server side validation code:
<?php
// formatto data di nascita in yyyymmdd in variabile date_int
JRequest::setVar('date_int',substr(JRequest::getVar('date_of_birth','','post'),6,4)."".substr(JRequest::getVar('date_of_birth','','post'),3,2)."".substr(JRequest::getVar('date_of_birth','', 'post'),0,2), 'post');
// controllo data se maggiore del 01/01/1946
if ( JRequest::getVar('date_int') > 19460101 )
return ("Attenzione! Come da regolamento, non possono partecipare alle gare le persone nate dopo il 1946!");
// controllo gara/categoria (lancio dei cerchi)
if (($_POST['check2'] != '') && ($_POST['cat_cerchi'] == ''))
return 'Attenzione! Seleziona una categoria per la gara "Lancio dei Cerhi"!';
if (($_POST['cat_cerchi'] != '') && ($_POST['check2'] == ''))
return 'Attenzione! Hai selezionato una categoria per la gara Lancio dei Cerchi ma non hai selezionato la gara!';
// controllo gara/categoria (canestro)
if (($_POST['check3'] != '') && ($_POST['cat_canestro'] == ''))
return 'Attenzione! Seleziona una categoria per la gara "Canestro"!';
if (($_POST['cat_canestro'] != '') && ($_POST['check3'] == ''))
return 'Attenzione! Hai selezionato una categoria per la gara Canestro ma non hai selezionato la gara!';
// controllo gara/categoria (tiro ai batattoli)
if (($_POST['check4'] != '') && ($_POST['cat_barattoli'] == ''))
return 'Attenzione! Seleziona una categoria per la gara "Tiro ai Barattoli!"';
if (($_POST['cat_barattoli'] != '') && ($_POST['check4'] == ''))
return 'Attenzione! Hai selezionato una categoria per la gara Tiro ai Barattoli ma non hai selezionato la gara!';
// controllo che sia stata selezionata almeno una gara
if (($_POST['check1'] == '') && ($_POST['check2'] == '') && ($_POST['check3'] == '') && ($_POST['check4'] == ''))
return 'Attenzione! Per poter iscrivere il partecipante devi selezionare almeno una gara';
// caratteri maiuscoli field name, surname
JRequest::setVar( "name", mb_strtoupper(JRequest::getVar('name','','post')));
JRequest::setVar( "surname", mb_strtoupper (JRequest::getVar('surname','','post')));
// controllo partecipante già esistente
$db =& JFactory::getDBO();
$name = JRequest::getString('name', '', 'post');
$surname = JRequest::getString('surname', '', 'post');
$date_of_birth = JRequest::getString('date_of_birth', '', 'post');
$query = "
SELECT COUNT(*)
FROM `#__chronoforms_iscrizioni_olimpiadi`
WHERE `name` = '$name'
AND `surname` = '$surname'
AND `date_of_birth` = '$date_of_birth';
";
$db->setQuery($query);
$count = $db->loadResult();
if ( $count ) {
return "Attenzione! Partecipante già iscritto!";
}
?>
As you can see fields involved in server side validation are all placed in the 2° child.
I've tried to put the code in child 1 server side validation too and it returns error messages but thats because it doesn't find fields it's lookin' for...