Gandalf
Gandalf

Reputation: 930

How to save data from a JavaScript variable outside the form in PHP/AJAX/jQuery?

PHP newbie here. I want to save a variable (from jQuery) in PHP/MySQL, but this variable is outside the form. The values from the form elements inside the form is being saved fine though. The variable name in this case is 'mode', and I want the 'mode' to be sent to PHP.

Here's code :

HTML form;

<form action="submit.php" method="post" id="myform">
 <textarea id="source1" name="source1"></textarea>
<textarea id="source2" name="source2"></textarea>
 <input type="image" src="images/save.png" name="submit" id="submit" title="Save"  class="save-button"/>    
</form>

jQuery / AJAX:

mode = 1;  // This value needs to be stored/saved

// AJAX form save
$("form#myform").submit( function () {    
$.post(
'submit.php',
$(this).serialize(),
function(data){
....
}
);

PHP:

$submit_time = date('Y/m/d H:i:s');
$content1 = $_POST['source1'];
$content2 = $_POST['source2'];
$mode = $_POST['mode'];  // This value needs to be stored/saved

Is the solution to create a hidden form field inside the form?

Upvotes: 3

Views: 537

Answers (3)

adeneo
adeneo

Reputation: 318182

jQuery's serialize() serializes the form into a querystring, so you really just have to add to that string :

mode = 1;

$("form#myform").submit( function (e) {    
    e.preventDefault();
    var data = $(this).serialize() + '&mode=' + mode;
    $.post('submit.php', data, function(data){

    });
});

or to submit the form with a hidden input:

$("form#myform").submit( function (e) {  
    e.preventDefault();
    $(this).append( $('<input />', {type:'hidden', name:'mode', value:mode}) );
    this.submit();
});

Upvotes: 2

christian.thomas
christian.thomas

Reputation: 1122

Try:

// AJAX form save
$("form#myform").submit( function () {    
    $.post('submit.php', $.extend($(this).serializeArray(), { mode: mode }), function(data){
        ....
    });
});

Upvotes: 1

D.J.
D.J.

Reputation: 1215

If the variable is not inside the form it doesn't get send to the server.

The solution is to put the variable into hidden field inside the form

Upvotes: 2

Related Questions