如何通过PHP中的表单传递多维数组?

时间:2015-04-13 10:21:01

标签: php arrays forms

我创建了一个表,用户可以在其中添加列和行,因此这两个都是未知长度。这些字段包含用户输入数据的输入框。 (忽略x,它们是相关页面的链接)。 Table

PHP for the table(第46行是我传递数组的地方)

我已经决定将这些输入传递到mysql数据库的最佳方法是通过一个多维数组。我听说我可以这样做,但我找不到任何有关我生活的相关文件。

当用户点击提交时,所有数据都应输入到如下表格中:
(其中header = cem_param_id和product(左侧)= cem_prod_id) Database

我该怎么做?

我知道MySQL已经过时了。我还在学习更新它。

3 个答案:

答案 0 :(得分:1)

由于我们无法一步到位地找到解决方案,并且为了使自己清楚,您的表格如下:

<?php
    $dbCon = new PDO("mysql:host=localhost;database=test", 'root', '');
    if(isset($_POST) && !empty($_POST)) {
        echo '<pre>'; print_r($_POST);
        die;
    }

?>

HTMl查看:

    <!DOCTYPE html>
<html>
<title>Stack HTML</title>
<link rel="stylesheet" href="../repo/css/bootstrap.css" type="text/css" />
<script src="https://code.jquery.com/jquery-2.1.3.js"></script>
<script src="../repo/js/bootstrap.js"></script>
<script src="../repo/js/jquery.validate.js"></script>
<head>
</head>
<body>
    <div class="container">
        <form method="post">
            <table class="table">
                <tr>
                    <td><input type="checkbox" name="row[1][1]"  /></td>
                    <td><input type="checkbox" name="row[1][2]"  /></td>
                    <td><input type="checkbox" name="row[1][3]"  /></td>
                </tr>
            </table>
            <input type="submit" name="submit" value="Submit" class="btn btn-primary" />
            <input type="button" name="submit" value="Add Horizontal" class="btn btn-success" />
            <input type="button" name="submit" value="Add Vertical" class="btn btn-info" />
        </form>
    </div>
<script>
    $(function(){
        $(document).on('click', '.btn-success', function(){
            var tableColumns = $('.table tr:eq(0)>td').length;
            var tableRow = $('.table tr').length;
            var NewRowNumber = tableRow+1; 

            var htmlElement = '<tr>';
            for(i=1; i<=tableColumns; i++){
                htmlElement += '<td><input type="checkbox" name="row['+NewRowNumber+']['+i+']"  /></td>';
            }
            htmlElement += '</tr>';
            $('.table').append(htmlElement);
        });
        $(document).on('click', '.btn-info', function(){
                console.log($(this))
            var RowCount = 1;
            $('.table tr').each(function() {
                var Column = $(this).find('td').length;
                $(this).append('<td><input type="checkbox" name="row['+RowCount+']['+Column+']"  /></td>')
                RowCount++;
            });
        });
    })
</script>   
</body>
</html>

另外你还会有动态行吗?

答案 1 :(得分:0)

我将输入的名称作为数组传递;

<input type='checkbox' name='prod_matrix[".$ceprod_id."][".$ceparam_id."]'>

其中$ ceprod_id是产品ID,$ ceparam_id是参数ID(标题)

然后我使用2个foreach循环捕获了这些:

$prod_matrix = $_POST['prod_matrix'];
    foreach($prod_matrix as $prodid => $product)
    {
        echo $prodid;
        foreach ($product as $paramid => $value)
        {
            echo $paramid;
            echo $value;
        }
        echo "<br>";
    }

其中$ value是输入到字段中的数据(如果选中,复选框会给出“on”值,如果未选中,则根本不传递任何内容)

然后我使用此信息来构建查询。

答案 2 :(得分:0)

这是一个解决方案:

Submitting a multidimensional array via POST with php

在提交时,您将获得一个数组,就好像这样创建:

 $_POST['topdiameter'] = array( 'first value', 'second value' );
    $_POST['bottomdiameter'] = array( 'first value', 'second value' );

但是,我建议您将表单名称更改为此格式:

  name="diameters[0][top]"
   name="diameters[0][bottom]"
   name="diameters[1][top]"
   name="diameters[1][bottom]"
   ...

使用该格式,循环使用这些值会更容易。

if ( isset( $_POST['diameters'] ) )
{
    echo '<table>';
    foreach ( $_POST['diameters'] as $diam )
    {
        // here you have access to $diam['top'] and $diam['bottom']
        echo '<tr>';
        echo '  <td>', $diam['top'], '</td>';
        echo '  <td>', $diam['bottom'], '</td>';
        echo '</tr>';
    }
    echo '</table>';
}