【问题标题】:Second form in page not working页面中的第二个表单不起作用
【发布时间】:2017-05-25 02:28:48
【问题描述】:

我无法从本课程的第二种表格中发布任何内容。

第一个表单可以很好地上传文件,我可以将它解析成一个数组。但是,我在页面上回显的第二个表单在提交时没有任何作用。

有什么想法吗?

谢谢!

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

    }
}

【问题讨论】:

    标签: php forms http-post form-submit multiple-forms


    【解决方案1】:

    如果您希望通过同一操作发送所有表单数据,则需要将字段合并到一个表单中。表单标签排除了提交表单之外存在的字段中的数据。


    否则,您可能会破解一些东西,例如让 javascript 拦截来自任一表单的提交,并手动从两个表单中提取数据并通过 javascript 将其全部发布到接收文件。 (不过我不认为我会推荐这种方式。)

    【讨论】:

    • 嘿@mickmackusa - 感谢您的信息。如果我想要两个不同的操作怎么办?
    • @producto 在表单中写入什么属性并不重要。表单数据基本上被困在每个表单块中。
    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多