0

I am making a csv exporter plugin for my own need. But the problem I have is that, it download whole page as html when I click Export button. Here is my code. Please help me to slove this problem. This script work perfectly as a php application. Thanks in advance!

<?php
/*
    CSV Exporter

*/

add_action('admin_menu','jsrmsp_csv_export_menu');

add_action('admin_init','jsrmsp_csv_export_main');

/* Csv Export Menu */

function jsrmsp_csv_export_menu(){

    add_submenu_page( 'edit.php?post_type=jsrmsp_sr', 'Export CSV', 'Export CSV', 'manage_options', 'jsrmsp_csv_export_page', 'jsrmsp_csv_export_admin_page' );

}


function jsrmsp_csv_export_main(){
    if( isset( $_POST['csves'] ) ){
        /* CSV Exporter function */

        // output headers so that the file is downloaded rather than displayed
        //header('Content-Type: text/csv; charset=utf-8');
        header('Content-type: application/csv');


        //header('Cache-Control: no-cache, must-revalidate');
        //header('Pragma: no-cache');
        //header('Expires: 0');

        header('Content-Disposition: attachment; filename=data.csv');

        // create a file pointer connected to the output stream
        $output = fopen('php://output', 'w');

        // output the column headings
        fputcsv($output, array('Name', 'Profession', 'Phone'));

        // fetch the data
        mysql_connect('localhost', 'root', '');
        mysql_select_db('csv-exporter');
        $rows = mysql_query('SELECT name,profession,phone FROM records');

        // loop over the rows, outputting them
        while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);
    }
}


function jsrmsp_csv_export_admin_page() { ?>


    <div class="wrap">
        <!-- Some inline style -->
        <style type="text/css">
            .jsrmsp-m-title {
              margin: 0 !important;
              padding: 8px 12px !important;
            }

            .csvcol {
              float: left;
              width: 25%;
            }
        </style>

        <?php
            // Check form is submited

            if( isset( $_POST['csves'] ) ){
                jsrmsp_csv_export_main();
            ?>
                <div id="jsrmsp-imload" class="updated fade">

                    <p><img style="height: 15px; vertical-align: middle;" src="<?php echo plugin_dir_url(__FILE__); ?>../assets/images/loader.gif" alt="" />Please wait...</p>

                </div>
            <?php }
        ?>


    </div><!-- end wrap -->

    <div class="wrap">
        <h2><?php _e('Export CSV'); ?></h2>

        <!-- Ajax Response Message -->
        <div class="ajax-response-message">

        </div>

        <div id="dashboard-widgets-wrap">
            <div class="metabox-holder" id="dashboard-widgets">

                <div id="postbox-container" class="postbox-container">
                    <div id="side-sortables" class="meta-box-sortables ui-sortable"><div style="display: block;" id="dashboard_quick_press" class="postbox ">
                    <div class="handlediv"><br></div><h3 class="hndle jsrmsp-m-title" style="cursor: default;"><span><span class="hide-if-no-js">Export Csv File</span></span></h3>
                    <div style="overflow: hidden;" class="inside">

                        <form id="jsrmsp-export" class="jsrmsp-import" action="" method="post">

                            <div style="margin: 10px 0; overflow: hidden;" class="input-text-wrap">
                                <div class="csvcol">
                                    <?php
                                        // Exam Class term
                                        $terms = get_terms('classes');
                                        if(!empty($terms) &&!is_wp_error($terms)) { ?>
                                            <select name="class" id="class" required>
                                            <option value=""><?php _e('Select Exam','jsrmsp-td'); ?></option>';
                                            <?php

                                                foreach($terms as $term) {
                                                    echo '<option value="'.$term->name.'">'.$term->name.'</option>';
                                                }
                                            ?>
                                                </select>
                                        <?php }
                                    ?>
                                </div>

                                <div class="csvcol">
                                    <?php
                                        // Exam Year Term
                                        $terms = get_terms('years');
                                        if(!empty($terms) &&!is_wp_error($terms)) { ?>
                                            <select name="year" id="year" required>
                                            <option value=""><?php _e('Select Year','jsrmsp-td'); ?></option>
                                            <?php
                                                foreach($terms as $term) {
                                                    echo '<option value="'.$term->name.'">'.$term->name.'</option>';
                                                }
                                            ?>
                                            </select>
                                        <?php }
                                    ?>
                                </div>

                                <div class="csvcol">
                                    <?php
                                        // Exam Section Term
                                        $terms = get_terms('sections');
                                        if(!empty($terms) &&!is_wp_error($terms)) { ?>
                                            <select name="section" id="section">
                                            <option value=""><?php _e('Select Section','jsrmsp-td'); ?></option>
                                            <?php
                                                foreach($terms as $term) {
                                                    echo '<option value="'.$term->name.'">'.$term->name.'</option>';
                                                }
                                            ?>
                                            </select>
                                        <?php }
                                    ?>
                                </div>

                                <div class="csvcol">
                                    <?php
                                        // Exam Groups Term
                                        $terms = get_terms('groups');
                                        if(!empty($terms) &&!is_wp_error($terms)) { ?>
                                            <select name="group" id="group">
                                            <option value=""><?php _e('Select Group','jsrmsp-td'); ?></option>
                                            <?php
                                                foreach($terms as $term) {
                                                    echo '<option value="'.$term->name.'">'.$term->name.'</option>';
                                                }
                                            ?>
                                            </select>
                                        <?php }
                                    ?>
                                </div>

                            </div>



                            <p class="submit">
                                <input name="csves" id="csves" class="button button-primary" value="Export" type="submit">
                            </p>

                        </form>
                    </div>
                    </div>
                    </div>  
                </div>


            </div>
        </div>



    </div>

<?php }
?>
2

Seems like you do not die after you generate the CSV which meas that wordpress will continue to generate whatever is the relevant admin HTML after it had generated the CSV.

  • Ha ha ha, "you do not die" - should've said pun intended ;) – Scott Mar 9 '17 at 3:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.