2017-05-25 3 views
1

Ich habe Probleme, etwas von der zweiten Form in dieser Klasse zu buchen.Zweites Formular in Seite funktioniert nicht

Das erste Formular lädt die Datei in Ordnung, und ich kann es in ein Array analysieren. Die zweite Form, die ich auf der Seite widerspreche, tut jedoch nichts beim Senden.

Haben Sie irgendwelche Ideen?

Danke!

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

    } 
} 

Antwort

1

Wenn Sie alle Formulardaten wollen auf der gleichen Aktion gesendet werden sollen, müssen Sie die Felder in einer einzigen Form verschmelzen. Die Formulartags schließen Daten von Feldern aus, die außerhalb des übermittelten Formulars existieren.


Andernfalls könnten Sie etwas zerhacken wie Javascript, bekommen die Eingaben entweder von Form abzufangen und manuell Daten aus beiden Formen ziehen und sie alle zu empfangenden Datei über Javascript Post. (Ich denke nicht, dass ich diese Art aber empfehlen würde.)

+0

Hey @mickmackusa - Danke für die Info. Was ist, wenn ich zwei verschiedene Aktionen möchte? – producto

+0

@producto Es spielt keine Rolle, welche Attribute Sie in die Formulare schreiben. Die Formulardaten sind grundsätzlich in jedem Formularblock gefangen. – mickmackusa