合并PHP数组

合并PHP数组,php,arrays,forms,multipartform-data,Php,Arrays,Forms,Multipartform Data,我现在正在做一个项目,它允许用户创建任意数量的新闻标题、文章和图片,这个系统的唯一规则是标题必须有文章和图片。我的问题在我提交时的表格上,我得到了两个数组,一个是$\u POST,另一个是$\u文件 $\u帖子 Array ( [campaign_title] => Another multiple test [campaign_keyword] => Another multiple test [introduction] => Another multiple test [campa

我现在正在做一个项目,它允许用户创建任意数量的新闻标题、文章和图片,这个系统的唯一规则是标题必须有文章和图片。我的问题在我提交时的表格上,我得到了两个数组,一个是
$\u POST
,另一个是
$\u文件

$\u帖子

Array ( [campaign_title] => Another multiple test [campaign_keyword] => Another multiple test [introduction] => Another multiple test [campaign_headline] => Array ( [0] => Another multiple test headline 1 [1] => Another multiple test headline 2 ) [article] => Array ( [0] => Another multiple test article 1 [1] => Another multiple test article 2 ) [save_multiple] => Save ) Array ( [article_image] => Array ( [name] => Array ( [0] => Intro-artists.gif [1] => textbg1.png ) [type] => Array ( [0] => image/gif [1] => image/png ) [tmp_name] => Array ( [0] => /private/var/tmp/phpwDAkGJ [1] => /private/var/tmp/phpmvrMDg ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 2841 [1] => 56506 ) ) ) 我是否可以同时处理图像

编辑:

HTML表单

<form method="post" action="/admin/editmultiple" enctype="multipart/form-data">
                    <fieldset class="toplined">
                        <label>Campaign Title</label>
                        <input type="text" name="campaign_title" value="<?echo (isset($mailers['mailer_title'])) ?  $mailers['mailer_title'] :  $_POST['campaign_title'];?>" class="extrawideinput" />
                    </fieldset>
                    <fieldset class="toplined">
                        <label>Campaign Type:</label>
                        <label>Multiple</label>
                    </fieldset>
                    <fieldset class="toplined">
                        <label>Campaign Keyword:</label>
                        <div class="forminputblock">
                            <input type="text" name="campaign_keyword" value="<?echo (isset($mailers['mailer_header'])) ?  $mailers['mailer_header'] :  $_POST['campaign_keyword'];?>" class="extrawideinput" />
                        </div>
                    </fieldset>
                    <fieldset class="toplined">
                        <label>Introduction</label>
                        <div class="forminputblock">
                            <input type="text" name="introduction" value="<?echo (isset($mailers['introduction'])) ?  $mailers['introduction'] :  $_POST['introduction'];?>" class="extrawideinput" />
                        </div>
                    </fieldset>
                    <fieldset class="toplined">
                        <label>Headline</label>
                        <div class="forminputblock">
                            <input type="text" name="campaign_headline[]" value="<?echo (isset($mailers['headline'])) ?  $mailers['headline'] :  $_POST['campaign_headline'];?>" class="extrawideinput" />
                        </div>
                    </fieldset> 
                    <fieldset class="toplined">
                        <label>Image:</label>
                        <input type="file" name="article_image[]">
                    </fieldset>
                    <fieldset class="toplined">
                        <label>Story:</label>
                        <div class="forminputblock">
                            <textarea name="article[]" class="js_editable_textarea deeptext" rows="1" cols="1"><?echo (isset($mailers['content'])) ?  $mailers['content'] :  $_POST['article'];?></textarea>
                    </fieldset>
                    <div id="result">

                    </div>
                    <fieldset class="toplined">
                    <a href="" id="makeRequest">+ Add Another New Article</a>
                    </fieldset>
                    <fieldset class="toplined">
                    <input type="submit" name="save_multiple" value="Save" />
                    </fieldset>
                </form>

竞选标题

编辑:我刚刚为您重新编写了一个完整的示例,说明它是如何轻松工作的。(以jquery为例)


$(函数(){
var位置=1;
$(“.add”)。单击(函数(){
var parent=$(this.parent();
var newField=$(this.parent().clone(true).insertAfter(parent);
/*头衔*/
var newName='articles['+position+'][title]';
newField.children(“.name”).attr(“name”,newName);
/*内容*/
新名称='articles['+position+'][content]';
newField.children(“.content”).attr(“name”,newName);
/*内容*/
newName='articles['+position+'][复选框];
newField.children(“.checkbox”).attr(“name”,newName);
newField.slideDown();
位置++;
});
});
例子
文章标题
文章内容
复选框



我不确定您是否希望合并这两个阵列,因为您需要对每个阵列执行不同的操作


使用$\u文件数组,上载的图像将存储在临时位置,在数据库中引用之前,需要将图像移动到更永久的位置。

使用与访问文章子数组相同的键,您可以访问$\u文件数组中的不同字段。显然,您可以合并这两个数组,但不必使用它们

另外,您应该注意,您必须将实际数据从临时位置复制到您希望永久存储它的位置。确保使用[
is\u uploaded\u file()
][1]和[
move\u uploaded\u file()
][2]方法来防止通过文件上载进行的潜在攻击

[1] :
是否已上载文件()

[2] :
移动上传的文件()

请发送一段HTML代码。一般来说,关键是表单字段的命名。不完全确定为什么要这样做,这是一个PHP问题,因为html让事情变得比实际需要困难得多。
<form method="post" action="/admin/editmultiple" enctype="multipart/form-data">
                    <fieldset class="toplined">
                        <label>Campaign Title</label>
                        <input type="text" name="campaign_title" value="<?echo (isset($mailers['mailer_title'])) ?  $mailers['mailer_title'] :  $_POST['campaign_title'];?>" class="extrawideinput" />
                    </fieldset>
                    <fieldset class="toplined">
                        <label>Campaign Type:</label>
                        <label>Multiple</label>
                    </fieldset>
                    <fieldset class="toplined">
                        <label>Campaign Keyword:</label>
                        <div class="forminputblock">
                            <input type="text" name="campaign_keyword" value="<?echo (isset($mailers['mailer_header'])) ?  $mailers['mailer_header'] :  $_POST['campaign_keyword'];?>" class="extrawideinput" />
                        </div>
                    </fieldset>
                    <fieldset class="toplined">
                        <label>Introduction</label>
                        <div class="forminputblock">
                            <input type="text" name="introduction" value="<?echo (isset($mailers['introduction'])) ?  $mailers['introduction'] :  $_POST['introduction'];?>" class="extrawideinput" />
                        </div>
                    </fieldset>
                    <fieldset class="toplined">
                        <label>Headline</label>
                        <div class="forminputblock">
                            <input type="text" name="campaign_headline[]" value="<?echo (isset($mailers['headline'])) ?  $mailers['headline'] :  $_POST['campaign_headline'];?>" class="extrawideinput" />
                        </div>
                    </fieldset> 
                    <fieldset class="toplined">
                        <label>Image:</label>
                        <input type="file" name="article_image[]">
                    </fieldset>
                    <fieldset class="toplined">
                        <label>Story:</label>
                        <div class="forminputblock">
                            <textarea name="article[]" class="js_editable_textarea deeptext" rows="1" cols="1"><?echo (isset($mailers['content'])) ?  $mailers['content'] :  $_POST['article'];?></textarea>
                    </fieldset>
                    <div id="result">

                    </div>
                    <fieldset class="toplined">
                    <a href="" id="makeRequest">+ Add Another New Article</a>
                    </fieldset>
                    <fieldset class="toplined">
                    <input type="submit" name="save_multiple" value="Save" />
                    </fieldset>
                </form>
<?php
echo '<pre>';
print_r($_POST);

echo '</pre>';

?>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

<script type="text/javascript">

$(function() {

 var position = 1;
 $(".add").click(function(){

  var parent = $(this).parent();
  var newField = $(this).parent().clone(true).insertAfter(parent);


  /* title */
  var newName = 'articles['+ position + '][title]';
  newField.children(".name").attr("name", newName);

  /* content */
  newName = 'articles['+ position + '][content]';
  newField.children(".content").attr("name", newName); 

  /* content */
  newName = 'articles['+ position + '][checkbox]';
  newField.children(".checkbox").attr("name", newName); 
  newField.slideDown();

  position++;

 });


});


</script>
<h1>example</h1>
<form action="" method="post">

 <fieldset class="article">
  <label style="display:block">Article title</label>
  <input type="text" name="articles[0][title]" value="" class="name" />

  <label style="display:block">Article content</label>
  <textarea name="articles[0][content]" cols="40" rows="10"  class="content"></textarea>


  <label style="display:block">Checkbox</label>
  <input type="checkbox" name="articles[0][checkbox]" value="1" class="checkbox" />

  <br />
  <a href="#" class="add">add new after</a>
 </fieldset>




 <br />

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

</form>