2012-04-11 10 views
1

i diesen Code haben:wie eine Fehlermeldung in einem Array anzuzeigen

$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'])... 

und mein Problem ist, dass ich weiß nicht, wie die Fehlermeldungen angezeigt werden, die angezeigt werden soll, wenn das Array

$errors 

ist gegeben.

array 

statt:

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

wenn es jemanden gibt, könnte:

maxsize of 2MB on abc.jpg has reached 

in der ich diesen Code haben html bis jetzt, es wird nur angezeigt Sei das freundlich und hilf mir, ich würde es wirklich schätzen. Danke vielmals.

+0

Warum können Sie print_r nicht verwenden, um Fehler anzuzeigen, statt es zu echotieren. –

Antwort

3

Sie haben geschrieben $errors als 2-dimensionalen Array:

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

So richtig es s verwendet zwei foreach‘angezeigt wird statt einem:

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

das ist es. Danke vielmals. – bonny

3

Sie müssen print_r ein Array, nicht echo es:

print_r($errors);

Alternativ können Sie jeden Fehler einzeln zeigen, wie so:

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

er könnte es echo, es ist in der Schleife, aber nicht Index im Array ausgewählt – riso

+0

Sie meinen, ich könnte einfach hinzufügen: if (Anzahl ($ Fehler)> 0) {foreach ($ Fehler AS $ Fehler) {print_r ($ Fehler). "
";}}? das funktioniert nicht. Es wird auch nur "Array" angezeigt. Vielen Dank. – bonny

+0

@bonny: Das liegt daran, dass $ errors anscheinend ein Array von Arrays ist. Denken Sie dasselbe für jedes der inneren Arrays. – Josh

3

Wie wäre es?

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

Sie können nicht einfach ein Array widergeben. Sie können jedoch die Elemente des Arrays durchlaufen.

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

Dieser Code gibt die Fehler nacheinander aus.

9

Vielleicht wie diese jeden Fehler speichern:

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

Und so anzuzeigen:

Verwandte Themen