使用javascript生成的HTML文本输入标记在提交表单时不会POST

时间:2018-06-12 18:50:12

标签: javascript php html input

我有一份表格,询问就业历史,你申请大学等等。例如,对于他们申请的大学,我首先有一个文本框,下面有一个按钮调用javascript函数添加另一个文本输入正下方。当我第一次创建这个表单时,我正在使用一些不同的数据,然后一旦提交,我将从$_POST获取它们并将它们放入数组中然后将数组的每个元素添加到我的相应表中D b。但突然之间,我再也无法提交表格了,我收到一条消息告诉我,我试图获得一个未指明的索引。但是,当我在浏览器中检查文本输入时,它们被正确命名。我读到我应该将它们命名为college[],以便它们都进入一个数组,但这也不起作用....现在是什么?

JS:

var numcol = 1;
function addnewschool(){
 numcol++;
 var container = document.getElementById("collegecontainer");
 container.appendChild(document.createTextNode(numcol));
 var input = document.createElement("input");
 input.type = "text";
 input.name = 'applied'+numcol;
 container.appendChild(input);
 container.appendChild(document.createElement("br"));}

HTML:

<p class="text-dark mb-4">List the Colleges you have applied to:<br>
<div id="collegecontainer" name="collegecontainer">
<input type="text" name='applied1'><br>
</div>
<input type="button" id="addcollege" name="addcollege" value="Add College" 
onClick="addnewschool()"><br>
</p>

PHP:

$applied = array();
foreach($_POST['applied'] as $value){
  array_push($applied, $value);
}

更新:好的,所以我把它改成了另一种方式,但是没有用,所以我决定只复制一个正在运行的早期版本并将其粘贴到正确的布局中。这工作......现在,它已经修复了,我继续添加它。我添加了#34; required&#34;一些标签,稍微改变了一些样式,并改变了我的javascript文件。但现在我遇到了和以前一样的问题。我的所有POST数组都只有第一个值。我可以添加什么改变了这个?有没有人遇到过这样的问题?

3 个答案:

答案 0 :(得分:0)

您的第一个附加输入应该具有索引“applied1”,而不是“applied2”

看看:

var numcol = 1; // put this to 0
function addnewschool(){
numcol++; // or move this to the end of the function

答案 1 :(得分:0)

命名您的文本输入字段applied[],当您处理表单时,$_POST['applied']的帖子值将是已为您填充的数组,但已完成许多条目。

要将数据存入您的表格:

foreach ($_POST['applied'] as $id => $applied) { 

    $sql = "INSERT INTO Colleges(id, college) VALUES('$id','$applied')"; 

    if($conn2->query($sql) === TRUE){ 
        echo "New Record created successfully"; 
    } else { 
        echo "Error: " . $sql . "<br>" . $conn2->error; 
    } 
}  // end of foreach

答案 2 :(得分:0)

您不需要为每个输入添加不同的名称。只需在所有输入名称中使用applied[]

要在PHP中获取数组,只需使用$_POST['applied']

如果您想稍后使用它们,可以使用foreach,例如

foreach ($_POST['applied'] as $value) {
    // Do what you want. Retrieve the value using $value
}

或您喜欢的任何其他方法。