【问题标题】:Undefined array key error while uploading file to mysql database将文件上传到mysql数据库时出现未定义的数组键错误
【发布时间】:2021-05-22 17:45:49
【问题描述】:

我创建了一个注册表单。另外,我想添加个人资料图片。但是,我的代码出错了。

警告:第 29 行 C:\xampp\htdocs\db\register.php 中未定义的数组键“fileupload”

警告:尝试访问第 29 行 C:\xampp\htdocs\db\register.php 中 null 类型值的数组偏移量

致命错误:未捕获的 ValueError:C:\xampp\htdocs\db\register.php:30 中的路径不能为空 堆栈跟踪:#0 C:\xampp\htdocs\db\register.php(30): file_get_contents ('') #1 {main} 在第 30 行的 C:\xampp\htdocs\db\register.php 中抛出

Line29 = $fileName = $_FILES['fileupload']['name']; Line30 = $picture = file_get_contents($fileName);

我该如何解决这个问题?

<?php $fileName = $_FILES['fileupload']['name'];
 $picture = file_get_contents($fileName);
?>

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" >
<div class="mb-3">
  <label for="exampleFormControlTextarea1" class="form-label">First Name</label>
  <textarea class="form-control" name="fName" rows="1" required></textarea>
  <span class="error"> <?php echo $fNameErr; ?></span>
</div>
<div class="mb-3">
  <label for="exampleFormControlTextarea1" class="form-label">Last Name</label>
  <textarea class="form-control" name="lName" rows="1"></textarea>
  <span class="error"> <?php echo $lNameErr; ?></span>
</div>

  <div class="mb-3">
    <label for="exampleInputEmail1" class="form-label">Email address</label>
    <input type="email" class="form-control" name="email" aria-describedby="emailHelp">
    <div id="emailHelp" class="form-text">We'll never share your email with anyone else.</div>
    <span class="error"> <?php echo $emailErr; ?></span>
  </div>
  <div class="mb-3">
    <label for="exampleInputPassword1" class="form-label">Password</label>
    <input type="password" class="form-control" name="password">
    <span class="error"> <?php echo $passwordErr; ?></span>
  </div>
  <div class="mb-3">
    <label for="exampleInputPassword1" class="form-label">Claim Password</label>
    <input type="password" class="form-control" name="claimPassword">
    <span class="error"> <?php echo $claimPasswordErr; ?></span>
    <span class="error"> <?php echo $differentPasswordErr; ?></span>
  </div>

  <div class="mb-3">
  <label for="exampleFormControlTextarea1" class="form-label">Phone Number</label>
    <textarea class="form-control" value="1-(555)-555-5555" name="telephone" rows="1"></textarea>
    <span class="error"> <?php echo $telephoneErr; ?></span>
    <span class="error"> <?php echo $telephoneErr2; ?></span>
  </div>
  <div class="mb-3">
  <label for="exampleFormControlTextarea1" class="form-label">Department</label>
  <textarea class="form-control" name="department" rows="1"></textarea>
  <span class="error"> <?php echo $departmentErr; ?></span>
</div>
<div class="mb-3">
  <label for="exampleFormControlTextarea1" class="form-label">Institution</label>
  <textarea class="form-control" name="institution" rows="1"></textarea>
  <span class="error"> <?php echo $instErr; ?></span>
</div>
 
  <div class="mb-3">
  <label for="formFile" class="form-label">Pick a profile picture</label><br>
    <input name="fileupload" type="file" class="form-control-file" id="exampleFormControlFile1" required><br><br>
  <span class="error"> <?php echo $pictureErr; ?></span>
</div>
<div class="exampleFormControlTextarea1">
  <label for="example-date-input" class="form-label">Date of birth</label>
  <span class="error"> <?php echo $birthErr; ?></span>
  <div class="col-10">
    <input class="form-control" type="date" value="2021-01-01" name="birth">
  </div>
</div>
<br>
<label for="exampleFormControlTextarea1" class="form-label">Gender</label>
  <div class="form-check">
  <input class="form-check-input" type="radio" name="flexRadioDefault" name="gender">
  <label class="form-check-label" for="flexRadioDefault1">
    Female
  </label>
</div>
<div class="form-check">
  <input class="form-check-input" type="radio" name="flexRadioDefault" name="gender2" >
  <label class="form-check-label" for="flexRadioDefault2">
   Male
  </label>
</div>
<div class="form-check">
  <input class="form-check-input" type="radio" name="flexRadioDefault" name="gender3" >
  <label class="form-check-label" for="flexRadioDefault2">
   I do not want to say
  </label>
  <span class="error"> <?php echo $genderErr; ?></span>
</div>

</div>

<br>

  <button type="submit" name= "submit" class="btn btn-primary">Sign Up</button>
  <br><br>
  <a href="login.php">Do you have an account? Click here to sign in.</a>

</form>
</div>
  
</div>

【问题讨论】:

  • 如果你愿意,我也可以添加插入 sql 代码..
  • 错误提示 Undefined array key "fileupload" 这意味着您正在访问该页面而没有上传文件,这通常是当您对 GET 请求使用同一页面时出现问题(在这种情况下显示表单)和 POST 请求(处理表单的结果)。通常,处理上传的代码与包含表单的视图是分开的,因为在单个视图文件中不会发生太多事情

标签: php mysql


【解决方案1】:

第一个问题是在表单提交发生之前尝试访问上传的文件。您的文件的第一行可以更改为

<?php 
if (isset($_FILES['fileupload'])) {
 $fileName = $_FILES['fileupload']['tmp_name'];
 $picture = file_get_contents($fileName);
}
?>

但您仍然会收到错误消息,因为您引用了 $_FILES['fileupload']name 属性 - 这将为您提供实际的文件名,而不是文件的路径。

使用tmp_name,它会为您提供文件的完整系统路径。简而言之,像这样访问您上传的文件:

$picture = file_get_contents($_FILES['fileupload']['tmp_name']);

这是 $_FILES` 对象的样子(根据文件的类型等,这将是不同的值:

[fileupload] => Array
        (
            [name] => MyFile.txt (comes from the browser, so treat as tainted)
            [type] => text/plain 
            [tmp_name] => /tmp/php/php1h4j1o (could be anywhere on your system, depending on your config settings, but the user has no control)
            [error] => UPLOAD_ERR_OK  (= 0)
            [size] => 123   (the size in bytes)
        )

【讨论】:

  • 错误是“未定义的键fileupload”,而不是name
  • 谢谢 - 我修改了,所有关于 name 的东西都会成为 OP 的下一个错误,所以它仍然有帮助
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 2012-11-20
  • 2013-06-07
  • 1970-01-01
  • 2018-11-12
  • 2021-03-16
  • 1970-01-01
  • 2013-08-15
相关资源
最近更新 更多