2017-05-25 8 views
1

このクラスの2番目のフォームから投稿するのに問題があります。ページの2番目のフォームが機能しない

最初の形式でファイルを正常にアップロードしていますが、これを解析して配列にすることができます。しかし、私がページにエコーする2番目のフォームは、送信時に何もしません。

アイデアはありますか?

ありがとうございます!

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

すべてのフォームデータを同じアクションで送信する場合は、フィールドを1つのフォームにマージする必要があります。フォームタグは、送信されたフォームの外にあるフィールドからデータを除外します。


そうしないと、いずれかのフォームからの応募を傍受するためにJavaScriptを得るような何かをハックかもしれない、と手動の両方のフォームからデータを取得し、JavaScriptを介して受信ファイルにすべてを投稿してください。 (私はこの方法を勧めたいとは思わない)

+0

Hey @mickmackusa - ありがとうございました。 2つの異なるアクションが必要な場合はどうなりますか? – producto

+0

@productoフォームに書き込む属性は重要ではありません。フォームデータは基本的に各フォームブロック内にトラップされます。 – mickmackusa

関連する問題