【问题标题】:PHP How to Insert Data Input from a Dynamically-Generated FormPHP 如何从动态生成的表单中插入数据输入
【发布时间】:2013-12-24 10:06:48
【问题描述】:

在下一步将输入的数据插入到动态生成的表单中时,我需要帮助。我在其他类似的问题上找了几天,但仍然缺少一块。

这是我的 HTML 表单(减去错误捕获/验证):

<form id="form" name="form" method="post" action="recipeaddsubmit.php">
<table id="myTable">
            <tr>
              <td width="10%">Amount</td>
              <td width="10%">Measure</td>
              <td width="35%">Ingredient</td>
            </tr>
            <tr>
              <td valign="top">
                <input type="text" name="Amt1" id="Amt1" size="1" />
                <input type="text" name="Amt2" id="Amt2" size="1"  />
              </td>
              <td valign="top">
                 <select name="Measure" id="Measure">
                   <option>Cup</option>
                   <option>Ounce</option>
                 </select>
              </td>
              <td valign="top">
                 <input type="text" name="Ing" id="Ing" size="40" />
              </td>
             </tr>
         </table>
         <button type="button" onclick="displayResult()">Insert new row</button>
         <input type="submit" name="button" id="button" value="Submit" />
         </form>

这是我标题中的 javascript:

<script>
function displayResult()
{
    var table=document.getElementById("myTable");
    var row=table.insertRow(-1);
    var cell1=row.insertCell(0);
    var cell2=row.insertCell(1);
    var cell3=row.insertCell(2);
            cell1.innerHTML="<input type='text' name='Amt1' id='Amt1' size='1' /> 
    <input type='text' name='Amt2' id='Amt2' size='1'  />";
    cell2.innerHTML="<select name='Measure' id='Measure'> <option>Cup</option> 
    <option>Ounce</option></select>";
    cell3.innerHTML="<input type='text' name='Ing' id='Ing' size='40' />";
}

</script>    

这是我尝试的/部分 mysqli 插入语句(checkInput 是我以前使用过的自创建验证函数,没有问题):

$amt1 = checkInput($_POST['Amt1']);
$amt2 = checkInput($_POST['Amt2']);
$measure = checkInput($_POST['Measure']);
$ing = checkInput($_POST['Ing']);

$ingAddQuery ="INSERT INTO Ingredient (Amt1, Amt2, Measure, Ing)
VALUES ({$amt1}, {$amt2}, {$measure}, {$ing})";

mysqli_query($mysqli,$ingAddQuery);              

    if (!mysqli_query($mysqli,$ingAddQuery))
{
  die('Error: ' . mysqli_error());
}

我不明白的是如何结合一个 foreach 循环来增加一定数量的行;我理解这个概念,但不理解这种情况下的应用程序。

感谢您的帮助!

【问题讨论】:

  • 用 [] 命名您的动态输入(即&lt;input name="Ing[]"&gt;,提交表单,看看您会得到什么。
  • 我尝试这个时才得到最新记录。

标签: php foreach mysqli dynamically-generated


【解决方案1】:

我有一个建议。

你为什么不创建一个隐藏的输入类型。

<input type="hidden" name="cellCount" value="0" />

每次插入新行时,更改此隐藏字段的值。这不会显示在浏览器上。当你提交表单时,这个隐藏元素也会被提交。这可以通过$_POST["cellCount"]在服务器上检索。

希望对你有帮助。

【讨论】:

  • Pradeep,我喜欢这个想法,但是当我插入新行时如何更改值?
  • 我认为您正在通过 javascript 添加行。让我们假设输入字段的名称和 ID 是 cellCount。 如果一次创建多行,则首先创建行并获取一个计数器变量。创建行后,将这段代码放在那里: var counter = 10;// 假设计数器是您计算的行数 document.getElementById("cellCount").value = counter;希望这对你有所帮助。
【解决方案2】:

将名称从 amt1 更改为 amt1[] 等等...

所以

<input type="text" name="Amt1[]" id="Amt1[]" size="1" />

当您提交表单时,

$_POST['Amt1']; //is an array

将是一个数组,所以你可以这样做

$Amt1Array = $_POST['Amt1'];
foreach($Amt1Array => $Amt1){
//do stuff here
}

更好的是,您可以使用 js 为数组创建索引以创建类似...的名称

<input type="text" name="Amt1[0]" id="Amt1[0]" size="1" />
<input type="text" name="Amt2[0]" id="Amt2[0]" size="1" />

<input type="text" name="Amt1[1]" id="Amt1[1]" size="1" />
<input type="text" name="Amt2[1]" id="Amt2[1]" size="1" />

然后在 PHP 中你可以

$Amt1Array = $_POST['Amt1'];
$Amt2Array = $_POST['Amt2'];

foreach($Amt1Array as $key => $Amt1Value){
$Amt2Value = $Amt2Array[$key];
//do stuff with rows
}

【讨论】:

  • Paquino,我该如何解释存在多个字段的事实?我需要 Amt1[0] 来搭配 Amt2[0] 等。
  • @user1713438 我编辑了答案作为您评论的跟进
猜你喜欢
  • 2019-01-24
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 2012-08-14
  • 2011-05-01
  • 1970-01-01
相关资源
最近更新 更多