0

添加另一个项目

这两个字段被插入到数据库中。但是,我想让用户能够“添加另一个项目”。理想情况下,他们应该能够添加任意数量的项目。当他们提交表单时,数据将被插入到 mysql 表中。

我该怎么做呢?在我的数据库中创建 10 个额外的列来容纳添加的额外项目听起来既不现实也不理想。

谢谢您的帮助!

这是我的代码片段,我将数据插入数据库:

if ($stmt = $mysqli->prepare("INSERT items (number, description) VALUES (?, ?)"))
                            {
                                    $stmt->bind_param("ss", $number, $description);
                                    $stmt->execute();
                                    $stmt->close();
                            }
4

2 回答 2

1

这是一个非常复杂的问题,但有一些非常简单的解决方案。首先,您需要更改用于处理可变数量项目的后端 PHP 脚本。

例如,现在,你可能有类似的东西:

$item_number = $_POST['item_number'];
$item_description = $_POST['item_description'];
add_item_to_db($item_number, $item_description);

您需要更改代码以处理一系列项目:

$item_numbers = $_POST['item_number'];
$item_descriptions = $_POST['item_description'];
// validate that count($item_numbers) == count($item_descriptions)
for ($i = 0; $i < count($item_numbers); $i++) {
    add_item_to_db($item_numbers[$i], $item_descriptions[$i]);
}

在上面未显示的情况下,您需要执行相当多的错误处理。如果用户输入的 item_number 数量与 item_descriptions 不同,则您必须确定如何处理。此外,任何字段都可以为空。有些情况可能是错误的,有些情况可能不是。

您必须更改 HTML:

<input type="text" name="item_number[]" />
<input type="text" name="item_description[]" />

注意名称中的[]。这为每个指定了一个值数组。

最后,当用户按下Add another item链接时,您需要在屏幕上动态添加一组新的输入项。我建议为此使用 jQuery。为此,您将执行以下操作:

jQuery('<input type="text" name="item_number[]" /><input type="text" name="item_description[]" />').appendTo('#someDiv');

确保将新的输入元素附加到表单元素中。显然,还有很多代码需要编写。这只是概念的一个基本示例。

于 2013-03-13T21:50:25.927 回答
0

只需使用:

name="item[]"

对于项目 # '

name="description[]"

<input type="text" name="item[]" /><input type="text" name="description[]" />

对于项目描述字段并在您的服务器端遍历它们。在前端只需创建一个多次复制该节点的脚本。

编辑

根据您显示的代码,它应该类似于以下代码:

if(isset($_POST['item']){
for($i = 0; $i < count($_POST['item']); $i++){
$number = $_POST['item'][$i];
$description= $_POST['description'][$i];
if ($stmt = $mysqli->prepare("INSERT items (number, description) VALUES (?, ?)"))
                            {
                                    $stmt->bind_param("ss", $number, $description);
                                    $stmt->execute();
                                    $stmt->close();
                            }
}

在您的 javascript 中执行以下操作:

function addRow(){
  document.getELementById('container').el.innerHTML += '<input type="text" name="item[]" /><input type="text" name="description[]" />' ;
}

HTML 代码:

<form name='myform' >

 <div id="container">
 <input type="text" name="item[]" /><input type="text" name="description[]" />     
 </div>
    <p onclick="addRow() ;" >Add another item</p>
</form>

我希望这有帮助。

更新

试试这个:

if(isset($_POST['item']){

if ($stmt = $mysqli->prepare("INSERT items (number, description) VALUES (?, ?)"))
{
  for($i = 0; $i < count($_POST['item']); $i++){
  $number = $_POST['item'][$i];
  $description= $_POST['description'][$i];

                                    $stmt->bind_param("ss", $number, $description);
                                    $stmt->execute();

  }
  $stmt->close();

 }
于 2013-03-13T21:46:29.400 回答