页面中的第二种形式不起作用
Second form in page not working
我无法从这个 class 的第二个表单中获取 post 的任何内容。
第一种形式可以很好地上传文件,我可以将其解析为一个数组。但是,我在页面上回显的第二种形式在提交时没有任何作用。
有什么想法吗?
谢谢!
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);
}
}
如果您希望在同一操作中发送所有表单数据,您需要将字段合并到一个表单中。表单标签排除了提交表单之外的字段中的数据。
否则,您可能会搞砸一些事情,比如让 javascript 拦截来自任一表单的提交,并手动从两个表单中提取数据,然后 POST 通过 [=15] 将其全部发送到接收文件=]. (不过我不认为我会推荐这种方式。)
我无法从这个 class 的第二个表单中获取 post 的任何内容。
第一种形式可以很好地上传文件,我可以将其解析为一个数组。但是,我在页面上回显的第二种形式在提交时没有任何作用。
有什么想法吗?
谢谢!
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);
}
}
如果您希望在同一操作中发送所有表单数据,您需要将字段合并到一个表单中。表单标签排除了提交表单之外的字段中的数据。
否则,您可能会搞砸一些事情,比如让 javascript 拦截来自任一表单的提交,并手动从两个表单中提取数据,然后 POST 通过 [=15] 将其全部发送到接收文件=]. (不过我不认为我会推荐这种方式。)