Слияние PHP массивов - PullRequest
       13

Слияние PHP массивов

0 голосов
/ 13 июля 2010

В данный момент я работаю над проектом, который позволяет пользователю создавать любое количество заголовков новостей, статей и изображений. Единственное правило в этой системе состоит в том, что заголовок должен содержать статью и изображение. Мой вопрос в моей форме, когда я отправляю, я получаю 2 массива, один - $_POST, а другой - $_FILES.

$ _ POST

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
    )

  )

)

Обычно после отправки формы метод сохраняет данные в базе данных, 3 элемента сообщения сохраняются в одной таблице, заголовки и статьи сохраняются в другой таблице (отправляется с идентификатором только что вставленной строки). ) и, наконец, изображения сохраняются, снова отправляются с идентификатором первой сохраненной строки.

У меня возникают проблемы с пониманием того, как я могу убедиться, что нужные изображения сохраняются с правильным идентификатором, сохранение в БД выполняется путем циклического перемещения по заголовкам и статьям, но, поскольку изображения находятся в другом массиве, я не могу сделать это и сделать уверен, что они сохраняются с правильным внешним идентификатором, могу ли я объединить файлы в сообщение? В настоящее время у меня есть решение для заголовков и статей:

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;
}

Могу ли я работать с изображениями одновременно?

EDIT:

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>

Ответы [ 3 ]

0 голосов
/ 13 июля 2010

Я не уверен, что вы захотите объединить два массива, так как вам нужно выполнять различные действия для каждого массива.

С массивом $ _FILES загруженные изображения будут храниться во временном местоположении, изображения должны быть перемещены в более постоянное место, прежде чем на них будут ссылаться в вашей базе данных.

0 голосов
/ 13 июля 2010

С помощью того же ключа, который вы используете для доступа к подмассиву article, вы можете получить доступ к различным полям в массиве $ _FILES. Очевидно, вы можете объединить два массива, но вам не обязательно работать с ними.

Кроме того, вы должны отметить, что вам необходимо скопировать фактические данные из временного местоположения туда, где вы хотели бы их постоянно хранить. Убедитесь, что вы используете методы [is_uploaded_file()] [1] и [move_uploaded_file()] [2] для предотвращения возможных атак с помощью загрузки файлов.

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

0 голосов
/ 13 июля 2010

РЕДАКТИРОВАТЬ: Я только что перекодировал вам целый пример того, как это может легко работать.(в качестве примера используется jquery)

<code><?php
echo '<pre>';
print_r($_POST);

echo '
';?>
...