web-dev-qa-db-fra.com

Comment insérer une seule ligne pour WP table de base de données?

Intro:

J'ai une fonction qui gère les variables d'un formulaire de contact sur mon site Web.

  • l'utilisateur entre son nom, son email et son texte.
  • function.php obtient les variables en utilisant javascript.
  • Je reçois plus d’informations sur l’utilisateur en cours de route - comme les balises IP, Country, UTM, le cas échéant, etc.

Ensuite, j'ai ajouté une partie de code qui enregistre les variables respectivement sur une table SQL.

J'ai créé la table 'wp_contact_form' en utilisant phpMyAdmin.

utilisé cette partie de code dans une fonction:

global $wpdb; 

$wpdb->insert( 
    'wp_contact_form', 
    array( 
        'con_ip'          => $_COOKIE['ip'], 
        'con_name'        => $fullname, 
        'con_email'       => $email, 
        'con_text'        => $message, 
        'con_country'     => $_COOKIE['country'], 
        'con_reigon'      => $_COOKIE['region'], 
        'con_city'        => $_COOKIE['city'], 
        'con_utm_source'  => $_COOKIE['utm_source'], 
        'con_utm_medium'  => $_COOKIE['utm_medium'], 
        'con_utm_campain' => $_COOKIE['utm_campaign'], 
        'con_utm_term'    => $_COOKIE['utm_term'], 
        'con_utm_content' => $_COOKIE['utm_content']
    ), 
    array( 
        '%s', 
        '%s', 
        '%s', 
        '%s', 
        '%s', 
        '%s', 
        '%s', 
        '%s', 
        '%s'
    ) 
);

Et je reçois toujours un tableau vide. J'ai essayé de suivre ceci: https://codex.wordpress.org/Class_Reference/wpdb#INSERT_rows

sans aucun succès.

structure de la base de données: http://i.stack.imgur.com/kQ8oZ.png enter image description here 

Code de fonction complet:

/**
    Contact form using Ajax 
**/ 

add_action('wp_ajax_nopriv_submit_contact_form', 'submit_contact_form'); 

// Send information from the contact form 
function submit_contact_form(){

    // Get the UTM variables from the 'get_the_utm_vars()' function
    //$utm = get_the_utm_vars();

    // If there is a $_POST['email']...
    if( isset($_POST['email']) && ($_POST['validation'] == true ) ) {

        // Get parameters
        $email = $_POST['email']; // Gets the email of the user..
        $email_to = "arik@ example.pro";
        $utm_emails = array(
            'tova@ example.pro',
            'yonatan@ example.pro', 
            'arik@ example.pro',
            'gal@ example.pro',  
            'shai@ example.pro',  
            'walid@ example.pro'        
            );
        $fullname = $_POST['fullname'];
        $message = $_POST['text']; 
        $email_subject = " example Intro: $email";      
        $headers = array(
                'From: '. $fullname .' <'. $email .'>', 
                'BCC:  yonatan@ example.pro', 
                'BCC:  gal@ example.pro', 
                'BCC:  eran@ example.pro', 
                'BCC:  tova@ example.pro', 
                'BCC:  walid@ example.pro', 
                'Content-type: text/html; charset=\"UTF-8\"; format=flowed \r\n'
            ); 
        $utm_headers = array(
            'From: '. $fullname .' <'. $email .'>'
            );


        // Send email to YH, and if sent - do:
        if ( wp_mail($email_to,$email_subject,$message,$headers) ) {

            // Tells me that the mail has been sent
            echo json_encode( array("result"=>"complete") );

            //Add the UTM variables to the emails text
            $message .= "\r\n \r\n \r\n IP: ". $_COOKIE['ip'] ."\r\n Country: ". $_COOKIE['country'] ."\r\n Region: ". $_COOKIE['region'] ."\r\n City: ". $_COOKIE['city'] ." \r\n UTM Source: ".$_COOKIE['utm_source']." \r\n UTM Medium: ".$_COOKIE['utm_medium']." \r\n UTM Campaign: ".$_COOKIE['utm_campaign']."\r\n UTM Term: ".$_COOKIE['utm_term']." \r\n UTM Content: ".$_COOKIE['utm_content']." ";
            // A mail for tova with the UTM paramseters
            wp_mail($utm_emails,$email_subject,$message,$utm_headers);


        } else {
            echo json_encode(array("result"=>"mail_error"));
            var_dump($GLOBALS['phpmailer']->ErrorInfo);
    }
        wp_die();
    }










    global $wpdb; 

    $wpdb->insert( 
        'wp_contact_form', 
        array( 
            'con_ip'          => $_COOKIE['ip'], 
            'con_name'        => $fullname, 
            'con_email'       => $email, 
            'con_text'        => $message, 
            'con_country'     => $_COOKIE['country'], 
            'con_reigon'      => $_COOKIE['region'], 
            'con_city'        => $_COOKIE['city'], 
            'con_utm_source'  => $_COOKIE['utm_source'], 
            'con_utm_medium'  => $_COOKIE['utm_medium'], 
            'con_utm_campain' => $_COOKIE['utm_campaign'], 
            'con_utm_term'    => $_COOKIE['utm_term'], 
            'con_utm_content' => $_COOKIE['utm_content']
        ), 
        array( 
            '%s', 
            '%s', 
            '%s', 
            '%s', 
            '%s', 
            '%s', 
            '%s', 
            '%s', 
            '%s'
        ) 
    );







}
1
Kar19

Dans votre code, si un courrier électronique est défini et validé (ce qui, je suppose, devrait être le cas normal), votre code se terminera à wp_die () et n'atteindra jamais $ wpdb-> insert.

Votre déclaration $ wpdb-> insert ne sera jamais atteinte que si un email n'est pas défini ou si "validation" est faux.

Vous voudrez peut-être vous débarrasser complètement de l'appel wp_die () ou placer cet appel à la toute fin de votre fonction, selon vos besoins.

En dehors de cela, essayez de déterminer si votre fonction est appelée (vous pouvez avoir un problème avec l'appel AJAX lui-même).

1
Phil R.