是否可以仅在LOOP的最后一轮添加动作?

时间:2016-12-20 08:36:55

标签: php

我想在完成循环后重定向到其他页面

类似这样的事情

for($i = 0; $i < 5; $i++)
{
    echo $i;
    header('Location: home.php'); // do this if finish the loop
}

注意:我的情况是重定向必须是循环的,因为我的真实代码是关于在循环中上传多个文件并在循环中检查文件类型,所以我想如果文件类型错误则不重定向,如果上传正确,则重定向到home.php页面也是。但问题是当我在第一轮循环中正确上传时,它会重定向到主页而不会上传残留文件。 如果我将重定向放在循环之外,则不会显示filetype的错误消息,因为它将仅重定向到home。

     $path_upload = 'images/cover/';
                $count = count($_FILES["images"]["name"]);
                $allowed_types = array("image/gif", "image/jpeg", "image/png");
                $nl = PHP_EOL.'<br>'; // Linux: \n<br> Window: \r\n<br>
                $arr_newname = array();

                for($i=0; $i < $count; $i++)
                {   
                    $file_type = $_FILES["images"]['type'][$i];
                    $file_name = $_FILES["images"]['name'][$i];
                    $file_size = $_FILES["images"]['size'][$i];
                    $file_error = $_FILES["images"]['error'][$i];
                    $file_tmp = $_FILES["images"]['tmp_name'][$i];

                if($_FILES["images"]["name"][$i] != "")
                {

                    if (in_array($file_type, $allowed_types) && $file_size < 2000000) 
                    {

                        if ($file_error > 0) {

                            echo 'Upload file:'.$file_name.' error: '.$file_error.$nl;

                        } else {

                            $ext = explode('.', $file_name); // explode dots on filename
                            $ext = end($ext); // get last item of array

                            $newname = "album_id".$album_id."_".date('Y-m-d')."_".($i+1).".".$ext;
                            $arr_newname[$i] = $newname;               
                            $path_new_upload = $path_upload.$newname;


                    if(move_uploaded_file($file_tmp, $path_new_upload))
                    {
                        $data = array(
                            'front_pic'.($i+1) => $arr_newname[$i]
                        );
                        $this->db->where('album_id', $album_id);
                        $this->db->update('oav_album', $data);

                         redirect('home.php'); ////////THIS will stop the residual round of loop
                    }

                }

            } 

            else 
            {

                echo 'Invalid file type to: '.$file_name.$nl;
                // continue the code
            }
          }
        }
redirect('home.php'); ////////IF I put this outside loop it will not show error` message but redirect to home

1 个答案:

答案 0 :(得分:0)

您可以在循环之后编写语句,以便它在循环结束时工作一次。如果要使用上一个已知的$i值,可以在循环之前定义$i并在循环之后使用它。

$i = 0
for ($i = 0; $i < $count; $i++){
    //loop
}
$i--;//get last value
echo $i;
header('Location: home.php'); // do this if finish the loop