2012-04-11 64 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 />"; 
    } 
}