我有由 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/