【问题标题】:php upload script not uploading - but it is adding to database?php 上传脚本未上传 - 但它正在添加到数据库?
【发布时间】:2016-05-20 18:20:45
【问题描述】:

当我尝试为用户个人资料制作横幅艺术上传系统时出现一个奇怪的问题。

我已经搜索了答案,但没有人解决它。

这不是权限问题,我的 chmod 在 uploads 文件夹和 upload.php 文件中是 755。

代码如下:

if ($_POST && !empty($_FILES)) {
$formOk = true;

//Assign Variables
$path = $_FILES['image']['tmp_name'];
$name = $_FILES['image']['name'];
$size = $_FILES['image']['size'];
$type = $_FILES['image']['type'];

if ($_FILES['image']['error'] || !is_uploaded_file($path)) {
    $formOk = false;
    echo "Error: Error in uploading file. Please try again.";
}

//check file extension
if ($formOk && !in_array($type, array('image/png', 'image/x-png', 'image/jpeg', 'image/pjpeg', 'image/gif'))) {
    $formOk = false;
    echo "Error: Unsupported file extension. Supported extensions are JPG / PNG.";
}
// check for file size.
if ($formOk && filesize($path) > 500000) {
    $formOk = false;
    echo "Error: File size must be less than 3 MB.";
}

if ($formOk) {
    // read file contents
    $content = file_get_contents($path);

    //connect to mysql database
    if ($conn = mysqli_connect('localhost', 'hidden', 'hidden', 'hidden')) {
        $user_id = mysqli_real_escape_string($conn, $_POST['user_id']);
        $username = mysqli_real_escape_string($conn, $_POST['username']);
        $content = mysqli_real_escape_string($conn, $content);
    $sql = "insert into banners (user_id, username, name, size, type, content) values ('{$user_id}','{$username}','{$name}', '{$size}', '{$type}', '{$content}')";

        if (mysqli_query($conn, $sql)) {
            $uploadOk = true;
            $imageId = mysqli_insert_id($conn);
        } else {
            echo "Error: Could not save the data to mysql database. Please try again.";
        }

        mysqli_close($conn);
    } else {
        echo "Error: Could not connect to mysql database. Please try again.";
    }
}

形式是:

        <form method="post" enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF']?>" >
      <div>
        <h3>Image Upload:</h3>
      </div>
      <div>
        <label>Image</label>
        <img src="<?php print_r($path); ?>"/>
        <?php print_r($_FILES); ?>
        <input type="text" name="user_id" value="<?php echo $user->data["user_id"]; ?>" readonly/>
        <br />
        <input type="text" name="username" value="<?php echo $user->data["username"]; ?>" readonly/>            
        <input type="hidden" name="MAX_FILE_SIZE" value="500000">
        <input type="file" name="image" />
        <input name="submit" type="submit" value="Upload">
      </div>
    </form>     

我在同一个文件 upload.php 中包含表单以及包含页眉和页脚。

所以基本上是把数据存到数据库里了,就是不会上传什么的,我也查了phpinfo等等,一切正常,打开了,phpinfo中的文件限制是64mb,所以我不明白为什么它不会上传?

任何帮助将不胜感激,谢谢

【问题讨论】:

  • 不准确上传“哪里”?在文件夹中?我在任何地方都没有看到move_uploaded_file()“上传文件夹” - 文件夹声明在哪里?
  • 我搜索了两次 move_uploaded_file()
  • “一个奇怪的问题” - 这里没有什么“奇怪”的,它是“缺少”的东西和你没有“做”的东西,也就是说,“移动”文件到文件夹php.net/manual/en/function.move-uploaded-file.php - 现在让我们都等待它......我应该把它作为一个答案。但我感觉到某个地方的太阳开始下山了。
  • 抱歉大家回复晚了,我不得不出去了。我现在将尝试人们对移动文件 sn-ps 的建议。如果这就是它没有上传的原因,我会发布更新,谢谢大家

标签: php forms file-upload


【解决方案1】:

简单:您没有将该文件移动到任何地方,如move_uploaded_file()

以手册中的以下示例为基础:

<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

并检查错误。

【讨论】:

  • 好的,谢谢,我确实查看了手册以及 w3school 网站,我什至从那里复制了代码并对其进行了调整,该代码中有这个,但它仍然没有上传要么!,但我会再试一次并发布回复,如果这不是修复。
  • 好吧,是的,现在文件上传了,我很生气,我试过这个方法,它一直在做同样的事情,没有上传,现在突然上传了。谢谢大家
  • 所以现在它没有将其添加到数据库中,而是正在上传图像?
  • @TubeNations 嗨,对不起,我离开了一段时间,现在我回来了。我很高兴听到这一切都对你有用,干杯
  • 感谢 Fred,我还在学习 PHP,我有一个程序员为我的网站做了一些部分工作,但现在那个程序员不能再为我编写代码了,所以现在我必须自学。但我一直在变得更好,我只是一个学习缓慢的人:)
【解决方案2】:

我只是想发布我是如何做到的,感谢 Fred 和其他一些 cmets 制作的 :)

                //Assign Variables
            $username = $user->data['username'];
            #mkdir("uploads/".$username,0755);
            $target_dir = "../uploads/$username-";
            $path = $target_dir . basename($_FILES['image']['tmp_name']);
            $name = $target_dir . basename($_FILES['image']['name'].$user_id);
            $size = $_FILES['image']['size'];
            $type = $_FILES['image']['type'];



                if (move_uploaded_file($_FILES['image']['tmp_name'], $name)) {
            echo "<h2>Thank you for uploading your banner art - File is valid, and was successfully uploaded.\n</h2>";
        } else {
            echo "Possible file upload attack!\n";
        }

所以我也做了它,所以它现在也在上传的图片名称前面加上一个用户名。

表单几乎相同,我现在也做了它,以便上传和更新在一个漂亮的盒子里打开:)

https://gyazo.com/e12a03ce01d8f503b8fa2e79f5605809

再次感谢大家:)

【讨论】:

    猜你喜欢
    • 2012-08-07
    • 2014-10-13
    • 2017-07-25
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多