【问题标题】:What's preventing the file from being uploaded是什么阻止了文件上传
【发布时间】:2019-02-12 19:29:58
【问题描述】:

在我的代码中,我有一个与 textareas 一起使用的文件输入,我的 HTML 表单如下所示:

<form action="includes/listing1.inc.php" method="post" enctype="multipart/form-data">
<input type="file" name="image_file">
<textarea name="title" cols="30" rows="2" placeholder="Title"></textarea>
<textarea name="description" cols="50" rows="5" placeholder="Description"></textarea>
<textarea name="price" cols="5" rows="1" placeholder="Price"></textarea>
<select multiple="multiple" name="categories">
  <option value="bla1">bla1</option>
  <option value="bla2">bla2</option>
  <option value="bla3">bla3</option>
  <option value="bla4">bla4</option>
  <option value="bla5">bla5</option>
</select>
<input type="hidden" name="vendor" value="<?php $_SESSION['UserUid']; ?>">
<input type="submit" name="listpost-submit" value="Post listing">

注意我有文件输入和enctype="multipart/form-data",我有这个 PHP 代码:

    <?php

    if (isset($_POST['listpost-submit'])) {

            require 'dbh.inc.php';

$filename = $_FILES['image_file']['name'];
$target = 'site_images/';
$filetarget = $target.$filename;
$tempfilename = $_FILES['image_file']['name'];
$title = $_POST['title'];
$description = $_POST['description'];
$price = $_POST['price'];
$cat = $_POST['categories'];
$vendor = $_POST['vendor'];
$result = move_uploaded_file($tempfilename, $filetarget);

if ($result == true) {
    echo '<div>Your file has been uploaded!</div>';
    $sql = "INSERT INTO listings 
 (`image`,`title`,`description`,`price`,`category`,`vendor`,`imgpath`) 
VALUES ('$filename', '$title', '$description', '$price', '$cat', '$vendor', 
'$filetarget')";
header("Location: ../index.php?listing=posted");
exit();
}
elseif (empty($title) || empty($description) || empty($price) || empty($cat) 
|| $vendor) {
    echo '<div>Something is missing!</div>';
    exit();
}
else {
    echo '<div>There was a problem uploading your file!</div>';
    exit();
}
}
mysqli_close($conn);

数据库结构:

idListings(int) imgListings(varchar(200))   titleListings   descriptionListings priceListings   categoryListings    vendorListings  imgpathListings(varchar(250))

目前,如果我运行代码,它会告诉我无法上传文件,我尝试更改为中间没有空格的文件,但这也不起作用,我的问题是如何修复这样所有文件都可以存储在数据库中。如果信息不充分,请告诉我!

【问题讨论】:

  • PHP 作为一个名为“错误”的索引,您可以检查一下您上传文件时遇到了什么样的问题。检查secure.php.net/manual/en/features.file-upload.errors.php
  • 如果文件上传到那里,你能检查一下 site_images 文件夹吗?如果不检查你的配置文件。
  • @Marco 我做到了,它返回零。
  • 尝试上传不同的文件,如果您尝试连续两次上传相同的文件,有时浏览器会出现一些奇怪的问题。
  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将任何数据添加到您的查询中。 不要使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug切勿$_POST$_GET任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。

标签: php html mysql file


【解决方案1】:

找到了。您需要对 /tmp 文件夹中的原始文件名 tmp_name 进行用户索引。

更改自:

$tempfilename = $_FILES['image_file']['name'];

收件人:

$tempfilename = $_FILES['image_file']['tmp_name'];

它应该可以工作。

【讨论】:

  • PHP 将上传的文件移动到临时文件夹位置。那是它会将其移动到您想要的文件名的临时名称。此信息存在于索引“tmp_name”中,您使用 var_dump 将得到类似“/tmp/some-random-filename”的信息。此信息是 move_uploaded_file 的第一个参数。你得到'name'索引,你应该得到'tmp_name'得到它吗?
  • 试过$dump = var_dump($tempfilename); 然后move_uploaded_file($dump, $filetarget); 然后得到了临时名字,不知道接下来要做什么,还是有点不清楚!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 2018-07-19
  • 2014-07-13
相关资源
最近更新 更多