当我在PHP中使用$_FILES时,为什么会出现“Undefined array key”和“Trying to access array offset on value of type null”错误?

3
我在我的内容管理系统(Content Management System)的注册部分中执行此操作。我想添加个人资料图片,并按照w3schools上的教程进行操作:https://www.w3schools.com/php/php_file_upload.asp。 当我在其他文件中执行时没有问题,但是当我在我的文件中运行时,出现错误: 警告:未定义数组键“profileimg_regis”,位于C:\xampp\htdocs\DeknoinarakDev\dashboard\run\code.php的第99行 警告:尝试访问值为null的数组偏移量,位于C:\xampp\htdocs\DeknoinarakDev\dashboard\run\code.php的第99行 警告:未定义数组键“profileimg_regis”,位于C:\xampp\htdocs\DeknoinarakDev\dashboard\run\code.php的第103行 警告:尝试访问值为null的数组偏移量,位于C:\xampp\htdocs\DeknoinarakDev\dashboard\run\code.php的第103行 致命错误:Uncaught ValueError:路径不能为空,位于C:\xampp\htdocs\DeknoinarakDev\dashboard\run\code.php的第103行,堆栈跟踪:#0 C:\xampp\htdocs\DeknoinarakDev\dashboard\run\code.php(103):getimagesize('') #1 {main}抛出了异常,在C:\xampp\htdocs\DeknoinarakDev\dashboard\run\code.php的第103行 这是我的PHP代码:
// Check if image file is a actual image or fake image
if(isset($_POST["register_btn"])) {
  $target_dir = "img/user/";
  $target_file = $target_dir . basename($_FILES["profileimg_regis"]["name"]);
  $uploadOk = 1;
  $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

  $check = getimagesize($_FILES["profileimg_regis"]["tmp_name"]);

  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  }
  else {
    echo "File is not an image.";
    $uploadOk = 0;
  }

  // Check if file already exists
  if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
  }

  // Check file size
  if ($_FILES["profileimg_regis"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
  }

  // Allow certain file formats
  if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
    echo "Sorry, only JPG, JPEG & PNG files are allowed.";
    $uploadOk = 0;
  }

  // Check if $uploadOk is set to 0 by an error
  if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
  // if everything is ok, try to upload file
  }
  else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
      echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
    } else {
      echo "Sorry, there was an error uploading your file.";
    }
  }
}

这是我的 HTML 代码:

<div class="modal-background" id="md-regisadmin">
  <div class="modal-container">
    <div class="modal">
      <div class="modal-header">
        <h2>Admin Account</h2>
        <button onclick="closeModal(document.querySelectorAll('#md-regisadmin'))" type="button" id="dismiss-btn-modal">
          <i class="fa fa-times" onclick="closeModal(document.querySelectorAll('#md-regisadmin'))" id="dismiss-btn-modal"></i>
        </button>
      </div>
      <div class="md-content">
          <div class="form-modal">
            <div class="form-group md">
            <form action="run/code.php" method="post">
              <!--<label for="username_regis">Username:</label>
              <input id="username_regis" type="text" name="username_regis" placeholder="Username" required/>
            </div>
            <div class="form-group md">
              <label for="email_regis">E-mail:</label>
              <input id="email_regis" type="email" name="email_regis" placeholder="Email" required/>
            </div>
            <div class="form-group md">
              <label for="pwd_regis">Password:</label>
              <input id="pwd_regis" type="password" name="pwd_regis" placeholder="Password" required/>
            </div>
            <div class="form-group md">
              <label for="pwdr_regis">Repeat Password:</label>
              <input id="pwdr_regis" type="password" name="pwdr_regis" placeholder="Repeat Password" required/>
            </div>
            <div class="form-group md">-->
              <input id="profileimg_regis" name="profileimg_regis" type="file"/>
            <!--</div>
            <div class="form-group md">
              <label for="utype_regis">Usertype:</label>
              <select id="utype_regis" name="utype_regis"/>
                <option value="noper">No Permission</option>
                <option value="readonly">Reader</option>
                <option value="mod">Moderator (Only Change Data In Website)</option>
                <option value="admin">Administrator</option>
                <option value="superadmin">Super Administrator</option>
                <option value="godper">God Permission</option>
                <option value="root">Root Administrator</option>
              </select>
            </div>
          </div>
        </div>-->
        <div class="modal-footer">
            <button type="submit" name="register_btn">
              Add Admin Account
            </button>
        </form>
        <button type="button" onclick="closeModal(document.querySelectorAll('#md-regisadmin'))" id="dismiss3-btn-modal">
          <a onclick="closeModal(document.querySelectorAll('#md-regisadmin'))" id="dismiss2-btn-modal">Cancel</a>
        </button>
      </div>
    </div>
  </div>
</div>

非常感谢您的帮助。 :)

这是 https://stackoverflow.com/questions/3553492/php-form-not-uploading-file 的副本。 - Rob Ruchte
这回答了你的问题吗?PHP表单无法上传文件。但说真的,你能找到的每一个文件上传教程都会展示这个并且可能会提到它。很难理解为什么人们仍然会错过这个基本信息。 - ADyson
1个回答

4
现在我知道如何修复它了。 我忘记在表单顶部加上<form>enctype="multipart/form-data"</form>。 抱歉 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接