如何检查我的$wpdb->Insert()是否成功?

时间:2016-07-20 作者:vcamargo

我想在我的footer.php (稍后我会将其转换为插件),将两个表单字段发送到自定义表(wp_newsletter). 我已经在正确地发送表单并将其写入表中,但我不知道如何将成功或失败消息发送回用户。我当前的代码如下:

<form method="post">
  <input type="text" name="user_name">Name
  <input type="text" name="user_email">Email
  <input type="submit">
  <?php echo $message;  ?>
</form>

<?php
global $wpdb;
$table   = $wpdb->prefix . "newsletter";
$name    = sanitize_text_field( $_POST["user_name"] );
$email   = sanitize_email( $_POST["user_email"] );
$message = "";


if( isset($_POST["submit"]) ) {
  if ( is_email($email) && isset($name)) {
    if ( $wpdb->insert( $table, array("name"  => $name, "email" => $email)) != false ) {
      $message = "Your subscription was sent.";
    }
  }
  else {
    if ( !is_email($email) ) {
        $message = "Invalid email address.";
    } elseif ( !isset($name) ) {
        $message = "The field name is mandatory.";
    } else {
        $message = "Both name and email fields are mandatory.";
    }
  }
} else {
    $message = "Please, try again later.";
}
?>


<?php wp_footer(); ?>

</body>
</html>
根据$wpdb 文件说明:

如果无法插入行,此函数将返回false。否则,它将返回受影响的行数(始终为1)。

3 个回复
SO网友:Hiren Siddhpura

它返回插入的行数或错误时返回false。

如果插入失败,您可能会获得插入的重新编码id或false:

refer link: https://developer.wordpress.org/reference/classes/wpdb/insert/#return

因此,您可以进行如下检查:

$result_check = $wpdb->insert( $table, array("name"  => $name, "email" => $email));
if($result_check){
   //successfully inserted.
}else{
  //something gone wrong
}

SO网友:scott

当我意识到PHP是“PHP超文本预处理器”的首字母缩略词时(强调“预处理器”),我终于明白我不能将PHP和HTML混合在一起,而期望与用户进行任何形式的交互。当提供web页面时,PHP创建HTML,然后通过浏览器显示HTML。如果用户做了PHP必须响应的事情must 触发一个新的PHP/HTML页面以提供某种响应。(另一种方法是使用AJAX在不加载新页面的情况下来回发送数据。Wordpress与AJAX配合得很好,还有一些教程可以在google上搜索。)

对于像您这样的简单表单,我将使用javascript进行错误检查。如果表单未填写,请阻止使用JS提交表单。如果表单已完成,则表单的操作可以是。php文件,用于插入数据库并以HTML格式显示成功/失败消息。

SO网友:luke_mclachlan

我通过google来到这里,帮助我的是使用$wpdb对象的属性:

$wpdb->last_error 
显示最后一个错误(如果存在)

$wpdb->last_query 
显示出现上述错误的最后一个查询