使用$wpdb->查询帮助在提交时将值过帐到数据库

时间:2019-01-25 作者:Jason Is My Name

我对WordPress并不陌生,但这是我第一次尝试使用$wpdb。

我已经设置了一个表单:

<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>
我的完整PHP如下所示:

<?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);*/
?>
如果I var\\u转储单个列数据,它们似乎会收集正确的已清理数据。该值未提交到数据库。

谁能帮我清理一下,这样它就可以发布到数据库了。

谢谢,杰森。

1 个回复
SO网友:czerspalace

$wpdb具有insert 方法,因此您可以尝试以下操作:

$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);