1

First of all, I'm uploading multiple images that goes through a for loop by the input file with multiple selections (HTML5), however when attempting to output the links in JSON, it's only outputting one image filename, even when I've selected 2+ images.

This is how I'm creating the JSON (the important parts, not the full script):

$count = 0;
$image_count = count($_FILES['file']);

for($i = 0; $i < $image_count; $i++)
{
    $filename = random(13) . fileExt($_FILES['file']['name'][$i]);

    move_uploaded_file($_FILES['file']['tmp_name'][$i], 'images/' . $filename);

    $output = array();

    $output['url'] = 'http://www.mywebsite.com/images/' . $filename;
    $output['name'] = $filename;

    $count++;
}

if($count == $image_count)
{
   echo json_encode($output);
}

The final output is like this:

{
    "url": "http://www.mywebsite.com/images/0Z9O3a9q1k2A8.jpg",
    "name": "0Z9O3a9q1k2A8.jpg"
}

When it should have multiple images listed like this:

{
    "url": "http:\/\/www.mywebsite.com\/images\/0Z9O3a9q1k2A8.jpg",
    "name": "0Z9O3a9q1k2A8.jpg"
},
    {
    "url": "http:\/\/www.mywebsite.com\/images\/3jn5jk5n4kj5n.jpg",
    "name": "3jn5jk5n4kj5n.jpg"
},
    {
    "url": "http:\/\/www.mywebsite.com\/images\/nj23knk5k5455.jpg",
    "name": "nj23knk5k5455.jpg"
}

If I do this:

array_push($output, 'http://www.mywebsite.com/images/' . $filename);
array_push($output, $filename);

I get an output like this:

{
    "0": "http:\/\/www.mywebsite.com\/images\/0Z9O3a9q1k2A8.jpg",
    "1": "0Z9O3a9q1k2A8.jpg",
    "2": "http:\/\/www.mywebsite.com\/images\/3jn5jk5n4kj5n.jpg",
    "3": "3jn5jk5n4kj5n.jpg",
    "4": "http:\/\/www.mywebsite.com\/images\/nj23knk5k5455.jpg",
    "5": "nj23knk5k5455.jpg",
}

I need it to be to similar to what I need it to be so I can parse it with jQuery.

2 Answers 2

1

Try this:

$output = array();
for($i = 0; $i < $image_count; $i++)
{
    $filename = random(13) . fileExt($_FILES['file']['name'][$i]);

    move_uploaded_file($_FILES['file']['tmp_name'][$i], 'images/' . $filename);

    $output[] = array(
        'url' => 'http://www.mywebsite.com/images/' . $filename,
        'name' => $filename
    );

    $count++;
}

With $output[] = x you can add an entry to the array. The output is then like this:

[
  {
    "url": "http:\/\/www.mywebsite.com\/images\/0Z9O3a9q1k2A8.jpg",
    "name": "0Z9O3a9q1k2A8.jpg"
  },
  {
    "url": "http:\/\/www.mywebsite.com\/images\/3jn5jk5n4kj5n.jpg",
    "name": "3jn5jk5n4kj5n.jpg"
  }
]
Sign up to request clarification or add additional context in comments.

Comments

1

You need to have an array that you are using. So instead of this:

$output = array();

$output['url'] = 'http://www.mywebsite.com/images/' . $filename;
$output['name'] = $filename;

You would want something like:

$output = array();

$output[]['url'] = 'http://www.mywebsite.com/images/' . $filename;
$output[]['name'] = $filename;

That will give you output that you can then refer to in your jquery as:

success: function(response){
    response[0].name;
    response[0].url;
}

Does that make sense? The jquery code is very abbreviated.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.