Accessing array values created in foreach loops

108 views Asked by At

I am trying to display an error if a file does not upload. The crux of my problem is that my $status() array doesn't return the values I append in an if statement within a foreach loop.

Can someone enlighten me as to what is going on and what I am doing wrong? I'd like the status values in the foreach loop to append and return outside the loop.

Code below.

$status = array();

// Check that file within size restrictions, then upload.
foreach($request->getFiles() as $file)
{
    $file_dir = sfConfig::get("sf_data_dir") . '/retail/order/' . $order_id . '/';

    if (!is_dir($file_dir))
    { 
        mkdir($file_dir, 0777, true);
    }

    $maxsize    = 332027;

    if(($file['size'] >= $maxsize) || ($file['size'] == 0)) 
    {
        $status[] = 0;
    }
    else
    {
        move_uploaded_file($file['tmp_name'], $file_dir . $file['name']);

        $attachment = new Attachment();
        $attachment->setName($file['name']);
        $attachment->setPath($file_dir);
        $attachment->setSize($file['size']);
        $attachment->setCreatedTs('now');
        $attachment->save();

        $app_attachment = new ApendedAttachment();
        $app_attachment->setAttachmentId($attachment->getAttachmentId());
        $app_attachment->setWebOrderId($order_id);
        $app_attachment->setCreatedTs('now');
        $app_attachment->save();

        $status[] = 1;
    }
}

if (in_array(1, $status))
{
    $this->getUser()->setFlash('success', 'Thank you. Your cart has been saved.');
}
else
{
    $this->getUser()->setFlash('error', 'Please upload files less than 20MB.');
}

$this->redirect('order/detail?id=' . $order->getWebOrderId());
1

There are 1 answers

0
Shaf2k On

You are not assigning values to the status array correctly. You probably want to increment an index as you go through the array of files:

$i = 0;
for each(){
...
$status[$i] = 1;
...
$i++;
}

Sorry for the bad code format. Doing this on my mobile device.