PHP – how do i stop my loop to register data twice?

I am facing a problem here.

The code below is running on my site and when i fill in the form and check my database the data has been registered twice.

Read More

Please the the following php code from my functions.php file.

function map_location_report_form()
{

    global $wpdb;

    $this_page  =   $_SERVER['REQUEST_URI'];
    $page       =   $_POST['page'];

    if ( $page == NULL )
    {
        echo '<form method="post" action="' . $this_page .'">

                <div class="formfield-report" id="formfield-report-firstname">
                    <label for="first_name" id="first_name">Navn: </label>
                    <input type="text" name="first_name" id="first_name" />
                </div>

                <div class="formfield-report" id="formfield-report-lastname">
                    <label for="last_name" id="last_name">Efternavn: </label>
                    <input type="text" name="last_name" id="last_name" />
                </div>

                <div class="formfield-report" id="formfield-report-locationtype">
                    <label for="location_type" id="location_type">Rapport type: </label>
                    <select name="location_type" />
                        <option value="sigtmelding" selected>Sigtmelding</option>
                        <option value="fangstrapport">Fangstrapport</option>
                        <option value="jagtomraade">Jagtområde</option>
                    </select>
                </div>

                <div class="formfield-report" id="formfield-report-latitude">
                    <label for="location_latitude" id="location_latitude">Breddegrad: </label>
                    <input type="text" name="location_latitude" id="location_latitude" />
                </div>

                <div class="formfield-report" id="formfield-report-longitude">
                    <label for="location_longitude" id="location_longitude">Længdegrad: </label>
                    <input type="text" name="location_longitude" id="location_longitude" />
                </div>

                <input type="hidden" value="0" name="page" />

                <div id="formfield-report-button">
                    <input class="btn btn-default submit-form-button" type="Submit" />
                </div>

        </form>';
    } //End Page 1 of Form
    // Start Page 2 of Form
    elseif ( $page == 0 )
    {
        $first_name             =   $_POST['first_name'];
        $last_name              =   $_POST['last_name'];
        $location_type          =   $_POST['location_type'];
        $location_latitude      =   $_POST['location_latitude'];
        $location_longitude     =   $_POST['location_longitude'];
        $page                   =   $_POST['page'];

        $page_one_table = 'maplocationreports';

        $page_one_inputs =  array
        (
            'first_name'            => $first_name,
            'last_name'             => $last_name,
            'location_type'         => $location_type,
            'location_latitude'     => $location_latitude,
            'location_longitude'    => $location_longitude,
            'page'                  => $page
        );

        $insert_page_one = $wpdb->insert($page_one_table, $page_one_inputs);

        echo '<h3>Mange tak for dit bidrag!</h3>';
        echo '<p>Der er sat stor pris på at du har taget dig tid til at registrere et punkt på kortet!</p>';
    } // End Page 2 of Form
};

