We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 36573
    • 173 Posts
    I have six forms on one page all with separate submitvar names (needed to save the date using formsave). How do I create one button outside the forms to submit each form then redirect to a thank you page. I would also need an option that it would skip a form if the name input is blank.

    Any direction would be helpful
      Everything I know I learned on the internet. Saved me thousands in College tuition,
      • 4172
      • 5,888 Posts
      why can't you put all form - fields into one form?
        -------------------------------

        you can buy me a beer, if you like MIGX

        http://webcmsolutions.de/migx.html

        Thanks!
        • 36573
        • 173 Posts
        Quote from: Bruno17 at Apr 03, 2015, 06:22 PM
        why can't you put all form - fields into one form?

        I considered that, but I need each form to be a separate line in formsave and the only way I could see to do that is to run each form separately.
          Everything I know I learned on the internet. Saved me thousands in College tuition,
          • 4172
          • 5,888 Posts
          I think its better to put them all into one form and create a custom hook to save your datas to the db.
            -------------------------------

            you can buy me a beer, if you like MIGX

            http://webcmsolutions.de/migx.html

            Thanks!
            • 3749
            • 24,544 Posts
            I agree with Bruno, unless you need to let them submit just one of the six forms without submitting the other five. If not, you really have a single form (even if it might look like multiple forms on the screen).

            If you make it one form, you shouldn't need more than one submit variable. In the processing snippet, you'd just have something like this:


            // sanitize $_POST here?
            
            $submitted = $modx->getOption('main_submit_var', $_POST, false, true);
            
            if ($submitted) {
                /* See if name field is empty for first section */
                if ($modx->getOption('form1_name', $_POST, false, true)) {
                    /* Save section 1 */
                }
                /* See if name field is empty for second section */
                if ($modx->getOption('form2_name', $_POST, false, true)) {
                    /* Save section 2 */
                }
            
                // etc.
            }
            return true;
            
              Did I help you? Buy me a beer
              Get my Book: MODX:The Official Guide
              MODX info for everyone: http://bobsguides.com/modx.html
              My MODX Extras
              Bob's Guides is now hosted at A2 MODX Hosting
              • 36573
              • 173 Posts
              I have it setup so you can register 1 to 6 people. I like the way formsave gives me access to the data in modx and that I can export a csv file. It would be much more involved to recreate that using one form.

              I'm not following the beginning of your code. What is the first line of that code doing? Would I need to make it an onclick function?

              Thank You.
                Everything I know I learned on the internet. Saved me thousands in College tuition,
                • 3749
                • 24,544 Posts
                It's checking to see if the form has been submitted by seeing if the $_POST contains the value of the submit button.
                  Did I help you? Buy me a beer
                  Get my Book: MODX:The Official Guide
                  MODX info for everyone: http://bobsguides.com/modx.html
                  My MODX Extras
                  Bob's Guides is now hosted at A2 MODX Hosting
                  • 4172
                  • 5,888 Posts
                  @crecorn

                  1. put them all into one form
                  2. let us see your form

                  Then we can give you a working hook-example

                  Otherwise you could save your datas of each form with ajax onclick of your button.
                  But this does it make more complicated than it has to be and your form does not work without javascript.
                    -------------------------------

                    you can buy me a beer, if you like MIGX

                    http://webcmsolutions.de/migx.html

                    Thanks!
                    • 36573
                    • 173 Posts
                    So here it is in one form. I only included 3 additional runners. The first form is filled out using data from users login. For some reason, formsave is only saving data up until rnr-age and that's it. I do see how one form would make it simpler but I have no idea how to parse each runner's data. Plus if they only have one additional runner how would I skip the others?

                    But this does it make more complicated than it has to be and your form does not work without javascript.

                    I'm going to need to add up the totals and include a check out so I don't see how I can avoid JS.

                    [[!FormIt?
                       &hooks=`FormSave,redirect`
                       &redirectTo=`3`
                       &fsFormTopic=`[[*pagetitle]]`
                       &fsFormFields=`username,rnr-name,rnr-age,rnr-dist,rnr-swag,rnr-add01,rnr-age01,rnr-sex01,rnr-dist01,rnr-swag01,rnr-add02,rnr-age02,rnr-sex02,rnr-dist02,rnr-swag02,  rnr-add03,rnr-age03,rnr-sex03,rnr-dist03,rnr-swag03`
                       
                    ]]
                    
                    [[!+fi.validation_error_message:notempty=`<p>[[!+fi.validation_error_message]]</p>`]]
                     
                    <form action="[[~[[*id]]]]" method="post" class="form">
                    <div class="ten columns">
                        <div class="form-group[[+error.username:notempty=` error`]]">
                            <label for="username">[[!%login.username]] <span class="error">[[+error.username]]</span></label>
                            <input type="text" name="username" id="username" value="[[+username]]" readonly />
                          </div>
                          
                          <div class="form-group[[+error.rnr-name:notempty=` error`]]">
                            <label for="rnr-name">Runners Name <span class="error">[[+error.rnr-name]]</span></label>
                            <input type="text" name="rnr-name" id="rnr-name" value="[[+fullname]]" readonly />
                          </div>
                          
                           <div class="form-group[[+error.rnr-age:notempty=` error`]]">
                            <label for="rnr-age">Runners Age <span class="error">[[+error.rnr-age]]</span></label>
                            <input type="text" name="rnr-age" id="rnr-age" value="[[+age:toAge]]" readonly />
                          </div>
                          
                          <div class="form-group[[+error.rnr-age:notempty=` error`]]">
                            <label for="rnr-age">Gender <span class="error">[[+error.rnr-sex]]</span></label>
                            <input type="text" name="sex" id="sex" value="[[+sex]]" readonly />
                          </div>
                          
                          <div class="form-group[[+error.runname:notempty=` error`]]">
                            <label for="runname">Run Name <span class="error">[[+error.runname]]</span></label>
                            <input type="text" name="runname" id="runname" value="[[*pagetitle]]" readonly />
                          </div>
                          
                          <div class="form-group[[+error.rnr-dist:notempty=` error`]]">
                            <label for="rnr-dist">Run Distance<span>[[+error.rnr-dist]]</span> </label>
                            <select name="rnr-dist">
                              <option value="" [[!+fi.rnr-dist:FormItIsSelected=``]] >Select One</option>
                              <option value="15k" [[!+fi.rnr-dist:FormItIsSelected=`15k`]] >15k</option>
                              <option value="5k" [[!+fi.rnr-dist:FormItIsSelected=`5k`]] >5k</option>
                            </select>
                          </div>
                    
                          <div class="form-group[[+error.rnr-swag:notempty=` error`]]">
                            <label for="rnr-swag">Swag<span>[[+error.rnr-swag]]</span> </label>
                            <select name="rnr-swag">
                              <option value="" [[!+fi.rnr-swag:FormItIsSelected=``]] >Select One</option>
                              <option value="t-lg" [[!+fi.rnr-swag:FormItIsSelected=`t-lg`]] >T-Shirt Large</option>
                              <option value="t-sm" [[!+fi.rnr-swag:FormItIsSelected=`t-sm`]] >T-Shirt Small</option>
                            </select>
                          </div>
                          
                          <div class="form-group[[+error.rnrm-price:notempty=` error`]]">
                            <label for="rnrm-price">Run Price<span class="error">[[+error.rnrm-price]]</span></label>
                            <input type="text" name="rnrm-price" id="rnrm-price" value="[[*prodPrice]]" readonly />
                          </div>
                    </div> 
                         
                    <!-- Additional Runner 01
                    --------------------------------------------------------------------------------------------------->
                     <div class="ten columns"> 
                          <div class="form-group[[+error.rnr-name:notempty=` error`]]">
                            <label for="rnr-add01">Runners Name <span class="error">[[+error.rnr-add01]]</span></label>
                            <input type="text" name="rnr-add01" id="rnr-add01" value="" />
                          </div>
                          
                           <div class="form-group[[+error.rnr-age:notempty=` error`]]">
                            <label for="rnr-age01">Runners Age <span class="error">[[+error.rnr-age01]]</span></label>
                            <input type="text" name="rnr-age01" id="rnr-age01" value="" />
                          </div>
                          
                          <div class="form-group[[+error.rnr-sex01:notempty=` error`]]">
                            <label for="rnr-sex01">Gender<span>[[+error.rnr-sex01]]</span> </label>
                            <select name="rnr-sex01" value="">
                              <option value=""[[!+fi.rnr-sex01:FormItIsSelected=``]] >Select One</option>
                              <option value="Male" [[!+fi.rnr-sex01:FormItIsSelected=`Male`]]>Male</option>
                              <option value="Female" [[!+fi.rnr-sex01:FormItIsSelected=`Female`]]>Female</option>
                            </select>
                          </div>
                          
                          <div class="form-group[[+error.runname01:notempty=` error`]]">
                            <label for="runname01">Run Name <span class="error">[[+error.runname01]]</span></label>
                            <input type="text" name="runname01" id="runname01" value="[[*pagetitle]]" />
                          </div>
                          
                          <div class="form-group[[+error.rnr-dist01:notempty=` error`]]">
                            <label for="rnr-dist01">Run Distance<span>[[+error.rnr-dist01]]</span> </label>
                            <select name="rnr-dist01">
                              <option value="" [[!+fi.rnr-dist01:FormItIsSelected=``]] >Select One</option>
                              <option value="15k" [[!+fi.rnr-dist01:FormItIsSelected=`15k`]] >15k</option>
                              <option value="5k" [[!+fi.rnr-dist01:FormItIsSelected=`5k`]] >5k</option>
                            </select>
                          </div>
                    
                          <div class="form-group[[+error.rnr-swag01:notempty=` error`]]">
                            <label for="rnr-swag01">Swag<span>[[+error.rnr-swag01]]</span> </label>
                            <select name="rnr-swag01">
                              <option value="" [[!+fi.rnr-swag01:FormItIsSelected=``]] >Select One</option>
                              <option value="t-lg" [[!+fi.rnr-swag01:FormItIsSelected=`t-lg`]] >T-Shirt Large</option>
                              <option value="t-sm" [[!+fi.rnr-swag01:FormItIsSelected=`t-sm`]] >T-Shirt Small</option>
                            </select>
                          </div>
                          
                          <div class="form-group[[+error.rnr-price:notempty=` error`]]">
                            <label for="rnr-price01">Run Price<span class="error">[[+error.rnr-price01]]</span></label>
                            <input type="text" name="rnr-price01" id="rnr-price01" value="[[*prodPrice]]" readonly />
                          </div>
                    </div>      
                    <!-- Additional Runner 02
                    --------------------------------------------------------------------------------------------------->
                      <div class="ten columns">   
                          <div class="form-group[[+error.rnr-name:notempty=` error`]]">
                            <label for="rnr-add02">Runners Name <span class="error">[[+error.rnr-add02]]</span></label>
                            <input type="text" name="rnr-add02" id="rnr-add02" value="" />
                          </div>
                          
                           <div class="form-group[[+error.rnr-age:notempty=` error`]]">
                            <label for="rnr-age02">Runners Age <span class="error">[[+error.rnr-age02]]</span></label>
                            <input type="text" name="rnr-age02" id="rnr-age02" value="" />
                          </div>
                          
                          <div class="form-group[[+error.rnr-sex02:notempty=` error`]]">
                            <label for="rnr-sex02">Gender<span>[[+error.rnr-sex02]]</span> </label>
                            <select name="rnr-sex02" value="">
                              <option value=""[[!+fi.rnr-sex02:FormItIsSelected=``]] >Select One</option>
                              <option value="Male" [[!+fi.rnr-sex02:FormItIsSelected=`Male`]]>Male</option>
                              <option value="Female" [[!+fi.rnr-sex02:FormItIsSelected=`Female`]]>Female</option>
                            </select>
                          </div>
                          
                          <div class="form-group[[+error.runname02:notempty=` error`]]">
                            <label for="runname02">Run Name <span class="error">[[+error.runname02]]</span></label>
                            <input type="text" name="runname02" id="runname02" value="[[*pagetitle]]" />
                          </div>
                          
                          <div class="form-group[[+error.rnr-dist02:notempty=` error`]]">
                            <label for="rnr-dist02">Run Distance<span>[[+error.rnr-dist02]]</span> </label>
                            <select name="rnr-dist02">
                              <option value="" [[!+fi.rnr-dist02:FormItIsSelected=``]] >Select One</option>
                              <option value="15k" [[!+fi.rnr-dist02:FormItIsSelected=`15k`]] >15k</option>
                              <option value="5k" [[!+fi.rnr-dist02:FormItIsSelected=`5k`]] >5k</option>
                            </select>
                          </div>
                    
                          <div class="form-group[[+error.rnr-swag02:notempty=` error`]]">
                            <label for="rnr-swag02">Swag<span>[[+error.rnr-swag02]]</span> </label>
                            <select name="rnr-swag02">
                              <option value="" [[!+fi.rnr-swag02:FormItIsSelected=``]] >Select One</option>
                              <option value="t-lg" [[!+fi.rnr-swag02:FormItIsSelected=`t-lg`]] >T-Shirt Large</option>
                              <option value="t-sm" [[!+fi.rnr-swag02:FormItIsSelected=`t-sm`]] >T-Shirt Small</option>
                            </select>
                          </div>
                          
                          <div class="form-group[[+error.rnr-price:notempty=` error`]]">
                            <label for="rnr-price02">Run Price<span class="error">[[+error.rnr-price02]]</span></label>
                            <input type="text" name="rnr-price02" id="rnr-price02" value="[[*prodPrice]]" readonly />
                          </div>
                    </div>      
                          <!-- Additional Runner 03
                    --------------------------------------------------------------------------------------------------->
                    <div class="ten columns">
                          <div class="form-group[[+error.rnr-name:notempty=` error`]]">
                            <label for="rnr-add03">Runners Name <span class="error">[[+error.rnr-add03]]</span></label>
                            <input type="text" name="rnr-add03" id="rnr-add03" value="" />
                          </div>
                          
                           <div class="form-group[[+error.rnr-age:notempty=` error`]]">
                            <label for="rnr-age03">Runners Age <span class="error">[[+error.rnr-age03]]</span></label>
                            <input type="text" name="rnr-age03" id="rnr-age03" value="" />
                          </div>
                          
                          <div class="form-group[[+error.rnr-sex03:notempty=` error`]]">
                            <label for="rnr-sex03">Gender<span>[[+error.rnr-sex03]]</span> </label>
                            <select name="rnr-sex03" value="">
                              <option value=""[[!+fi.rnr-sex03:FormItIsSelected=``]] >Select One</option>
                              <option value="Male" [[!+fi.rnr-sex03:FormItIsSelected=`Male`]]>Male</option>
                              <option value="Female" [[!+fi.rnr-sex03:FormItIsSelected=`Female`]]>Female</option>
                            </select>
                          </div>
                          
                          <div class="form-group[[+error.runname03:notempty=` error`]]">
                            <label for="runname03">Run Name <span class="error">[[+error.runname03]]</span></label>
                            <input type="text" name="runname03" id="runname03" value="[[*pagetitle]]" />
                          </div>
                          
                           <div class="form-group[[+error.rnr-dist03:notempty=` error`]]">
                            <label for="rnr-dist03">Run Distance<span>[[+error.rnr-dist03]]</span> </label>
                            <select name="rnr-dist03">
                              <option value="" [[!+fi.rnr-dist03:FormItIsSelected=``]] >Select One</option>
                              <option value="15k" [[!+fi.rnr-dist03:FormItIsSelected=`15k`]] >15k</option>
                              <option value="5k" [[!+fi.rnr-dist03:FormItIsSelected=`5k`]] >5k</option>
                            </select>
                          </div>
                    
                          <div class="form-group[[+error.rnr-swag03:notempty=` error`]]">
                            <label for="rnr-swag03">Swag<span>[[+error.rnr-swag03]]</span> </label>
                            <select name="rnr-swag03">
                              <option value="" [[!+fi.rnr-swag03:FormItIsSelected=``]] >Select One</option>
                              <option value="t-lg" [[!+fi.rnr-swag03:FormItIsSelected=`t-lg`]] >T-Shirt Large</option>
                              <option value="t-sm" [[!+fi.rnr-swag03:FormItIsSelected=`t-sm`]] >T-Shirt Small</option>
                            </select>
                          </div>
                          
                          <div class="form-group[[+error.rnr-price:notempty=` error`]]">
                            <label for="rnr-price03">Run Price<span class="error">[[+error.rnr-price03]]</span></label>
                            <input type="text" name="rnr-price03" id="rnr-price03" value="[[*prodPrice]]" readonly />
                          </div>
                     </div>     
                          
                    <input type="submit" value="Register" />  
                    </form>
                    
                    
                      Everything I know I learned on the internet. Saved me thousands in College tuition,
                      • 4172
                      • 5,888 Posts
                      you can do it this way:

                      first page:

                      [[!FormIt?
                         &hooks=`redirect`
                         &redirectTo=`227`
                         &fsFormTopic=`[[*pagetitle]]`
                         &store=`1`
                      ]]
                       
                      [[!+fi.validation_error_message:notempty=`<p>[[!+fi.validation_error_message]]</p>`]]
                        
                      <form action="[[~[[*id]]]]" method="post" class="form">
                      <div class="ten columns">
                          <div class="form-group[[+error.username:notempty=` error`]]">
                              <label for="username">[[!%login.username]] <span class="error">[[+error.username]]</span></label>
                              <input type="text" name="username" id="username" value="[[+username]]" readonly />
                            </div>
                             
                            <div class="form-group[[+error.rnr-name:notempty=` error`]]">
                              <label for="rnr-name">Runners Name <span class="error">[[+error.rnr-name]]</span></label>
                              <input type="text" name="rnr-name" id="rnr-name" value="[[+fullname]]" readonly />
                            </div>
                             
                             <div class="form-group[[+error.rnr-age:notempty=` error`]]">
                              <label for="rnr-age">Runners Age <span class="error">[[+error.rnr-age]]</span></label>
                              <input type="text" name="rnr-age" id="rnr-age" value="[[+age:toAge]]" readonly />
                            </div>
                             
                            <div class="form-group[[+error.rnr-age:notempty=` error`]]">
                              <label for="rnr-age">Gender <span class="error">[[+error.rnr-sex]]</span></label>
                              <input type="text" name="sex" id="sex" value="[[+sex]]" readonly />
                            </div>
                             
                            <div class="form-group[[+error.runname:notempty=` error`]]">
                              <label for="runname">Run Name <span class="error">[[+error.runname]]</span></label>
                              <input type="text" name="runname" id="runname" value="[[*pagetitle]]" readonly />
                            </div>
                             
                            <div class="form-group[[+error.rnr-dist:notempty=` error`]]">
                              <label for="rnr-dist">Run Distance<span>[[+error.rnr-dist]]</span> </label>
                              <select name="rnr-dist">
                                <option value="" [[!+fi.rnr-dist:FormItIsSelected=``]] >Select One</option>
                                <option value="15k" [[!+fi.rnr-dist:FormItIsSelected=`15k`]] >15k</option>
                                <option value="5k" [[!+fi.rnr-dist:FormItIsSelected=`5k`]] >5k</option>
                              </select>
                            </div>
                       
                            <div class="form-group[[+error.rnr-swag:notempty=` error`]]">
                              <label for="rnr-swag">Swag<span>[[+error.rnr-swag]]</span> </label>
                              <select name="rnr-swag">
                                <option value="" [[!+fi.rnr-swag:FormItIsSelected=``]] >Select One</option>
                                <option value="t-lg" [[!+fi.rnr-swag:FormItIsSelected=`t-lg`]] >T-Shirt Large</option>
                                <option value="t-sm" [[!+fi.rnr-swag:FormItIsSelected=`t-sm`]] >T-Shirt Small</option>
                              </select>
                            </div>
                             
                            <div class="form-group[[+error.rnrm-price:notempty=` error`]]">
                              <label for="rnrm-price">Run Price<span class="error">[[+error.rnrm-price]]</span></label>
                              <input type="text" name="rnrm-price" id="rnrm-price" value="[[*prodPrice]]" readonly />
                            </div>
                      
                            <div class="form-group[[+error.additional_runners:notempty=` error`]]">
                              <label for="additional_runners">How many additional Runners?<span class="error">[[+error.additional_runners]]</span></label>
                              <input type="text" name="additional_runners" id="additional_runners" value="[[!+fi.additional_runners]]" />
                            </div>
                      
                      </div> 
                            
                      <input type="submit" value="Next" />  
                      </form>
                      


                      second page (the &redirectTo -page)

                      [[!FormItRetriever]]
                      
                      [[!FormIt?
                         &hooks=`RunnersFormSave,redirect`
                         &redirectTo=`3`
                         &fsFormTopic=`[[*pagetitle]]`
                      ]]
                       
                      [[!+fi.validation_error_message:notempty=`<p>[[!+fi.validation_error_message]]</p>`]]
                        
                      <form action="[[~[[*id]]]]" method="post" class="form">
                      <div class="ten columns">
                          <div class="form-group[[+error.username:notempty=` error`]]">
                              <label for="username">[[!%login.username]] <span class="error">[[+error.username]]</span></label>
                              <input type="text" name="username" id="username" value="[[+username]]" readonly />
                            </div>
                             
                            <div class="form-group[[+error.rnr-name:notempty=` error`]]">
                              <label for="rnr-name">Runners Name <span class="error">[[+error.rnr-name]]</span></label>
                              <input type="text" name="rnr-name" id="rnr-name" value="[[+fullname]]" readonly />
                            </div>
                             
                             <div class="form-group[[+error.rnr-age:notempty=` error`]]">
                              <label for="rnr-age">Runners Age <span class="error">[[+error.rnr-age]]</span></label>
                              <input type="text" name="rnr-age" id="rnr-age" value="[[+age:toAge]]" readonly />
                            </div>
                             
                            <div class="form-group[[+error.rnr-age:notempty=` error`]]">
                              <label for="rnr-age">Gender <span class="error">[[+error.rnr-sex]]</span></label>
                              <input type="text" name="sex" id="sex" value="[[+sex]]" readonly />
                            </div>
                             
                            <div class="form-group[[+error.runname:notempty=` error`]]">
                              <label for="runname">Run Name <span class="error">[[+error.runname]]</span></label>
                              <input type="text" name="runname" id="runname" value="[[*pagetitle]]" readonly />
                            </div>
                             
                            <div class="form-group[[+error.rnr-dist:notempty=` error`]]">
                              <label for="rnr-dist">Run Distance<span>[[+error.rnr-dist]]</span> </label>
                              <select name="rnr-dist">
                                <option value="" [[!+fi.rnr-dist:FormItIsSelected=``]] >Select One</option>
                                <option value="15k" [[!+fi.rnr-dist:FormItIsSelected=`15k`]] >15k</option>
                                <option value="5k" [[!+fi.rnr-dist:FormItIsSelected=`5k`]] >5k</option>
                              </select>
                            </div>
                       
                            <div class="form-group[[+error.rnr-swag:notempty=` error`]]">
                              <label for="rnr-swag">Swag<span>[[+error.rnr-swag]]</span> </label>
                              <select name="rnr-swag">
                                <option value="" [[!+fi.rnr-swag:FormItIsSelected=``]] >Select One</option>
                                <option value="t-lg" [[!+fi.rnr-swag:FormItIsSelected=`t-lg`]] >T-Shirt Large</option>
                                <option value="t-sm" [[!+fi.rnr-swag:FormItIsSelected=`t-sm`]] >T-Shirt Small</option>
                              </select>
                            </div>
                             
                            <div class="form-group[[+error.rnrm-price:notempty=` error`]]">
                              <label for="rnrm-price">Run Price<span class="error">[[+error.rnrm-price]]</span></label>
                              <input type="text" name="rnrm-price" id="rnrm-price" value="[[*prodPrice]]" readonly />
                            </div>
                      
                            <div class="form-group[[+error.additional_runners:notempty=` error`]]">
                              <label for="additional_runners">How many additional Runners?<span class="error">[[+error.additional_runners]]</span></label>
                              <input type="text" name="additional_runners" id="additional_runners" value="[[!+fi.additional_runners]]" />
                            </div>
                      
                      </div> 
                            
                      [[!getAdditionalRunners? &tpl=`runnersform` &additional_runners=`[[!+fi.additional_runners]]`]]
                          
                             
                      <input type="submit" value="Register" />  
                      </form>
                      


                      the snippet 'getAdditionalRunners' which creates the formparts for each runner:

                      $additional_runners = (int) $modx->getOption('additional_runners',$scriptProperties,0);
                      
                      for ($i=1;$i<=$additional_runners;$i++){
                          $properties = array();
                          $properties['rnr_idx'] = $i;
                          $output .= $modx->getChunk($tpl,$properties);    
                      }
                      
                      return $output;
                      


                      the chunk 'runnersform'

                      <h3>Additional Runner [[+rnr_idx]]</h3>
                      
                       <div class="ten columns"> 
                            <div class="form-group[[+error.rnr-add[[+rnr_idx]]:notempty=` error`]]">
                              <label for="rnr-add[[+rnr_idx]]">Runners Name <span class="error">[[+error.rnr-add[[+rnr_idx]]]]</span></label>
                              <input type="text" name="rnr-add[[+rnr_idx]]" id="rnr-add[[+rnr_idx]]" value="[[!+fi.rnr-add[[+rnr_idx]]]]" />
                            </div>
                             
                             <div class="form-group[[+error.rnr-age:notempty=` error`]]">
                              <label for="rnr-age[[+rnr_idx]]">Runners Age <span class="error">[[+error.rnr-age[[+rnr_idx]]]]</span></label>
                              <input type="text" name="rnr-age[[+rnr_idx]]" id="rnr-age[[+rnr_idx]]" value="[[!+fi.rnr-age[[+rnr_idx]]]]" />
                            </div>
                             
                            <div class="form-group[[+error.rnr-sex[[+rnr_idx]]:notempty=` error`]]">
                              <label for="rnr-sex[[+rnr_idx]]">Gender<span>[[+error.rnr-sex[[+rnr_idx]]]]</span> </label>
                              <select name="rnr-sex[[+rnr_idx]]" value="">
                                <option value=""[[!+fi.rnr-sex[[+rnr_idx]]:FormItIsSelected=``]] >Select One</option>
                                <option value="Male" [[!+fi.rnr-sex[[+rnr_idx]]:FormItIsSelected=`Male`]]>Male</option>
                                <option value="Female" [[!+fi.rnr-sex[[+rnr_idx]]:FormItIsSelected=`Female`]]>Female</option>
                              </select>
                            </div>
                             
                            <div class="form-group[[+error.runname[[+rnr_idx]]:notempty=` error`]]">
                              <label for="runname[[+rnr_idx]]">Run Name <span class="error">[[+error.runname[[+rnr_idx]]]]</span></label>
                              <input type="text" name="runname[[+rnr_idx]]" id="runname[[+rnr_idx]]" value="[[*pagetitle]]" />
                            </div>
                             
                            <div class="form-group[[+error.rnr-dist[[+rnr_idx]]:notempty=` error`]]">
                              <label for="rnr-dist[[+rnr_idx]]">Run Distance<span>[[+error.rnr-dist[[+rnr_idx]]]]</span> </label>
                              <select name="rnr-dist[[+rnr_idx]]">
                                <option value="" [[!+fi.rnr-dist[[+rnr_idx]]:FormItIsSelected=``]] >Select One</option>
                                <option value="15k" [[!+fi.rnr-dist[[+rnr_idx]]:FormItIsSelected=`15k`]] >15k</option>
                                <option value="5k" [[!+fi.rnr-dist[[+rnr_idx]]:FormItIsSelected=`5k`]] >5k</option>
                              </select>
                            </div>
                       
                            <div class="form-group[[+error.rnr-swag[[+rnr_idx]]:notempty=` error`]]">
                              <label for="rnr-swag[[+rnr_idx]]">Swag<span>[[+error.rnr-swag[[+rnr_idx]]]]</span> </label>
                              <select name="rnr-swag[[+rnr_idx]]">
                                <option value="" [[!+fi.rnr-swag[[+rnr_idx]]:FormItIsSelected=``]] >Select One</option>
                                <option value="t-lg" [[!+fi.rnr-swag[[+rnr_idx]]:FormItIsSelected=`t-lg`]] >T-Shirt Large</option>
                                <option value="t-sm" [[!+fi.rnr-swag[[+rnr_idx]]:FormItIsSelected=`t-sm`]] >T-Shirt Small</option>
                              </select>
                            </div>
                             
                            <div class="form-group[[+error.rnr-price:notempty=` error`]]">
                              <label for="rnr-price[[+rnr_idx]]">Run Price<span class="error">[[+error.rnr-price[[+rnr_idx]]]]</span></label>
                              <input type="text" name="rnr-price[[+rnr_idx]]" id="rnr-price[[+rnr_idx]]" value="[[*prodPrice]]" readonly />
                            </div>
                      </div>      
                      


                      and finally the new snippet 'runnersFormSave'

                      // Load the FormSave class
                      $formSave = $modx->getService('formsave', 'FormSave', $modx->getOption('formsave.core_path', null, $modx->getOption('core_path') . 'components/formsave/') . 'model/formsave/', array());
                      if (!($formSave instanceof FormSave))
                          return '';
                      
                      $formit = &$hook->formit;
                      $formValues = $hook->getValues();
                      $formTopic = $modx->getOption('fsFormTopic', $formit->config, 'form');
                      
                      $formPublished = (int)$modx->getOption('fsFormPublished', $formit->config, 1);
                      
                      $formFields = 'username,rnr-name,rnr-age,rnr-dist,rnr-swag';
                      
                      $additional_runners = $hook->getValue('additional_runners');
                      
                      for ($i = 0; $i <= $additional_runners; $i++) {
                      
                          if ($formFields !== false) {
                              $formFields = explode(',', $formFields);
                              foreach ($formFields as $key => $value) {
                                   $formFields[$key] = trim($value);
                              }
                          }
                      
                          // Create new form object
                          $newForm = $modx->newObject('fsForm');
                      
                          // Build the data array
                          $dataArray = array();
                          if ($formFields === false) {
                              $dataArray = $hook->getValues();
                          } else {
                              $values = $hook->getValues();
                              foreach ($formFields as $field) {
                                  if (!isset($values[$field])) {
                                      // Add empty field
                                      $dataArray[$field] = '';
                                      continue;
                                  }
                      
                                  $dataArray[$field] = $values[$field];
                              }
                          }
                      
                          // Fill the database object
                          $newForm->fromArray(array(
                              'topic' => $formTopic,
                              'time' => time(),
                              'published' => $formPublished,
                              'data' => $dataArray,
                              'ip' => $_SERVER['REMOTE_ADDR']));
                      
                          // Save the form
                          $newForm->save();
                          
                          //set formfields for additional runners
                          $next = $i+1;
                          $formFields = 'rnr-add' . $next . ',rnr-age' . $next . ',rnr-sex' . $next . ',rnr-dist' . $next . ',rnr-swag' . $next;     
                      
                          // Set the form in FormIt so you can access it in any hook through $form->formSave
                          //$formit->formSave = $newForm;
                      
                      }
                      
                      
                      return true;
                      
                      [ed. note: Bruno17 last edited this post 9 years ago.]
                        -------------------------------

                        you can buy me a beer, if you like MIGX

                        http://webcmsolutions.de/migx.html

                        Thanks!