Php foreach loop, с сообщениями об ошибках зацикливания - PullRequest
0 голосов
/ 12 октября 2009

У меня есть цикл foreach, который должен проверять, проверяется ли флажок элементом. Если флажок установлен, мне нужно проверить, имеет ли значение часть скрипта для выгрузки файла, и если да, то перейти к проверке типа и размера файла, который пытается загрузить пользователь.

В настоящее время, если есть только ошибка с первым флажком, это работает нормально, но по какой-то причине, если есть ошибка с более чем одним файлом, результаты снова будут зациклены. Например, если есть ошибка с двумя файлами, это даст четыре результата (перечисляя каждую ошибку дважды), если при ошибке с тремя элементами я получу 6 результатов.

Я действительно новичок в циклах и мне интересно, должен ли я переключиться на цикл for и делать что-то вроде цикла, пока ошибки не станут равны нулю.

Вот мой HTML

<ul class="imgPreview">
    <li>
        <a href="#">dialogwarning_pimg4_15_1276648623.png</a> 
        <a href="#" class="edit_project_file"> <img src="images/edit.gif"/></a>
    </li>
    <li>
        <input name="upload_project_images[]" type="file" /> 
    </li>
    <li>
        <input name="edit_image[]" type="checkbox" value="dialogwarning_pimg4_15_1276648623.png"/>
    </li>
    <li>
        <a href="#">formatjustifyright_pimg3_15_1276648623.png</a>
    </li>
    <li class="edit_project_image">
        <input name="upload_project_images[]" type="file" />
    </li>
        <li class ="edit_file_checkbox">
        <input name="edit_image[]" type="checkbox" value="formatjustifyright_pimg3_15_1276648623.png"/>
    </li>
</ul>

PHP для цикла выглядит следующим образом:

$remove_images_files = $_POST['edit_image'];    

if(isset($remove_images_files)){
    foreach ($remove_images_files as $update){
        foreach ($_FILES["upload_project_images"]["type"] as $key => $type) {
        $upload_project_images = $_FILES["upload_project_images"]["name"][$key];
        $upload_project_images_type = $_FILES["upload_project_images"]["type"][$key];
        $upload_project_images_size = $_FILES["upload_project_images"]["size"][$key];
        $upload_project_image_ext = strtolower(substr($upload_project_images, strrpos($upload_project_images, '.') + 1));
            if($upload_project_images != "") {
                if((!in_array($upload_project_images_type,$upload_permitted_types['mime'])) || (!in_array($upload_project_image_ext,$upload_permitted_types['ext']))) {
                    $errmsg_arr[] = 'Please select a jpg, jpeg, gif, or png image to use as the project image' .$upload_project_images . $upload_project_image_ext;
                    $errflag = true;
                }
                elseif($upload_project_images_size > $max_upload_size_bytes ) {
                    $errmsg_arr[] = 'Please select an image smaller than '. $max_upload_size_Kbytes .' to use as the project image';
                    $errflag = true;
                }
            }
        }
    }
}

1 Ответ

2 голосов
/ 12 октября 2009

Ваша проблема может заключаться в том, что вы выполняете итерацию по

$_FILES["upload_project_images"]["type"]

для каждой записи в $remove_images_files, что я не думаю, что вы хотите сделать. Если вынуть следующую строку:

foreach ($remove_images_files as $update){

и соответствующий }, делает ли он то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...