首页 > 解决方案 > 为什么大小(数组)比它自己的数组大

问题描述

更详细地解释我的问题:上传多张图像时,我通过 sizeof ($ _ FILES ['imgs']) 从图像数组中获取大小;并用这个数字制作一个 for 循环来提供图片的详细信息。但我收到几个错误:警告:C:\xampp\htdocs\projetcs\en\upload.php 中的未定义数组键 3 在第 30 行。我不知道你为什么能帮助我?

错误图像

网站代码:

  <body>
<?php
  session_start();
  if(!isset($_SESSION["MAIN"])){
      //Header("Location: ./login.php?for=upload");
      //exit();
  }
  if(isset($_POST["upload"])){
    //require '../utils/sql.php';
    //$stmt=$mysql->prepare("INSERT INTO DEALS (USER, TITLE, DESCR, COST, IMGS, ST) VALUES ()");
    var_dump($_FILES['imgs']);
    $max = sizeof($_FILES['imgs']);
    echo $max;
    for($i = 0; $i < $max-1;$i++)
    {
      ?><br/><?php
      echo($_FILES["imgs"]["name"][$i]." ,  ".$_FILES["imgs"]["type"][$i]." ,  ".$_FILES["imgs"]["tmp_name"][$i]." ,  ".$_FILES["imgs"]["error"][$i]." ,  ".$_FILES["imgs"]["size"][$i]);
    }
  }
 ?>
  <form class="" action="./upload.php" method="post" enctype="multipart/form-data">
    <div class="input-group mb-3">
      <div class="input-group-prepend">
        <span class="input-group-text" id="inputGroup-sizing-default">Title</span>
      </div>
      <input type="text" class="form-control"  aria-describedby="inputGroup-sizing-default" required>
    </div>

    <div class="input-group">
      <div class="input-group-prepend">
        <span class="input-group-text">Beschreibung</span>
      </div>
      <textarea class="form-control" style="resize: none;"required></textarea>
    </div>
    <div class="input-group mb-3">
      <div class="input-group-prepend">
        <span class="input-group-text">€&lt;/span>
      </div>
      <input type="text" class="form-control"  required>
      <div class="input-group-append">
        <span class="input-group-text">,00</span>
      </div>
      <select class="custom-select" id="inputGroupSelect01" required>
        <option value="FP">Festpreis</option>
        <option value="VB">VB</option>
      </select>
    </div>
    <div class="input-group mb-3">
      <div class="input-group-prepend">
        <span class="input-group-text">Upload</span>
      </div>
      <div class="custom-file">
        <input type="file" name="imgs[]" multiple class="custom-file-input" id="inputGroupFile01" required>
        <label class="custom-file-label" for="inputGroupFile01">Choose file</label>
      </div>
    </div>
    <button type="submit" name="upload" class="btn btn-primary btn-lg btn-block">Hochladen</button>
  </form>

标签: phphtmlimageupload

解决方案


您正在定义$max的根元素的大小$_FILES["imgs"],而它应该是内部元素之一的大小,例如tmp_name.

另外,请确保在循环时不要从 $max 值中减去 1,因为您会丢失 1 个元素。

所以应该是这样的

$max = sizeof($_FILES['imgs']['tmp_name']);
echo $max."<br />";
for ($i = 0; $i < $max; $i++) {
    echo "<br />".($_FILES["imgs"]["name"][$i]." ,  ".$_FILES["imgs"]["type"][$i]." ,  ".$_FILES["imgs"]["tmp_name"][$i]." ,  ".$_FILES["imgs"]["error"][$i]." ,  ".$_FILES["imgs"]["size"][$i]);
}

最后,请注意session_start不能放在任何输出之后。它应该是您的 .php 脚本中的第一件事,远高于任何 HTML 标记,例如<body>甚至<head>


推荐阅读