发布动态输入表单并获取数组

时间:2017-07-26 08:55:13

标签: php mysql

我的动态输入表单存在问题。它适用于我们新的Adminportal(我们可以在那里管理我们的餐饮) 所以动态形式看起来像这样:

   ...Add Row</button>
<br />
<div class="rowFields<?= $id; ?>">
<div>
<input type="text" name="newMealName[]" placeholder="Name" style="width:30%"/>
<input type="text" name="newMealDescription[]" placeholder="Description" style="width:50%" />
<input type="number" step="0.01" name="newMealPrice[]" placeholder="0.01" style="width:15%" />
<a href="#" id="remove_row">Remove</a>
</div>
</div>

我正在添加更多行或通过JQuery删除它们 - 这很好。 我正在使用我的Ajax脚本传递表单,我正在使用其他插入到我们的数据库 - 这是有效的!

我的PHP插入脚本看起来像这样:

<?php
...

$nameArray = $_POST['newMealName'];
$descriptionArray = $_POST['newMealDescription'];
$priceArray = $_POST['newMealPrice'];

$sqlAddNewMeals = $db->prepare("insert into tableX(name, description, price) values(?, ?, ?)");

for($i = 0; $i<sizeof($nameArray); $i++)
{
    $sqlAddNewMeals->bind_param('ssd', $_POST['newMealName'][$i], $_POST['newMealDescription'][$i], $_POST['newMealPrice'][$i]);
    $sqlAddNewMeals->execute();
}

$sqlAddNewMeals->close();
?>

我尝试过使用

$sqlAddNewMeals->bind_param('ssdi', $nameArray[$i],... 

但这也不起作用。 我有最后一个想法,但在此之前想与你讨论: 我是否必须绑定诸如$ name,$ description之类的params并使用类似的for循环:

forloop {
$name=$nameArray[1];
...
$sql->execute(); }

提前致谢, pl44

编辑1: AJAX传递表格

$(function () {

    $("button#addNewMeals").click(function () {
        var menu_id = $(this).val();
        $.ajax({
            type: "POST",
            url: "XXX/add-new-menu.php",
            data: $('form.manageMenu-'+menu_id).serialize(),
            success: function () {
                alert("Added.");
            },
            error: function () {
                alert("failure");
            }
        });
    });
});

2 个答案:

答案 0 :(得分:0)

<?php
$nameArray = $_POST['newMealName'];
$descriptionArray = $_POST['newMealDescription'];
$priceArray = $_POST['newMealPrice'];
$sqlAddNewMeals = $db->prepare("insert into tableX(name, description, price) values(?, ?, ?)");
$param = array();
for($i = 0; $i<sizeof($nameArray); $i++)
{
$param[$i]['newMealName'] =  $_POST['newMealName'][$i];
$param[$i]['newMealDescription'] =  $_POST['newMealDescription'][$i];
$param[$i]['newMealPrice'] =  $_POST['newMealPrice'][$i]; 
}

print_r($param);

?>

答案 1 :(得分:0)

我试图自己解决这个问题。我用这个逻辑:

  1. 准备Stmt
  2. 将传递的数组保存到值并将其提取到另一个数组
  3. Bind_param包含$ name,$ desc等变量
  4. for循环声明$ name = nameArray [0],$ desc = $ descArray [0] ......
  5. 在for循环中执行语句
  6. for循环后的关闭语句
  7. 现在正在努力。谢谢大家!!