foreach循环中数组的问题

时间:2012-07-12 12:28:23

标签: php arrays for-loop

我正在构建一个可以上传单个图像或多个图像的功能,具体取决于它是否来自一个字段数组。

这是函数和调用者:

private function imageUpload($image, $altText, $uploadDir)
{

    $uploadDir = (!substr($uploadDir, "/")) ? $uploadDir."/" : $uploadDir;
    print_r($_POST[$image]);
    if(is_array($_POST[$image]))
    {

        foreach($_FILES[$image] as $image)  //Line 316
        {

            //$targetPath = $uploadDir.basename($image['name']);
            //echo $targetPath;
            echo "array";

        }

    }
    else
    {

        $targetPath = $uploadDir.basename($image['name']);
        //echo $targetPath;
        echo "not array";

    }

}

$this->imageUpload('pei_image', 'pei_alt', '/images/upload/products/');

我尝试在pei_image []字段中使用1/2图像字段,但是我收到以下错误:

  

遇到PHP错误

     

严重性:注意   消息:未定义的索引:pei_image

     

文件名:models / products_model.php

     

行号:316

     

遇到PHP错误

     

严重性:警告

     

消息:为foreach()提供的参数无效

     

文件名:models / products_model.php

     

行号:316

但是当我print_r给$ _POST [$ image]时,我得到了一个数值正确的数组。结果如下:

  

数组([0] => 06 Lect03 WD Concepts - mod SP.png [1] => brtemplate.jpg)

有什么问题?

修改

$ _FILES数组是空的,为什么会这样?以下是表单中的2个图片上传字段:

<input type="file" name="pei_image[]" value="Showing-the-Heavy-horse.jpg" class="imageUpload" onchange="removePreviewButton(this, 2);">
<input type="file" name="pei_image[]" value="Showing-the-Heavy-horse.jpg" class="imageUpload" onchange="removePreviewButton(this, 3);">

4 个答案:

答案 0 :(得分:0)

替换

foreach($_FILES[$image] as $image)

通过

foreach($_FILES as $image)

答案 1 :(得分:0)

试试这个..

private function imageUpload($image, $altText, $uploadDir)
{

    $uploadDir = (!substr($uploadDir, "/")) ? $uploadDir."/" : $uploadDir;

    if(is_array($image)
    {

        foreach($image as $img)  //Line 316
        {

            //$targetPath = $uploadDir.basename($image['name']);
            //echo $targetPath;
            echo "array";

        }

    }
    else
    {

        $targetPath = $uploadDir.basename($image['name']);
        //echo $targetPath;
        echo "not array";

    }

}

$this->imageUpload('pei_image', 'pei_alt', '/images/upload/products/');

答案 2 :(得分:0)

假设$ image是您的字段的名称,例如'pictures''images'或其他什么,这会更好:

if (!empty($_FILES[$image])) {
    foreach ($_FILES[$image]["error"] as $key => $error) {
        if ($error == UPLOAD_ERR_OK) {
            $tmp_name = $_FILES[$image]["tmp_name"][$key];
            $name = $_FILES[$image]["name"][$key];

            // do your stuff
        }
    }
}

答案 3 :(得分:0)

问题是我的enctype中的拼写错误,因此它默认为“application / x-www-form-urlencoded”,因此它不会上传到$ _FILES数组。