2012-04-11 2 views
1

배열에 오류 메시지가 표시 :내가 어떻게이 코드가

$allowed_extension = array('jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif'); 
$errors = array(); 
$output = array(); 

if(!empty($_FILES['image']['tmp_name'])){ 

    foreach($_FILES['image']['name'] as $key => $array_value){ 

     if(!in_array(pathinfo($_FILES['image']['name'][$key], PATHINFO_EXTENSION), $allowed_extension)){ 
       die("Die!"); 
     } 
    } 

    foreach($_FILES['image']['name'] as $key => $array_value){ 

     $file_name = $_FILES['image']['name'][$key]; 
     $file_size = $_FILES['image']['size'][$key]; 
     $file_tmp = $_FILES['image']['tmp_name'][$key]; 

     $file_extension = pathinfo($file_name, PATHINFO_EXTENSION); 
     $file_extension = strtolower($file_extension); 

     if (!in_array($file_extension, $allowed_extension)){ 
     $errors[$file_name][] = "format $file_extension in image $file_name is not accepted"; 
     continue; 
     } 

     if ($file_size > 2097152){ 
     $errors[$file_name][] = "maxsize of 2MB on $file_name has reached"; 
        } 

     if (count($errors) == 0){ 

     $dir = "a/b/c"; 

     if (is_dir($dir)){ 
      mkdir("a/b/c/tmp_images", 0755); 
     }else{ 
      mkdir("a/b/c", 0755); 
      mkdir("a/b/c/tmp_images", 0755); 
     } 

     $path = "a/b/c/tmp_images"; 
     $prifix = basename($file_name, "." . $file_extension); 

     //var_dump ($prifix); 

     $uploadfile = $path . "/" . $file_name; 

     $x = 0; 
     while (file_exists($uploadfile)){ 
       $x ++; 
       $uploadfile = "{$path}/{$prifix}-{$x}.{$file_extension}"; 
      } 

      if (move_uploaded_file($file_tmp, $uploadfile)){ 
       $file_name = basename($uploadfile); 
       $output [$file_name] = "OK"; 

      }else{ 

      $output[$file_name] = "Failure while Uploading!"; 
      $errors[$file_name][] = "Failure: Can't move uploaded pictures!"; 
      }//else... 
     }//if(count($errors))... 
    }//foreach($_FILES['image']['name']... 
}//if(!empty($_FILES['image']['tmp_name'])... 

를 내 문제는 내가, 표시되어야 오류 메시지를 표시하는 방법을 알고 해달라고 인 경우 배열

$errors 

이 주어집니다. 지금까지, 그것은 바로 표시됩니다

array 

대신 : html로에서

maxsize of 2MB on abc.jpg has reached 

이 코드가 있습니다

<?php if(isset($errors)):?> 

    <div class="form-error-message" id="signup-error-message" style="display": none;"> 
     <div class="arrow-wrapper"> 
      <div class="border-wrapper"> 
      <?php foreach($errors as $error):?> 
       <p class="layer-content"> 
       <?php echo $error;?> 
       </p> 
      <?php endforeach;?> 
      </div> 
     </div> 

    </div> 

누가 수있는 사람이 있다면 그게 친절하고 도움이 정말 감사하겠습니다. 고마워.

+0

왜 echo를 표시하지 않고 print_r을 사용하여 오류를 표시 할 수 없습니까? –

답변

3

당신은 2 차원 배열로 $errors를 작성했습니다 :

$errors = array(); 
$errors[] = $file_name . ": this is the error message."; 

다음과 같이 표시합니다.

if(count($errors) > 0){ 
    foreach($errors as $e){ 
     echo $e . "<br />"; 
    } 
} 
+0

그게 다예요. 고마워. – bonny

3

당신은 배열 print_r해야하지 echo 그것은 :

print_r($errors);

또는, 당신은 개별적으로 각 오류를 표시 할 수 있도록 같은 :

foreach($errors as $innerErrors) 
{ 
    foreach($innerErrors as $anError) 
    { 
    echo $anError ."\n"; 
    } 
} 
+0

그는 반복 할 수 있지만 루프에 있지만 배열의 선택된 인덱스가 아닙니다. – riso

+0

: if (count ($ errors)> 0) {foreach ($ errors AS $ error) {print_r ($ error). "
";}}? 그 doesnt 일. 그것은 또한 단지 "배열"을 표시합니다. 감사. – bonny

+0

@bonny : $ errors는 분명히 배열의 배열이기 때문입니다. 내부 배열 각각에 대해 같은 생각을하십시오. – Josh

3

어때?

echo implode(', ', $errors[$filename]); 
1

배열을 에코 할 수는 없습니다. 그러나 배열 요소를 반복 할 수 있습니다.

foreach($errors[file_name] as $error_message) { 
    echo $error_message."<br>"; 
} 

이 코드는 오류를 한 번에 하나씩 에코합니다. 아마 이런 식으로 각각의 오류를 저장

 <?php foreach($errors as $errorsOnFile):?> 
      <?php foreach($errorsOnFile as $error):?> 
       <p class="layer-content"> 
       <?php echo $error;?> 
       </p> 
      <?php endforeach;?> 
     <?php endforeach;?> 
9

:

그래서
$errors[$file_name][] = 'your message'; 

올바르게 두 foreach 년대 대신 중 하나를 사용 표시 :