我正在将带有标题和内容值的内容项保存在数据库中。在我的示例中,您可以看到我有一个项目用于创建新的内容项目和以前保存的项目。
我通过在每个输入的名称字段(如<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]
);
}
}
}
?>