0

我现在正在做一个项目,它允许用户创建任意数量的新闻标题、文章和图片,这个系统的唯一规则是标题必须有文章和图片。当我提交时,我的问题在我的表单上,我得到 2 个数组,一个是 the $_POST,另一个是$_FILES.

$_POST

大批
(
 [campaign_title] => 另一个多重测试
 [campaign_keyword] => 另一个多重测试
 [介绍] => 另一个多重测试
 [campaign_headline] => 数组
  (
   [0] => 另一个多重测试标题 1
   [1] => 另一个多重测试标题 2
  )

 [文章] => 数组
  (
   [0] => 另一个多重测试文章 1
   [1] => 另一篇多重测试文章 2
  )

 [save_multiple] => 保存
)

$_FILES

大批
(
 [article_image] => 数组
  (
   [名称] => 数组
    (
     [0] => 介绍艺术家.gif
     [1] => textbg1.png
    )

   [类型] => 数组
    (
     [0] => 图片/gif
     [1] => 图片/png
    )

   [tmp_name] => 数组
    (
     [0] => /private/var/tmp/phpwDAkGJ
     [1] => /private/var/tmp/phpmvrMDg
    )

   [错误] => 数组
    (
     [0] => 0
     [1] => 0
    )

   [大小] => 数组
    (
     [0] => 2841
     [1] => 56506
    )

  )

)

基本上提交表单后的方法是将数据保存到数据库中,将帖子的3项保存在一个表中,标题和文章保存在另一个表中(以刚刚插入的行的id发送)然后最后图像被保存,再次发送第一个保存行的 id。

我无法理解如何确保使用正确的 ID 保存正确的图像,数据库保存是通过循环浏览标题和文章来完成的,但由于图像位于不同的数组中,我无法做到这一点并确保它们是使用正确的外国 ID 保存,我可以将文件合并到帖子中吗?目前我对标题和文章的解决方案是这样的,

foreach ($data['campaign_headline'] as $key => $headline) {
    addMailerMultipleRelatedContent($mailerId, $headline, $data['article'][$key]);
}


function addMailerMultipleRelatedContent($mailerId, $headline, $article) {
    extract($data);
    //die(print_r($id));
    $id = addRelatedMultipleContent($data['introduction'], $headline, $article,
      $mailerId, mktime(), mktime());
}

function addRelatedMultipleContent($introduction, $headline, $content,
  $mailer_id, $created_at, $updated_at){
    $query = "INSERT INTO `mailer_content` (`id`, `introduction`, `headline`,
      `content`, `mailer_id`,`created_at`, `updated_at`) VALUES ";
    $query .= "(NULL, '" . makeSafe($introduction) . "', '" .
      makeSafe($headline) . "', '" . makeSafe($content) . "', '" .
      makeSafe($mailer_id) . "', " . makeSafe($created_at) . ", " .
      makeSafe($updated_at) . ");";
    $result = runInsert($query, __FUNCTION__);
    //die(print_r($result));
    return $result;
}

我可以同时处理图像吗?

编辑:

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

3 回答 3

0

我不确定您是否要合并这两个数组,因为您需要对每个数组执行不同的操作。

使用 $_FILES 数组,上传的图像将存储在临时位置,图像需要移动到更永久的位置,然后才能在数据库中引用。

于 2010-07-13T10:41:58.927 回答
0

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

此外,您应该注意,您必须将实际数据从临时位置复制到您想要永久存储的位置。确保使用 [ is_uploaded_file()][1] 和 [ move_uploaded_file()][2] 方法来防止通过文件上传进行的潜在攻击。

[1]:http is_uploaded_file() ://www.php.net/manual/en/function.is-uploaded-file.php [2]:http ://www.php.net/manual/en/function.move-uploaded -file.php move_uploaded_file()

于 2010-07-13T11:40:53.323 回答
-1

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

<?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>
于 2010-07-13T10:40:29.913 回答