我有一个带有add more按钮的动态表单,它创建了一个可用于导入数据的XML文件。
用户填写表单,可以单击更多以添加任意数量的表单。然后写入数据以通过fwrite创建文件。
问题是我使用了唯一的ID,我需要获取值才能创建文件。
这是javascript https://jsfiddle.net/jdarville/mbfjmd02/6/
$(document).ready(function() {
Number.prototype.pad = function(size) {
var s = String(this);
while (s.length < (size || 0)) {s = "0" + s;}
return s;
}
var max_fields = 10; //maximum input boxes allowed
var wrapper = $(".input_fields_wrap"); //Fields wrapper
var add_button = $(".add_field_button"); //Add button ID
var x = 1; //initlal text box count
var c = 9;
$(add_button).click(function(e){ //on add input button click
e.preventDefault();
if(x < max_fields){ //max input box allowed
x++; //text box increment
c++;
$(wrapper).append('<div><label><span>Template Id :</span><input type="text" name="templateid'+x+'" id="templateid'+x+'"></label><label><span>UNC Path :</span><input type="text" name="uncpath'+x+'" id="uncpath'+x+'"></label><label><span>Username :</span><input type="text" name="username'+x+'" id="username'+x+'"></label><label><span>Password :</span><input type="text" name="password'+x+'" id="password'+x+'"></label><label><span>Name :</span><input type="text" name="scantoname'+x+'" id="scantoname'+x+'"></label><a href="#" class="remove_field btn btn-primary">Remove</a></div>'); //add input box
<!--add input value to "how many" field-->
$.each($('input[name="howmany[]"]'), function() {
$(this).val(x);
});
<!--add input value to "templateid" field-->
$('input[name="templateid'+x+'"]').each(function() {
$(this).val((x).pad(3,0));
});
}
});
$(wrapper).on("click",".remove_field", function(e){ //user click on remove text
e.preventDefault(); $(this).parent('div').remove(); x--;
})
});
如何在PHP中发布数据?我尝试了一堆东西,但它不起作用。 :(
$templateid = @$_POST["templateid'+x+'"];
$uncpath = @$_POST["uncpath'+x+'"];
$username = @$_POST["username'+x+'"];
$password = @$_POST["password'+x+'"];
$scantoname = @$_POST["scantoname'+x+'"];
$f_data= '<?xml version="1.0" encoding="UTF-8"?>
<JobTemplates>
<GroupList>
<Group gid="000">
<MetaData>
<groupName>Public Template Group</groupName>
<userName />
<isPasswordProtected>false</isPasswordProtected>
<ownerName>Admin</ownerName>
<notificationEmail />
<TemplateCount>'.$templateid.'</TemplateCount>
<TemplateCount>'.$uncpath.'</TemplateCount>
<TemplateCount>'.$username.'</TemplateCount>
<TemplateCount>'.$password.'</TemplateCount>
<TemplateCount>'.$scantoname.'</TemplateCount>';
最终目标是获取一个如下所示的文件:
<JobTemplates>
<GroupList>
<Group gid="000">
<MetaData>
<groupName>Public Template Group</groupName>
<userName />
<isPasswordProtected>false</isPasswordProtected>
<ownerName>Admin</ownerName>
<notificationEmail />
<TemplateCount>001</TemplateCount>
<TemplateCount>\\test\test</TemplateCount>
<TemplateCount>bill</TemplateCount>
<TemplateCount>pass</TemplateCount>
<TemplateCount>bill crab</TemplateCount>
<JobTemplates>
<GroupList>
<Group gid="000">
<MetaData>
<groupName>Public Template Group</groupName>
<userName />
<isPasswordProtected>false</isPasswordProtected>
<ownerName>Admin</ownerName>
<notificationEmail />
<TemplateCount>002</TemplateCount>
<TemplateCount>\\test\test2</TemplateCount>
<TemplateCount>Mike</TemplateCount>
<TemplateCount>pass</TemplateCount>
<TemplateCount>Mike crab</TemplateCount>';
答案 0 :(得分:0)
嗯,您的HTML代码中没有表单标记,那么我认为您的PHP代码没有收到任何内容的问题。
创建一个表单标记,封装所有字段然后它应该有效。
我建议你删除那些&#34; @&#34;从您的POST阵列中,您可以看到您的表单提交给PHP的内容,或者即使正在提交某些内容。
<强>更新强> 就像enhzflep所说,你试图访问不存在的POST阵列上的密钥。 你为什么用:
@$_POST["templateid'+x+'"];
POST中使用的密钥应该与您的表单的输入名称完全相同。 如果您不确定名称是什么,请尝试使用
print_r($_POST);
或
print_r($_GET);
这样做,你会更好地了解正在发生的事情。
答案 1 :(得分:0)
这是一个完整的例子,扩展了我在评论中提到的内容。首先,请注意我在用户要求时创建一组新输入的非常不同的方式 - 我将它们全部添加为元素,而不是文本字符串。其次,我在数组中定义了我想要的字段 - 这使得添加或更改这些字段变得更快,更容易并且更不容易出错。
接下来,您可以查看是否检查了生成的html,输入只有名称,在这种情况下只需要给它们ID。
最后,您可以看到PHP只回显$ _POST数组的内容。
<强> blank.html 强>
<!DOCTYPE html>
<html>
<head>
<script>
"use strict";
function byId(id){return document.getElementById(id);}
function newEl(tag){return document.createElement(tag);}
function newTxt(txt){return document.createTextNode(txt);}
window.addEventListener('load', onDocLoaded, false);
var nextIdToUseGlobal = 0;
function onDocLoaded()
{
addFormElems( byId('fieldContainer'), nextIdToUseGlobal++ );
}
function addFormElems(fieldContainer, idToUse)
{
var formItems = [
{type: 'input', name: 'ids[]', label: 'Template Id:'},
{type: 'input', name: 'uncs[]', label: 'Unc Path:'},
{type: 'input', name: 'usernames[]', label: 'Username:'},
{type: 'input', name: 'passwords[]', label: 'Password:'},
];
formItems.forEach( formElemForEachFunc );
fieldContainer.appendChild( newEl('hr') );
function formElemForEachFunc(elem, index, list)
{
var curField = newEl( elem.type );
curField.setAttribute('name', elem.name);
if (index == 0) // 0 since this is the index of the id field in the above array
curField.value = idToUse;
fieldContainer.appendChild( newTxt(elem.label) );
fieldContainer.appendChild( curField );
fieldContainer.appendChild( newEl('br') );
}
}
</script>
<style>
</style>
</head>
<body>
<button onclick='addFormElems(byId("fieldContainer"),nextIdToUseGlobal++)'>Add new Scan Item</button><br>
<form id='myForm' action='outputTest.php' method='post'>
<div id='fieldContainer'></div>
<input type='submit' value='Submit values'/>
</form>
</body>
</html>
<强> outputTest.php 强>
<?php
var_dump( $_POST );
$numItems = count( $_POST["ids"] ); // get number of items in the ids array
$ids = $_POST["ids"];
$uncs = $_POST["uncs"];
$users = $_POST["usernames"];
$passwords = $_POST["passwords"];
echo("<hr>");
echo("You submitted $numItems items for scanning" . "<hr>");
for ($i=0; $i<$numItems; $i++)
{
echo "ID: $ids[$i]" . "<br>";
echo "UNC: $uncs[$i]" . "<br>";
echo "username: $users[$i]" . "<br>";
echo "password: $passwords[$i]" . "<br>";
echo "<hr>";
}
?>
答案 2 :(得分:0)
这是一种不同的方法,而不是使用javascript来生成数字值(+ x +),让我们只使用php来实现它,所以没有问题:
<?php
if(isset($_POST['submit'])){
foreach($_POST['howmany'] as $item_number){
$item_number = $item_number;
}
for($x=1;$x<=$item_number;$x++){
echo $_POST["templateid".$x];
echo '<br>';
}
for($x=1;$x<=$item_number;$x++){
echo $_POST["templateid".$x];
echo '<br>';
echo $_POST["uncpath".$x];
echo '<br>';
echo $_POST["username".$x];
echo '<br>';
echo $_POST["password".$x];
echo '<br>';
echo $_POST["scantoname".$x];
echo '<br>';
}
}
?>