2010-07-13 5 views
0

Je travaille sur un projet en ce moment, qui permet à l'utilisateur de créer un nombre illimité de titres, articles et images, la seule règle avec ce système est qu'un article doit contenir un article et une image. Ma question est sur mon formulaire quand je soumets je reçois 2 tableaux l'un est le $_POST et l'autre est $_FILES.Fusion de tableaux 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 
    ) 

) 

) 

Fondamentalement, le procédé après avoir soumis la forme est que les données sont enregistrées dans une base de données, les 3 éléments du poste sont enregistrées dans une table, les titres et les articles sont sauvegardés dans une autre table (envoyé avec l'identifiant de la ligne juste insérée) et enfin les images sont sauvegardées, à nouveau envoyées avec l'identifiant de la première sauvegarde d rangée. J'ai de la difficulté à comprendre comment je m'assure que les bonnes images sont sauvegardées avec le bon ID, les sauvegardes de DB sont faites en faisant défiler les titres et les articles, mais comme les images sont dans un tableau différent, je ne peux pas le faire et Assurez-vous qu'ils sont enregistrés avec le droit étranger, puis-je fusionner les fichiers dans le post? À l'heure actuelle la solution que j'ai pour les titres et articles est-ce,

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

Est-il loin pour moi de travailler avec des images en même temps?

EDIT:

Le formulaire 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

S'il vous plaît, envoyez un fragment de code HTML. généralement, la clé est la dénomination des champs de formulaire. –

+0

S'il vous plaît voir mon édition –

Répondre

0

Avec la même clé que vous utilisez pour accéder au sous-groupe articles, vous pouvez accéder aux différents champs du tableau $ _FILES. Évidemment, vous pouvez fusionner les deux tableaux, mais vous n'avez pas besoin de travailler avec eux.

En outre, vous devez noter que vous devez copier les données réelles de l'emplacement temporaire vers l'endroit où vous souhaitez le stocker de façon permanente. Assurez-vous d'utiliser les méthodes [is_uploaded_file()] [1] et [move_uploaded_file()] [2] pour éviter les attaques potentielles via les téléchargements de fichiers.

[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: Je viens de vous recodé un exemple toute la façon dont il pourrait facilement travailler. (Utilise jquery comme exemple)

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

pas tout à fait sûr pourquoi vous avez fait cela, c'était une question PHP –

+0

parce que votre code HTML rend les choses beaucoup plus dur qu'ils doivent être. –

0

Je ne suis pas sûr que vous voulez fusionner les deux tableaux, que vous devez effectuer différentes actions sur chaque tableau. Avec le tableau $ _FILES, les images téléchargées seront stockées dans un emplacement temporaire, les images doivent être déplacées vers un emplacement plus permanent avant d'être référencées dans votre base de données.