Forums

Multi page form and server side validation

federico85 19 Oct, 2010
Hi guys...
I've made a multi page form made up of 3 steps:
- iscrizioni_admin_mother
- iscrizioni_admin1
- iscrizioni_admin2
and the multi page plugin works perfectly.
I add a server side validation code in iscrizioni_admin2 which works only if I run the form by itself and not starting from iscrizioni_admin_mother.
Any idea?
Thanks.
GreyHead 20 Oct, 2010
Hi federico85,

I haven't tested this but I suspect that you have to use the mother form server-side validation and add a test to check which child form is returning the data. (I'm not certain that it will work then either - it may get confused between steps if there is an error - hopefully not.)

Bob
federico85 20 Oct, 2010
Hi Bob,
thanks for your reply...
I've tried to use the mother form server side validation but it get stuck at the first child and it doesn't show me the second one...
federico85 20 Oct, 2010
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...
This topic is locked and no more replies can be posted.