cerbin
cerbin

Reputation: 1189

Pass second parameter in ajax post request

I found a solution on internet on how to upload multiple files using ajax and php. In ajax request, I am passing form with files selected to upload, but I need to add one more parameter, but when I am doing it, it is not working. Im not good at php, and I tried pass second parameter in many ways but none worked. How can I pass second parameter so everything will be still working?

html:

<form method="post" enctype="multipart/form-data">
Select files to upload:
<input name="file[]" type="file" multiple>
<input type="button" onclick="upload(this)" value="Upload"/>
</form>

javascript:

function upload(element) {
        var formData = new FormData($(element).parents('form')[0]);
        $.ajax({
            url: 'upload.php',
            type: 'POST',
            success: function (callback) {
                // some code
            },
            data: formData,
            cache: false,
            contentType: false,
            processData: false
        });
    }

php

<?php
$mysqli = include 'connection.php';

$total = count($_FILES['file']['name']);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    for ($i = 0; $i < $total; $i++) {
        $name = $_FILES['file']['name'][$i];
        $size = $_FILES['file']['size'][$i];
        $location = 'uploads/';
        $target_file = $location . basename($name);
        if (isset($name)) {
            if (empty($name)) {
                echo 'Please choose a file' . "\n";
            } else if (file_exists($target_file)) {
                echo 'File already exists.' . "\n";
            } else if ($size > 1000000) {
                echo 'File is too large' . "\n";
            } else {
                $tmp_name = $_FILES['file']['tmp_name'][$i];
                $statement = $mysqli->prepare("INSERT INTO files (name, subjectId) VALUES (?, ?)");
                $str = '1'; // here I would like to set variable using $_POST
                $statement->bind_param('ss', $name, $str);

                if (move_uploaded_file($tmp_name, $location . $name)) {
                    if ($statement->execute()) {
                        echo 'File successfully uploaded :' . $location . $name . "\n";
                    } else {
                        echo 'Error while executing sql' . "\n";
                    }
                } else {
                    echo 'Error while uploading file on server' . "\n";
                }
            }
        }
    }
}

So what I would like to get is in javascript add second parameter:

data: formData, mySecondParameter

and then in php when I am binding params for sql, I would like to input there variable that I passed from javascript:

$str = $_POST['contentOfMySecondParameter'];

Upvotes: 2

Views: 455

Answers (3)

waleed
waleed

Reputation: 441

Only one object can be passed there. If you want another variable just append it to formData like this:

   var formData = new FormData($(element).parents('form')[0]);
   formData.append("mySecondParameter", mySecondParameter);
        $.ajax({
            ...
            data: formData,
            ...

Upvotes: 0

Oleg Imanilov
Oleg Imanilov

Reputation: 2751

Easiest way to do it, add <input type='hidden' name='contentOfMySecondParameter' value='???' /> to html. You will get $_POST['contentOfMySecondParameter'] in php.

Upvotes: 0

Barmar
Barmar

Reputation: 780724

You can use FormData.append() to add more parameters.

    var formData = new FormData($(element).parents('form')[0]);
    formData.append('mySecondParameter', contentOfMySecondParameter);

Then use $_POST['mySecondParameter'] in PHP to get this parameter.

Upvotes: 4

Related Questions