add_shortcode('map_location_report','map_location_report_form');`

How do i stop this code from registering the data twice?

Thanks in advance!

Related posts

Leave a Reply

3 comments

  1. wrap your add_shortcode() method inside init action

    add_action('init', 'my_function');
    
    function my_function(){
        add_shortcode('map_location_report','map_location_report_form');`
    } 
    
  2. For some reason the form is registering data once when it run in the header as seen here:

    add_action('init', 'map_location_report_form');
    
    function map_location_report_form()
    {
        global $wpdb;
    
        $this_page  =   $_SERVER['REQUEST_URI'];
        $page       =   $_POST['page'];
    
        if ( $page == NULL ) 
        {
            echo '<form method="post" action="' . $this_page .'">
    
                    <div class="formfield-report" id="formfield-report-firstname">
                        <label for="first_name" id="first_name">Navn: </label>
                        <input type="text" name="first_name" id="first_name" />
                    </div>
    
                    <div class="formfield-report" id="formfield-report-lastname">
                        <label for="last_name" id="last_name">Efternavn: </label>
                        <input type="text" name="last_name" id="last_name" />
                    </div>
    
                    <div class="formfield-report" id="formfield-report-locationtype">
                        <label for="location_type" id="location_type">Rapport type: </label>
                        <select name="location_type" />
                            <option value="sigtmelding" selected>Sigtmelding</option>
                            <option value="fangstrapport">Fangstrapport</option>
                            <option value="jagtomraade">Jagtområde</option>
                        </select>
                    </div>
    
                    <div class="formfield-report" id="formfield-report-latitude">
                        <label for="location_latitude" id="location_latitude">Breddegrad: </label>
                        <input type="text" name="location_latitude" id="location_latitude" />
                    </div>
    
                    <div class="formfield-report" id="formfield-report-longitude">
                        <label for="location_longitude" id="location_longitude">Længdegrad: </label>
                        <input type="text" name="location_longitude" id="location_longitude" />
                    </div>
    
                    <input type="hidden" value="0" name="page" />
    
                    <div id="formfield-report-button">
                        <input class="btn btn-default submit-form-button" type="Submit" />
                    </div>
    
            </form>';           
        } //End Page 1 of Form
        // Start Page 2 of Form
        elseif ( $page == 0 ) 
        {
            $first_name             =   $_POST['first_name'];
            $last_name              =   $_POST['last_name'];    
            $location_type          =   $_POST['location_type'];
            $location_latitude      =   $_POST['location_latitude'];
            $location_longitude     =   $_POST['location_longitude'];
            $page                   =   $_POST['page'];
    
            $page_one_table = 'maplocationreports';
    
            $page_one_inputs =  array
            (
                'first_name'            => $first_name,
                'last_name'             => $last_name,
                'location_type'         => $location_type,
                'location_latitude'     => $location_latitude,
                'location_longitude'    => $location_longitude,
                'page'                  => $page
            );
    
            $insert_page_one = $wpdb->insert($page_one_table, $page_one_inputs);
    
            echo '<h3>Mange tak for dit bidrag!</h3>';
            echo '<p>Der er sat stor pris på at du har taget dig tid til at registrere et punkt på kortet!</p>';                
        } // End Page 2 of Form
    };´
    

    but is registering data twice when run on the page using the do_action function on the page template:

    <?php do_action('map_location_form'); ?>
    

    …and the code within functions.php as seen here:

    add_action('map_location_form', 'map_location_report_form');
    
    function map_location_report_form()
    {
        global $wpdb;
    
        $this_page  =   $_SERVER['REQUEST_URI'];
        $page       =   $_POST['page'];
    
        if ( $page == NULL ) 
        {
            echo '<form method="post" action="' . $this_page .'">
    
                    <div class="formfield-report" id="formfield-report-firstname">
                        <label for="first_name" id="first_name">Navn: </label>
                        <input type="text" name="first_name" id="first_name" />
                    </div>
    
                    <div class="formfield-report" id="formfield-report-lastname">
                        <label for="last_name" id="last_name">Efternavn: </label>
                        <input type="text" name="last_name" id="last_name" />
                    </div>
    
                    <div class="formfield-report" id="formfield-report-locationtype">
                        <label for="location_type" id="location_type">Rapport type: </label>
                        <select name="location_type" />
                            <option value="sigtmelding" selected>Sigtmelding</option>
                            <option value="fangstrapport">Fangstrapport</option>
                            <option value="jagtomraade">Jagtområde</option>
                        </select>
                    </div>
    
                    <div class="formfield-report" id="formfield-report-latitude">
                        <label for="location_latitude" id="location_latitude">Breddegrad: </label>
                        <input type="text" name="location_latitude" id="location_latitude" />
                    </div>
    
                    <div class="formfield-report" id="formfield-report-longitude">
                        <label for="location_longitude" id="location_longitude">Længdegrad: </label>
                        <input type="text" name="location_longitude" id="location_longitude" />
                    </div>
    
                    <input type="hidden" value="0" name="page" />
    
                    <div id="formfield-report-button">
                        <input class="btn btn-default submit-form-button" type="Submit" />
                    </div>
    
            </form>';           
        } //End Page 1 of Form
        // Start Page 2 of Form
        elseif ( $page == 0 ) 
        {
            $first_name             =   $_POST['first_name'];
            $last_name              =   $_POST['last_name'];    
            $location_type          =   $_POST['location_type'];
            $location_latitude      =   $_POST['location_latitude'];
            $location_longitude     =   $_POST['location_longitude'];
            $page                   =   $_POST['page'];
    
            $page_one_table = 'maplocationreports';
    
            $page_one_inputs =  array
            (
                'first_name'            => $first_name,
                'last_name'             => $last_name,
                'location_type'         => $location_type,
                'location_latitude'     => $location_latitude,
                'location_longitude'    => $location_longitude,
                'page'                  => $page
            );
    
            $insert_page_one = $wpdb->insert($page_one_table, $page_one_inputs);
    
            echo '<h3>Mange tak for dit bidrag!</h3>';
            echo '<p>Der er sat stor pris på at du har taget dig tid til at registrere et punkt på kortet!</p>';                
        } // End Page 2 of Form
    };
    

    Is there a solution to have the form on the page without it registering the data twice?