【问题标题】:if (isset($_POST['submitName'])) never happensif (isset($_POST['submitName'])) 永远不会发生
【发布时间】:2017-06-21 12:48:18
【问题描述】:

我确实检查了所有内容并浏览了所有示例,但没有找到解决方案。基本上我要做的是简单地上传 XML 文件并将其存储到特定的文件夹中。文件夹已创建,我正在使用 XAMPP localhost。

我的代码如下所示:

HTML

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST" enctype="multipart/form-data">
    <div class="row">
        <div class="form-group col-lg-4 col-md-4 col-xs-4 col-sm-4">
            <input type="file" name="fileToUpload" id="fileToUpload" accept="text/xml">
        </div>
    </div>
    <div class="row">
        <div class="col-lg-4 col-md-4 col-xs-4 col-sm-4">
            <button type="submit" class="btn btn-default" id="uploadFile" name="uploadFile" style="width: 100%">Upload</button>
        </div>
    </div>
</form>

PHP

<?php
if (isset($_POST['uploadFile'])) {
    $name = $_FILES["fileToUpload"]["name"];
    $tmp_name = $_FILES['fileToUpload']['tmp_name'];
    $location = 'uploads/';
    move_uploaded_file($tmp_name, $location.$name);
//also tried this -> copy($tmp_name, $location.$name);
} 
?>

提前致谢,

B.

【问题讨论】:

  • &lt;form action="&lt;?= $_SERVER['PHP_SELF'] ?&gt;" 不知道你从哪里得到htmlspecialchars() 的想法。还要确保目录is_writeable()chmod()chown()
  • 尝试将按钮元素更改为 input type="submit"。我也遇到了这个问题,但更改后它正在工作
  • @Xorifelse 我在以前的一些项目中使用了 htmlspecialchars,所以我只是复制了它。但在这种情况下,它不会更改输出字符串,所以这不是问题(我测试过)。我检查了我的文件夹是否可写,它返回 true,所以没关系。问题是示例中的 IF 条件永远不会发生(条件永远不会为 TRUE)...我添加了 header('Location: google.com/');就像该 IF 块内的测试一样,它永远不会发生。 B. Desai 我之前和现在都试过了,没有任何改变。

标签: php xml forms post submit


【解决方案1】:

如果您尝试检查上传的文件,那不是可行的方法。使用类似is_uploaded_file:

if(is_uploaded_file($_FILES['fileToUpload']['tmp_name'])) { # note the tmp_name, don't change this
    # handling goes here
}

您的代码不起作用,因为您正在检查没有值的参数(因为您从未为按钮指定 value 属性)。此外,不建议在按钮中传递值;如果您需要这种类型的行为(在这种情况下,您不需要),请使用&lt;input type="hidden" name="your-name" value="your-value" /&gt;

【讨论】:

  • 感谢您的回答。不幸的是 is_uploaded_file($_FILES['fileToUpload']['tmp_name']) 抛出异常 -> 未定义索引...
  • 如果是这种情况,那么您要么没有显示整个代码,要么您的操作被搞砸了...尝试使用整个 URL 而不是 $_SERVER['PHP_SELF'],例如 @ 987654327@看看是否有效
  • 检查我上面的答案..这些都没有帮助。这与 XAMPP/server 有关。
【解决方案2】:

所以经过 2 天的痛苦之后,我仍然没有找到解决这个问题的具体解决方案,但至少我发现它与 PHP/HTML 代码无关,但它与服务器有关。要连接到本地服务器,我使用 XAMPP。

首先,我尝试重新安装它(到相同的路径 - D 磁盘分区) - 没有改变任何东西。

其次,我尝试将它安装到C盘 - 仍然没有

第三,我安装了 WAMP,但它仍然无法正常工作。我在其他服务器上测试了我的代码,它就像一个魅力。

结论:服务器甚至无法识别表单已提交(IF 条件永远不会为真)。

如果有人知道 XAMPP 的哪个部分或任何其他 AMP 必须对它做任何事情,请告诉我。我会很感激的。

提前致谢

【讨论】:

  • 谢谢。很多修复,但没有一个对我有用。说真的,我不知道为什么会这样。还在等待我的朋友回复他们是使用 XAMPP 还是使用远程服务器。
  • 刚刚启动了我的 XAMPP(主要是原版)——我能够重现这个。你的文件有多大?
  • 我的朋友确认他在后台用xampp正常运行。文件一点也不大,不到1MB。
  • 好的,您可以检查post_max_size= 是否小于您的文件大小,或者是否设置了enable_post_data_reading = Off
【解决方案3】:

[FIXED] 所以,终于.. 到头来就像过去一样.. 最愚蠢的事情会造成最大的混乱。

无论如何,我使用 PhpStorm 作为我的 IDE,它有自己的内置服务器。即使我确实设置了我的参数(php 解释器和运行配置),但 PhpStorm 会自动使用另一台服务器而不是我的服务器(我应该早先注意端口,但是是的..)。首先为什么会发生这种情况是因为 xampp 的文档根目录不是我存储项目的目录。

你可以做两件事:

  1. 如果使用 XAMPP,请将您的项目存储在 htdocs 或
  2. 停止 Apache 和 MySql,转到 Apache 配置 -> Apache (httpd.conff) -> 找到 DocumentRoot "C:/xampp/htdocs" & "Directory "C:/xampp/htdocs"

并用您自己的路径(包括项目文件夹本身)替换“C:/xampp/htdocs”,然后再次启动 Apache 和 MySql。 注意,如果您不包含主项目文件夹但包含其父文件夹,则运行代码时的路径将为 localhost:port/projectMainFolder/others

至于我,你可以锁定这个话题,因为我找到了解决方案。再次感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2015-03-05
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多