2010-07-13 5 views
0

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

$ _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 
) 

$ _FILES

 
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 пункты поста сохраняются в одной таблице заголовки и статьи сохраняются в другой таблице (отправляются с идентификатором только что вставленной строки), а затем, наконец, изображения сохраняются, снова отправляются с идентификатором первого сохранения d строка.

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

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> 
+0

Пожалуйста, пришлите фрагмент HTML кода. обычно ключ - это именование полей формы. –

+0

Пожалуйста, см. Мое редактирование –

ответ

0

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

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

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

-1

EDIT: Я просто перекодировать вам весь пример того, как он может легко работать. (Использует 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> 
+0

не совсем уверен, почему вы это сделали, это был вопрос PHP –

+0

, потому что ваш html делает вещи намного сложнее, чем они должны быть. –

0

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

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

Смежные вопросы