2017-05-25 5 views
1

Je n'arrive pas à écrire quoi que ce soit à partir de la deuxième forme de cette classe.La deuxième forme de la page ne fonctionne pas

Le premier formulaire télécharge le fichier correctement, et je suis capable de l'analyser en un tableau. Cependant, la deuxième forme que j'échoue sur la page ne fait rien sur soumettre.

Vous avez des idées?

Merci!

public function __construct() { 
    add_action('admin_menu', array($this, 'asbcb')); 
} 

function asbcb() { 
    $page_title = 'Build'; 
    $menu_title = 'Build'; 
    $capability = 'manage_options'; 
    $menu_slug = 'build'; 
    $function = array($this, 'sbcb'); 
    add_management_page($page_title,$menu_title,$capability,$menu_slug,$function); 
} 

function sbcb() { 
    $output = ''; 
    $output .= '<form id="upload" action="" method="post" enctype="multipart/form-data">'; 
    $output .= '<p><input type="file" name="file"></p>'; 
    $output .= get_submit_button("Upload","primary","upload"); 
    $output .= '</form>'; 
    echo $output; 
    $this->upload(); 
} 

function upload() { 
    if(isset($_POST['upload']) && ! empty($_FILES)) { 
     $file = $_FILES['file']; 
     $dir = plugin_dir_path(__FILE__); 
     $path = $dir.'pages/'; 
     if(!is_dir($path)) mkdir($path); 
     $url = $path.$file['name']; 
     $uploaded = move_uploaded_file($file['tmp_name'], $path.$file['name']); 
     if ($uploaded) { 
      $this->parse_CSV($url); 
     } else { 
      print_r($file['error']); 
     } 
    } 
} 

function parse_csv($csv) { 
    $columns = array(); 
    if (($handle = fopen($csv, "r")) !== FALSE) { 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
      $num = count($data); 
      $columns[] = $data; 
     } 
     fclose($handle); 
    } 
    $this->fields(); 
} 

function fields(){ 
    $output = ''; 
    $output .= '<form id="build" action="" method="post">'; 
    $output .= '<select class="fields" name="fields[]">'; 
    $output .= '<option value="title">Title</option>'; 
    $output .= '<option value="slug">Slug</option>'; 
    $output .= '<option value="metatitle">Meta title</option>'; 
    $output .= '<option value="metadesc">Meta description</option>'; 
    $output .= '<option value="template">Template</option>'; 
    $output .= '<option value="metakey">Meta key</option>'; 
    $output .= '<option value="metavalue">Meta value</option>'; 
    $output .= '</select> '; 
    $output .= get_submit_button("Build","primary","build"); 
    $output .= '</form>'; 
    echo $output; 
    $this->fields_to_array(); 
} 

function fields_to_array() { 
    if (isset($_POST['fields'])) { 
     $fields = $_POST['fields']; 
     var_dump($fields); 

    } 
} 

Répondre

1

Si vous voulez que toutes les données de formulaire à envoyer sur la même action, vous aurez besoin de fusionner les champs en une seule forme. Les balises de formulaire excluent les données des champs qui existent en dehors du formulaire soumis.


Sinon, vous pourriez pirater quelque chose comme obtenir le javascript pour intercepter les communications des deux formes, et tirer manuellement les données des deux formes et POST tout le fichier de réception via javascript. (Je ne pense pas que je recommanderais de cette façon si.)

+0

Hey @mickmackusa - Merci pour l'info. Que faire si je veux deux actions différentes? – producto

+0

@producto Peu importe les attributs que vous écrivez dans les formulaires. Les données de formulaire sont essentiellement piégées dans chaque bloc de formulaire. – mickmackusa