2016-12-20 6 views
0

J'essaie de passer des tableaux d'un formulaire à PHP, et tout fonctionne bien jusqu'à ce que dans le fichier php, il atteint la boucle Foreach, à l'intérieur il ne tourne qu'une seule fois (sur tous les autres cycles de boucle var_dump donne NULL).Passer des tableaux de formulaires HTML à PHP, puis à WordPress

HTML:

<div id="dynamicInput"> 
       <div class="project"> 
        <span>Project images</span> <input id="pr_img" multiple type='file' name='my_file_upload0[]'></br> 
         <input id="pr_name" type='text' placeholder='Project name' name='pname[]'> 
         <textarea id="pr_desc" cols="40" rows="8" placeholder='Project description' name='pdescr[]'></textarea> 
       </div> 


      <script> 
      var counter = 1; 
      var limit = 99; 
      function addInput(divName){ 
       if (counter == limit) { 
         alert("You have reached the limit of adding " + counter + " inputs"); 
       } 
       else { 
         var newdiv = document.createElement('div'); 
         newdiv.className = "project"; 
         newdiv.innerHTML = " <span>Project images</span> <input multiple id='pr_img' type='file' name='my_file_upload" + counter + "[]'></br><input id='pr_name' type='text' placeholder='Project name' name='pname[]'> <textarea cols='40' rows='8' type='text' id='pr_desc' placeholder='Project description' name='pdescr[]'></textarea>"; 
         document.getElementById(divName).appendChild(newdiv); 
         counter++; 
       } 
      } 
     </script> 

      </div> 

PHP:

require_once(ABSPATH . 'wp-admin/includes/image.php'); 
     require_once(ABSPATH . 'wp-admin/includes/file.php'); 
     require_once(ABSPATH . 'wp-admin/includes/media.php'); 


     $combo = array_combine($_POST[pname], $_POST[pdescr]); 

     $countt=0; 

     foreach ($combo as $nam => $descri) { 

        $projectid =wp_insert_post(array(
     'post_title'  => $nam, 
     'post_type'  => 'Projects', 
     'comment_status' => 'closed', 
     'ping_status' => 'closed', 
     'post_content' => $descri, 
     'post_status' => 'publish', 
     'post_author' => $userrid, 
     'menu_order'  => 0, 

    )); 
/*---------------------This is the place where it doesnt work------------*/ 

       $files = $_FILES["my_file_upload".$countt.""]; 
        ++$countt; 

/*-----------------------------------------------------------------------*/    
       foreach ($files['name'] as $key => $value) { 
          if ($files['name'][$key]) { 
           $file = array( 
            'name' => $files['name'][$key], 
            'type' => $files['type'][$key], 
            'tmp_name' => $files['tmp_name'][$key], 
            'error' => $files['error'][$key], 
            'size' => $files['size'][$key] 
           ); 
           $_FILES = array ("my_image_upload" => $file); 
         //var_dump($_FILES); 
           foreach ($_FILES as $file => $array) {    
            // $newupload = my_handle_attachment($file,$post_id); 
          $attach_id = media_handle_upload($file, 0); 


           } 

          } 
          unset($files); 
         } 

        add_post_meta($projectid, 'project_pics', $attach_id, true); 
        if (is_wp_error($attachment_id)) { 
        echo "Error while uploading images"; 
        } else { 


        } 

}

EDIT: $ _FILES contenu du tableau:

["my_file_upload0"]=> 
    array(5) { 
    ["name"]=> 
array(2) { 
    [0]=> 
    string(6) "bg.bmp" 
    [1]=> 
    string(6) "bg.png" 
} 
["type"]=> 
array(2) { 
    [0]=> 
    string(9) "image/bmp" 
    [1]=> 
    string(9) "image/png" 
} 
["tmp_name"]=> 
array(2) { 
    [0]=> 
    string(38) "/customers/c/e/b/********/phpO2lni7" 
    [1]=> 
    string(38) "/customers/c/e/b/********/phpcIObqF" 
} 
["error"]=> 
array(2) { 
    [0]=> 
    int(0) 
    [1]=> 
    int(0) 
} 
["size"]=> 
array(2) { 
    [0]=> 
    int(64) 
    [1]=> 
    int(10946) 
    } 
} 
["my_file_upload1"]=> 
array(5) { 
["name"]=> 
array(2) { 
    [0]=> 
    string(12) "job-icon.png" 
    [1]=> 
    string(8) "nova.png" 
} 
["type"]=> 
array(2) { 
    [0]=> 
    string(9) "image/png" 
    [1]=> 
    string(9) "image/png" 
} 
["tmp_name"]=> 
array(2) { 
    [0]=> 
    string(38) "/customers/c/e/b/********/phpZKskyd" 
    [1]=> 
    string(38) "/customers/c/e/b/********/phpbMlgIL" 
} 
["error"]=> 
array(2) { 
    [0]=> 
    int(0) 
    [1]=> 
    int(0) 
} 
["size"]=> 
array(2) { 
    [0]=> 
    int(15213) 
    [1]=> 
    int(10906) 
} 
+0

Veuillez lire [Comment fonctionne l'acceptation d'une réponse?] (Http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work). Mettez des solutions dans les réponses, pas dans les questions. – Quentin

Répondre

1

Regardez le contenu du $_FILES. Je suppose que vous verrez que my_file_upload0, où, comme dans la boucle que vous essayez de boucle à travers my_file_upload0, my_file_upload1, my_file_upload2 etc.

Vous devez boucle à travers $_FILES['my_file_upload0'] lui-même, comme cela devrait être un tableau contenant tous les fichiers sélectionnés dans l'entrée de fichier sur votre formulaire.

foreach($_FILES['my_file_upload0'] as $key => $files) { 
     // Code 
    } 

Edition - Je vous recommande vraiment changer le nom de my_file_upload0 juste my_file_upload - pour plus de clarté. Deuxième modification -J'ai répliqué ce que vous faites avec le tableau fourni ici - http://phpfiddle.org/main/code/j88g-i2ci Cela passe deux fois par la boucle for sans problème.

+1

+1 sur l'édition, faites toutes les entrées du fichier 'my_file_upload []', puis 'foreach ($ _FICHES ['mon_fichier_upload'] comme $ key => $ files) {...' devrait fonctionner – Stu

+0

Vous avez tous les deux raison, mais je pense que ce n'est pas le cas. Dans le formulaire html j'ai un script js pour créer autant de nouveaux éléments que les utilisateurs veulent (max 99, chaque élément sera un nouveau post personnalisé dans Wordpress), donc pour les différencier, j'utilise my_file_upload ** 0 **, my_file_upload * * 1 ** et ainsi de suite. À l'intérieur de $ _FILES tout va bien, je peux voir toutes les images que j'ai téléchargées, mais le problème principal reste. Foreach ne boucle qu'une seule fois –

+0

@AndriusMotuzas Pourriez-vous poster un exemple du contenu de $ _FILES dans votre question initiale? – Tom

0

(Affiché au nom de l'OP).

Probablement le tableau $ _FILES a été écrasé, car il a été mentionné deux fois. Après avoir changé de nom, il a commencé à fonctionner, en plus il y avait quelques erreurs logiques.