2017-05-25 129 views
1

我無法從此類的第二個表單中獲取任何內容。頁面中的第二個表單不起作用

第一種形式上傳文件很好,我可以將它解析成一個數組。然而,我在頁面上回顯的第二種形式在提交時不做任何處理。

有什麼想法嗎?

謝謝!

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

    } 
} 

回答

1

如果您希望所有表單數據在同一個動作上發送,則需要將這些字段合併爲一個表單。表單標籤將數據從提交表單之外的字段中排除。


否則,你可能入侵的東西像讓JavaScript來攔截從以下兩種方式提交,並從兩種形式的人工提取數據,並通過JavaScript它所有的POST到接收文件。 (雖然我不認爲我會推薦這種方式。)

+0

嘿@mickmackusa - 感謝您的信息。如果我想要兩種不同的動作呢? – producto

+0

@producto您寫入表單的屬性無關緊要。表單數據基本上被困在每個表單塊中。 – mickmackusa

相關問題