POST数据未推送到POST数组

时间:2015-12-10 11:42:06

标签: php arrays post multidimensional-array

我正在使用数据库中的标题和内容值保存内容项。在我的示例中,您可以看到我有一个项目用于创建新的内容项目和之前保存的项目。

我通过在每个输入的名称字段中添加索引来保存多维数组中的项目,如<input name="extra[2][title]">(参见示例)。

对于创建字段,我尝试通过执行<input name="extra[][title]">来存储带有新密钥的新项目,这通常会将新项目推送到数组的末尾。但是当我打印出POST数据时,新项目不存在,所以我无法将其与其他项目一起存储在数组中。

HTML FORM:

<form method="post">

    <!-- This is for creating a new item -->
    <div class="item">
        <input type="text" name="extra[][title]">
        <input type="text" name="extra[][content]">
    </div><!--End .item-->


    <!-- Items from array -->
    <?php
    $extras = array( /* Earlier saved items */ );
    foreach( $extras as $index => $extra ) { ?>

        <div class="item">
            <input type="text" name="extra[<?php echo $index; ?>][title]">
            <input type="text" name="extra[<?php echo $index; ?>][content]">
        </div><!--End .item-->

    <?php   
    }
    ?>

    <input type="submit" name="submit">

</form>

执行此操作后,新项目不存在:

<?php
if( ! empty( $_POST['extra'] ) ) {

    echo '<pre>';
    print_r( $_POST['extra'] );
    echo '</pre>';

}
?>

print_r($ _POST)返回:

Array
(
    [extra] => Array
        (
            [0] => Array
                (
                    [title] => Test 1
                    [content] => test content
                )

            [1] => Array
                (
                    [content] => test content
                    [title] => Test 2
                )

            [2] => Array
                (
                    [title] => Test 3
                    [content] => test content
                )

        )

    [submit] => submit
)

3 个答案:

答案 0 :(得分:1)

你已经在php创建的输入中给了密钥而它不起作用所以你必须将密钥留空只是给它的值

这是符合您需求的代码

<form method="post">

    <!-- This is for creating a new item -->
    <div class="item">
        <input type="text" name="extra[0][title]">
        <input type="text" name="extra[0][content]">
    </div><!--End .item-->


    <!-- Items from array -->
    <?php
    $extras=array(0=>'aa',1=>'bb');
    $i=1;
    foreach( $extras as $index => $extra ) { ?>

        <div class="item">
            <input type="text" name="extra[<?php echo $i ?>][title]" value="<?php echo $extra; ?>">
            <input type="text" name="extra[<?php echo $i ?>][content]" value="<?php echo $extra; ?>">
        </div><!--End .item-->

    <?php   
     $i++;}
    ?>

    <input type="submit" name="submit">

</form>
<?php
if( ! empty( $_POST['extra'] ) ) {

    echo '<pre>';
    print_r( $_POST['extra'] );
    echo '</pre>';

}
?>

答案 1 :(得分:0)

这是你的代码,它有效。只是php现在检查&#34; isset&#34;。

<?php
if( isset( $_POST ) ) {

    echo '<pre>';
    print_r( $_POST["extra"] );
    echo '</pre>';
}
?>


<form method="post">

<!-- This is for creating a new item -->
<div class="item">
    <input type="text" name="extra[][title]">
    <input type="text" name="extra[][content]">
</div><!--End .item-->


<!-- Items from array -->
<?php
$extras = array( "alfa","beta" );
foreach( $extras as $index => $extra ) { ?>

    <div class="item">
        <input type="text" name="extra[<?php echo $index; ?>][title]">
        <input type="text" name="extra[<?php echo $index; ?>][content]">
    </div><!--End .item-->

<?php   
}
?>

<input type="submit" name="submit">

</form>

答案 2 :(得分:0)

在RiggsFolly的帮助下,我创建了这个解决方案,非常简单。

我将表单html更改为:

<form method="post">

    <!-- This is for creating a new item -->
    <div class="item">
        <input type="text" name="extra_title[]">
        <input type="text" name="extra_content[]">
    </div><!--End .item-->


    <!-- Items from array -->
    <?php
    $extras = array( 
        array(
            'title' => 'Test 1',
            'content' => 'test content'
        ),
        array(
            'title' => 'Test 2',
            'content' => 'test content'
        ),
        array(
            'title' => 'Test 3',
            'content' => 'test content'
        )


    );
    foreach( $extras as $index => $extra ) { ?>

        <div class="item">
            <input type="text" name="extra_content[]" value="<?php echo $extra['title']; ?>">
            <input type="text" name="extra_title[]" value="<?php echo $extra['content']; ?>">
        </div><!--End .item-->

    <?php   
    }
    ?>

    <input type="submit" name="submit" value="submit">

</form>

POST输出:

Array
(
    [extra_title] => Array
        (
            [0] => Test 4
            [1] => Test 1
            [2] => Test 2
            [3] => Test 3
        )

    [extra_content] => Array
        (
            [0] => Tkldmsd
            [1] => test content
            [2] => test content
            [3] => test content
        )

    [submit] => submit
)

然后您可以按索引将这些值组合如下:

<?php
if( ! empty( $_POST ) ) {

    echo '<pre>';
    print_r( $_POST );
    echo '</pre>';

    if( ! empty( $_POST['extra_title'] ) && ! empty( $_POST['extra_content'] ) ) {

        $extra = array();

        foreach( $_POST['extra_title'] as $index => $title ) {

            $extra[$index] = array(
                'title' => $title,
                'content' => $_POST['extra_content'][$index]
            );

        }


    }

}
?>