繁体   English   中英

PHP - 上传图片和 $_files 变量

[英]PHP - uploading images and $_files variable

我正在为博客文章创建一个带有 WYSIWYG 编辑器的博客,并为每篇博客文章上传图片。

所以我的输入看起来像这样,我在这里包含了一个名为wysiwyg.php的文件,但这对于这个问题并不是真正必要的。 (它基本上有用于粗斜体等的按钮,它只是这样包含,因为我在我网站的其他区域使用它)

<form action="blog_create.php" method="POST">
    <input id="title" name="title" type="text" placeholder="Title">
    <input id="post_image" name="post_image" type="file">
    <textarea id="description" name="description" placeholder="Description"></textarea>
    <textarea id="meta" name="meta" placeholder="Meta"></textarea>

    <div id="wysiwyg_controls"><?php include_once("wysiwyg.php"); ?></div>
    <iframe name="richTextField" id="wysiwyg" class="news_article"></iframe>

    <input type="hidden" id="text_content" name="text_content" value="">
    <input type="hidden" id="save_as_type" name="save_as_type" value="">

    <button id="blog_draft_submit" name="blog_draft_submit" onclick="return false">Save as Draft</button>
    <button id="blog_publish_submit" name="blog_publish_submit" onclick="return false">Publish</button>
</form>

然后我使用 JavaScript/jQuery 像这样提交表单以实际获取 iframe 的内容:

$("#blog_draft_submit").on("click", function(){
    $text_content = richTextField.document.getElementsByTagName('body')[0].innerHTML;
    $("#text_content").attr("value", $text_content);
    $("#save_as_type").attr("value", "draft");
    this.form.submit();
});
$("#blog_publish_submit").on("click", function(){
    $text_content = richTextField.document.getElementsByTagName('body')[0].innerHTML;
    $("#text_content").attr("value", $text_content);
    $("#save_as_type").attr("value", "publish");
    this.form.submit();
});

但是,这似乎不适用于文件输入或无法访问应在 Global $_FILES变量中的任何内容。

如果我做var_dump($_FILES); 我得到:

array (size=0)
  empty

但是当我做var_dump($_POST); 我得到:

array (size=8)
  'title' => string '' (length=0)
  'post_image' => string 'image.png' (length=23)
  'description' => string '' (length=0)
  'meta' => string '' (length=0)
  'wysiwyg_image' => string '' (length=0)
  'text_content' => string '' (length=0)
  'save_as_type' => string 'draft' (length=5)

这是因为我通过 JS 提交的方式还是我实际上做错了什么? 我是否需要创建一个单独的解析文件并执行XMLHttpRequest和类似 AJAX 的操作?

编辑

不需要 AJAX。

尝试在<form>标签中添加enctype="multipart/form-data"

当我们使用$_FILE时要遵循的一些规则:

  1. 检查 php.ini 文件上的file_uploads = On
  2. 确保表单使用 method="post"
  3. 表单还需要以下属性: enctype="multipart/form-data"它指定提交表单时使用的内容类型

如果没有上述要求,文件上传将无法进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM