2

私はこのコードを持っています:

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

フレンドリーで私を助けてくれる人がいたら、本当に感謝しています。どうもありがとう。

4

5 に答える 5

11

おそらく、次のように各エラーを保存します。

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

そして、次のように表示します。

if(count($errors) > 0){
    foreach($errors as $e){
        echo $e . "<br />";
    }
}
于 2012-04-11T18:27:20.983 に答える
3

print_r配列ではなく、配列にする必要がありechoます。

print_r($errors);

または、次のように、各エラーを個別に表示することもできます。

foreach( $errors as $innerErrors )
{
  foreach( $innerErrors as $anError )
  {
    echo $anError ."\n";
  }
}
于 2012-04-11T18:23:12.583 に答える
3

どうですか?

echo implode(', ', $errors[$filename]);
于 2012-04-11T18:24:09.197 に答える
3

あなたは$errors2次元配列として書いた:

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

したがって、正しく表示するforeachには、 を 1 つではなく2 つ使用します。

        <?php foreach($errors as $errorsOnFile):?>
            <?php foreach($errorsOnFile as $error):?>
                <p class="layer-content">
                <?php echo $error;?>
                </p>
            <?php endforeach;?>
        <?php endforeach;?>
于 2012-04-11T18:25:28.370 に答える
2

配列を単にエコーすることはできません。ただし、配列の要素をループすることはできます。

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

このコードは、一度に 1 つずつエラーをエコーし​​ます。

于 2012-04-11T18:24:27.293 に答える