0

I am not new to WordPress but this is the first time I have tried to use the $wpdb.

I have set up a form:

<form method="post" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']);?>" class="email-sub-form">
    <input type="text" name="first-name" value="<?php echo $firstname;?>" placeholder="First Name *" required>
    <input type="text" name="last-name" value="<?php echo $lastname;?>" placeholder="Last Name *" required>
    <input type="email" name="email" value="<?php echo $email;?>" placeholder="Email *" required>
    <input type="checkbox" name="gdpr-consent" id="gdpr-consent" value="1" required><label for="gdpr-consent">I consent to $$$$ using my data for marketing purposes.</label>

    <div class="error-log">
    </div>

    <input type="submit" name="submit" value="Submit">
</form>

My full PHP looks like this:

<?php
    // show errors
    error_reporting(E_ALL);
    ini_set('display_errors', 1);

    global $wpdb;

    // define variables and set to empty values
    $firstNameErr = $lastNameErr = $emailErr = $gdprConsentErr = "";
    $firstname = $lastname = $email = $gdprconsent = "";

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (empty($_POST["first-name"])) {
            $firstNameErr = "First name is required";
        } else {
            $firstname = test_input($_POST["first-name"]);

            // check if name only contains letters and whitespace
            if (!preg_match("/^[a-zA-Z ]*$/",$firstname)) {
                $firstNameErr = "Only letters and white space allowed"; 
            }
        }

        if (empty($_POST["last-name"])) {
            $lastNameErr = "Last name is required";
        } else {
            $lastname = test_input($_POST["last-name"]);

            // check if name only contains letters and whitespace
            if (!preg_match("/^[a-zA-Z ]*$/",$lastname)) {
                $lastNameErr = "Only letters and white space allowed"; 
            }
        }

        if (empty($_POST["email"])) {
            $emailErr = "Email is required";
        } else {
            $email = test_input($_POST["email"]);

            // check if e-mail address is well-formed
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
                $emailErr = "Invalid email format"; 
            }
        }

        if (empty($_POST["gdpr-consent"])) {
            $gdprconsent = "You must give consent";
        } else {
            $gdprconsent = test_input($_POST["gdpr-consent"]);
        }
    }

    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }

    $table = 'wp_email_subscribers';
    $data = array(
        'first_name' => $firstname, 
        'last_name' => $lastname, 
        'email'=> $email , 
        'gdpr_consent'=> $gdprconsent 
    );
    $format = array('%s','%s', '%s', '%s');
    $wpdb->insert($table,$data,$format);
    /*var_dump($wpdb->insert_id);*/
?>

If I var_dump individual column data they appear to collect the correct cleaned data. The value is not submitted to the database.

Can anyone help me clean this up so it will post to the DB.

Thanks, Jason.

0

$wpdb has an insert method, so you can try the following:

$table = 'wp_email_subscribers';
$data = array(
            'first_name' => $firstname, 
            'last_name' => $lastname, 
            'email'=> $email , 
            'gdpr_consent'=>$gdprconsent 
       );
$format = array('%s','%s', '%s', '%s');
$wpdb->insert($table,$data,$format);
var_dump($wpdb->insert_id);
  • Thanks for helping out. I am still unable to get this to post to the DB. I will update my question with my current PHP. Utilising the handy code you've posted. – Jason Is My Name Jan 28 at 11:12
  • @JasonIsMyName If you var_dump( $data ) do you see the correct values? Can you try adding the following after the insert: if($wpdb->last_error !== '') { $wpdb->print_error() } – czerspalace Jan 30 at 18:34

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.