2012-04-11 57 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 

maxsize of 2MB on abc.jpg has reached 
在HTML

我有這樣的代碼:

<?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

爲什麼不能使用print_r來顯示錯誤而不是回顯它。 – 2012-04-11 18:25:03

回答

3

你已經寫了$errors爲2維數組:

$errors[$file_name][] = 'your message'; 

因此,要正確地顯示它使用兩個foreach的,而不是一個:

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

多數民衆贊成它。非常感謝。 – bonny 2012-04-11 18:55:38

3

你必須print_r一個數組,而不是echo它:

print_r($errors);

或者,您也可以單獨顯示每個錯誤的,就像這樣:

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

他可以回顯它,它是在循環中,但沒有選擇索引數組 – riso 2012-04-11 18:25:28

+0

你的意思是我可以添加︰if(count($ errors)> 0){foreach($ errors AS $ error){print_r($ error)。 「
」;}}?那不起作用。它也會顯示「陣列」。謝謝。 – bonny 2012-04-11 18:30:11

+0

@bonny:這是因爲$錯誤顯然是一組數組。對每個內部數組都做同樣的想法。 – Josh 2012-04-11 18:32:27

3

怎麼樣?

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

你不能只回聲一個數組。但是,您可以遍歷數組的元素。

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

此代碼一次回顯一個錯誤。

9

也許保存每個錯誤是這樣的:

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

並顯示像這樣:

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