javascript - PHP 不解析 Javascript 创建的 HTML 表单

标签 javascript php html

我有由 Javascript 创建的 HTML 表单。我还有不是由 Javascript 创建的常规表单。当我提交常规 HTML 表单时,PHP 脚本可以很好地解析它,但是当我提交 Javascript 创建的表单时,它不会被解析。我一辈子都无法弄清楚为什么一个可以解析,而另一个却不能。

Javascript:

function addWeapon(){
    var weapsForm = document.createElement("form");
    weapsForm.setAttribute('name',"savefile");
    weapsForm.setAttribute('method',"post");
    weapsForm.setAttribute('action',"");

    var weapsName = document.createElement("input");
    weapsName.setAttribute('type',"text");
    weapsName.setAttribute('name',"textdata[]");

    var weapsNameQt = document.createElement("input");
    weapsNameQt.setAttribute('type',"number");
    weapsNameQt.setAttribute('name',"textdata[]");
    weapsNameQt.setAttribute('value',"0");

    var weapsNameSubmit = document.createElement("input");
    weapsNameSubmit.setAttribute('type',"submit");
    weapsNameSubmit.setAttribute('name',"submitsave");
    weapsNameSubmit.setAttribute('value',"Done!");

    weapsForm.appendChild(weapsName);
    weapsForm.appendChild(weapsNameQt);
    weapsForm.appendChild(weapsNameSubmit);

    document.getElementsByTagName('body')[0].appendChild(weapsForm);
}

这是解析 HTML 表单的 PHP 代码,没有问题。我还想补充一点,Javascript 创建的 HTML 与常规 HTML 完全相同。

PHP:

<?php
if (isset($_POST)){
    if ($_POST['submitsave'] == "Done!"  && !empty($_POST['filename'])) {
        foreach($_POST["textdata"] as $text){
            if(!file_exists($_POST['filename'] . ".txt")){
                $file = tmpfile();
            }
            $file = fopen($_POST['filename'] . ".txt","a+");
            while(!feof($file)){
                $old = $old . fgets($file);
            }
        file_put_contents($_POST['filename'] . ".txt", trim($text).PHP_EOL, FILE_APPEND);
        }
    fclose($file);
    }
}
?>

感谢大家的帮助!

编辑:我忘了提及“文件名”字段位于 HTML 文档中,并且不是由 Javascript 创建的。

编辑:此外,文件是在服务器上创建的,但表单没有被解析。

编辑:在弄乱代码几个小时后,我意识到它实际上不是在解析 HTML 文档上的“文件名”字段,而是在解析 Javascript 表单。谢谢大家的帮助!

最佳答案

您使用 Javascript 制作的表单缺少文件名字段。您需要在 Javascript 中添加文件名字段,如下所示:

function addWeapon(){
    var weapsForm = document.createElement("form");
    weapsForm.setAttribute('name',"savefile");
    weapsForm.setAttribute('method',"post");
    weapsForm.setAttribute('action',"");

    var weapsName = document.createElement("input");
    weapsName.setAttribute('type',"text");
    weapsName.setAttribute('name',"textdata[]");

    var weapsNameQt = document.createElement("input");
    weapsNameQt.setAttribute('type',"number");
    weapsNameQt.setAttribute('name',"textdata[]");
    weapsNameQt.setAttribute('value',"0");

    var weapsfilename = document.createElement("input");
    weapsfilename.setAttribute('type',"text");
    weapsfilename.setAttribute('name',"filename");
    weapsfilename.setAttribute('value',"SomeFile.txt");

    var weapsNameSubmit = document.createElement("input");
    weapsNameSubmit.setAttribute('type',"submit");
    weapsNameSubmit.setAttribute('name',"submitsave");
    weapsNameSubmit.setAttribute('value',"Done!");

    weapsForm.appendChild(weapsName);
    weapsForm.appendChild(weapsNameQt);
    weapsForm.appendChild(weapsNameSubmit);

    document.getElementsByTagName('body')[0].appendChild(weapsForm);
}

或者您需要更改 php 中的条件,使其不基于文件名,如下所示:

<?php
if (isset($_POST)){
    if ($_POST['submitsave'] == "Done!") {
        // New code parsing the other fields since you are no longer grabbing a file
    }
}
?>

关于javascript - PHP 不解析 Javascript 创建的 HTML 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28358780/

相关文章:

php - 如何将json带来的id从ajax发送到php帖子

javascript - SVG 元素上的特征检测 CSS 过渡

javascript - 在 Typescript 或 Javascript 中按数字然后字母对对象键进行排序

javascript - 如何根据特定页面有条件地在 Gatsby 中呈现组件?

javascript - Angular - 无法看到 Angular2 如何从服务自动更新数据

PHP 表单返回 Notice : Array to string conversion

javascript - 如何使用 for 循环与 JSX 元素将集合内容打印到 React Native 中的多个 <Text> 标签中?

php - 为什么会出现 CodeIgniter 安装错误

php - webm转换的编解码器参数不正确

c# - 网格和图像重叠边框?