user1532468
user1532468

Reputation: 1753

Form submit button not passing name to php

Probably a very simple answer but one I am struggling with. I have a basic form which has a standard submit button. When this is clicked, it is being valued by jquery serialize and then Ajax to process php page etc. I am confused as to why the name of my submit button 'submit' is not being posted when a user clicks on it. The only reason I can think of, is that serialize only handles text,text area and select elements. If so, how can I send the name through to php for processing. I have included some sample code and would be grateful if someone could point me in the right direction. Thanks

html form

<!--- Form to add box -->

<div id="boxaddform" style="display:none;">
    <div class="dialogTop_padd"></div>
        <form id="BA_boxform" name="BA_boxform" method="post">  

        <fieldset>
        <legend><span></span>Select Company</legend>
            <div class="spacer"></div>
        <div class="formMessage">Click again to open</div>
        <div class="fld_fld">

        <div>
        <label for="BA_customer">Company:</label><br />
        <select name="BA_customer" id="BA_customer">
        <option SELECTED VALUE="">Select a Company</option>
        <?php
        do {  
        ?>
        <option value="<?php echo $row_Recordsetcust['customer']?>"><?php echo $row_Recordsetcust['customer']?></option>
        <?php

        } 
        while ($row_Recordsetcust = mysql_fetch_assoc($Recordsetcust));
        $rows = mysql_num_rows($Recordsetcust);

        if($rows > 0)

        {
        mysql_data_seek($Recordsetcust, 0);
        $row_Recordsetcust = mysql_fetch_assoc($Recordsetcust);
        }

        ?>
        </select>

        <div class="spacer"></div>
        <!--- displays the address and dept from the change function -->
        <div id="BA_dept"></div>
        <br />
        <div id="BA_address"></div>

            </div>
        </fieldset>
        <div class="dialogTop_padd"></div>
        <!--- fieldset for service level -->
        <fieldset>
        <legend>Service Level</legend>
        <div class="spacer"></div>
        <div>
        <label for="BA_service">Service level:</label>
        <select name="BA_service" id="BA_service">
        <option SELECTED VALUE="">Select an option</option>
        <option value="Standard">Standard</option>
        <option value="Rapid">Rapid</option>
        </select><br />
        </div>
        </fieldset>
        <div class="dialogTop_padd"></div>

        <!--- fieldset for box # -->
        <fieldset>
        <legend>Box Details</legend>
        <div class="spacer"></div>
        <div>
        <label for="BA_box">Box#:</label><br />
        <input id="BA_box" name="BA_box" type="text" size="32" maxlength="128"  /><br />
        </div>

        <div>
        <label for="BA_destdate">Destroy date:</label>
        <input id="BA_destdate" name="BA_destdate" type="text" size="32" maxlength="128" value = "" /><br />
        </div>
        </fieldset>
        <div class="dialogTop_padd"></div>
        <!--- fieldset for authorisation -->
        <fieldset>
        <legend>Authorisation</legend>
        <div class="spacer"></div>
        <div>
        <label for="BA_authorised">Requested By:</label>
        <input id="BA_authorised" name="BA_authorised" type="text" value="<?php echo $_SESSION['kt_name_usr']; ?>"><br />
        </div>
        </fieldset>

        <!--- div to show callback result from ajax via dialog -->
            <br />      
            <div id="BA_addbox"></div>
            <br />
             <input class="AddBoxSubmitButton" type="submit"  id="submit" name="submit" value="Add Box" />
             <input class="AddBoxResetButton" type="reset"  name="cancel" value="Clear Form" />
        <!--- buttons to submit form and reset form to default status -->
        <!-- <button id="BA_submit" class="submitbutton icon-right ui-state-default2 ui-corner-all"><span class="ui-icon ui-icon-circle-plus"></span>Add Box</button>
        <button type="reset" id="BA_reset" class="resetbutton icon-right ui-state-default2 ui-corner-all"><span class="ui-icon ui-icon-circle-plus"></span>Reset</button>
        --><br />

        </form>
           <br />
    </div>

jquery code

$(function(){         
        $("#BA_boxform").submit(function(){

         var formdata = $('#BA_boxform').serialize();
         alert(formdata);
         $.ajax({
           type: "POST",
           url: "/domain/admin/requests/boxes/boxesadd.php",
           data: formdata,
           dataType: 'json',
           success: function(msg){
               //$("#confirm_department").hide();

               /*
               var $dialog = $('<div id="dialog"></div>')
               .html('Your intake was successfully submitted and will be viewable in the reporting area.<br /><br />Thank you.');
               $dialog.dialog({
               autoOpen: true,
               modal: true,
               title: 'Box intake submission successfull',
               width: 400,
               height: 200,
               draggable: false,
               resizable: false,
               buttons: {
               Close: function() {
               $( this ).dialog( "close" );
               }
               }
               });
               */
               //alert('You have succesfully submitted your ' + msg.company + ' report. Thank you.');
               //console.log(msg);
               $("#BA_addbox").show();

               //$("#formImage .col_1 li").show();
               $("#BA_boxform").get(0).reset();
               //$("#boxaddform").hide();
          }
       });
         return false;
     });
});

// End function to submit box intake form

cutdown php code for illustration

if (isset($_POST['submit']))    { }

Upvotes: 1

Views: 649

Answers (2)

A. Wolff
A. Wolff

Reputation: 74420

Like said, submit buttons aren't serialized. A possible workaround: { not tested but as i understand it, should work }

$('#BA_boxform input:submit').on('click', function () {
    var formdata = $('#BA_boxform').serialize() + '&submit=' + $(this).val();
    //....
    return false;
});

Upvotes: 1

Leri
Leri

Reputation: 12535

jQuery won't serialize submit button:

Docs:

Note: Only "successful controls" are serialized to the string. No submit button value is serialized since the form was not submitted using a button.

Workaround is to check if $_POST is not empty:

if (!empty($_POST)) {
    // Your code here
}

or check if specific input was set. E.g.

 if (isset($_POST['BA_customer'])) {

 }

Upvotes: 3

Related Questions