【问题标题】:PHP file upload can't send POST data on same formPHP文件上传无法以相同的形式发送POST数据
【发布时间】:2024-04-15 23:25:01
【问题描述】:

我有一个基本的用户名和密码表单,它还允许您使用它上传图片。有一个创建按钮,它将用户带到uploader.php,它既上传图像又将用户名和密码输入数据库。

在表单标签内:

问题:

用户名不会发布,也不会发布任何其他帖子。所有字段都在表单内。我检查了PHP file upload form cannot submit a POST variable? 和 php.ini post_max_size = 8M,upload_max_filesize = 2M

【问题讨论】:

  • 它在网址中而不是在帖子数据中
  • username 在网址中
  • 这是用户名输入字段的名称
  • 您是否尝试在上传文件的同时提交用户名和密码?
  • 好吧,他们应该被发布到uploader.php,然后如果上传成功,他们应该被输入到数据库中。但是,是的,回答你的问题

标签: php file post upload get


【解决方案1】:

奇怪的是我遇到了同样的问题,直到我添加了 enctype="multipart/form-data" 属性。之后,一切正常

【讨论】:

    【解决方案2】:

    当我尝试上传的文件大于 PHP 接受的最大文件大小时,我遇到了这个问题。看:

    ini_get('post_max_size')

    ini_get('upload_max_filesize')

    查看您的文件是否太大。我的解决方案是使用 empty($_POST) 来确定文件是否太大(或出现其他发布问题)并抛出异常。

    【讨论】:

    • 不是问题的解决方案。
    【解决方案3】:

    使用<input type="hidden"/> 发布username 和其他信息。

    <form enctype="multipart/form-data" method="POST" action="uploader.php">
        <input type="hidden" name="uploader" value="avatar"/>
        <input type="hidden" name="username" value="<?php echo $_POST['username']; ?>" />
        ...
    </form>
    

    示例.php

    <form enctype="multipart/form-data" method="POST" action="uploader.php">
      <br/>Username : <input type="text" name="username"/>
      <br/>Password : <input type="password" name="password"/>
        <input type="hidden" name="uploader" value="avatar"/>
       <br/>File : <input type="file" name="file"/>
       <br/><input type="submit"/>
    </form>
    

    上传者.php

    <?php
      print_r($_POST)  // debug  $_POST
      print_r($_FILES) // file
    
      //OR
      echo $_POST["username"];
      $file=$_FILES["file"];
      print_r(file);
    ?>
    

    【讨论】:

    • 但是密码字段输入类型需要是“密码”(这个也需要贴我应该提到的)
    • 它被加密并发布到 uploader.php 文件中,然后将其插入数据库(我猜这是一种不安全的方法)
    • 嵌入隐藏字段是什么意思?我不确定如何将密码传输到 uploader.php 文件而不将其发布在 URL 中
    • 另外 - 通过隐藏输入类型,这随后隐藏了用户插入用户名的字段
    • 对不起!我从您的帖子 中了解到 您想将 usernameuploader 值(已经可用)传递给请求,但如果您愿意从用户那里获取输入然后选择&lt;input type='text or password'/&gt;
    【解决方案4】:

    听起来您想提交用户名和密码在一次提交中上传文件。

    如果这是你想要的,你需要类似下面的东西:

    <form enctype="multipart/form-data" method="POST" action="uploader.php">
    <input type="text" name="username" value="" />
    <input type="password" name="password" value="" />
    <input type="file" name="uploaded" />
    ...
    </form> 
    

    用户名和密码将在$_POST[] 中提供,文件将在$_FILES[] 中提供。

    【讨论】:

    • 奇怪的是,这仍然没有“发布”用户名。
    • 那么print_r($_POST);print_r($_GET);print_r($_REQUEST); 显示了什么?这些的输出应该可以帮助您找出缺少的东西。
    • 哦,好吧,它就像我在uploader.php上使用POST一样工作......但我很困惑,我认为我应该必须在原始PHP页面上发布用户名,然后必须GET它在 uploader.php 上?
    • 超全局$_POST[]HTTP POST 请求中发送到服务器的所有变量的内容。您可以通过将method 参数设置为&lt;form&gt; 元素来指定表单是发出GET 请求还是POST 请求。 (但请记住,您只能上传 POST 中的文件。)
    • 当我尝试上传的文件大于 PHP 接受的最大文件大小时,我遇到了这个问题。查看:ini_get('post_max_size') 和 ini_get('upload_max_filesize') 看看你的文件是否太大。