POST数据未推送到POST阵列


POST data not pushed to POST array

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

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

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

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( /* 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
)

您在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>';
}
?>

这是您的代码,它可以工作。现在只需php检查"isset"。

<?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>

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

我将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]
            );
        }

    }
}
?>