WordPress插入查询不工作:未显示错误

时间:2019-04-18 作者:gaurav mishra

无法将表单数据插入表中,我也尝试了其他方法。下面是代码。

<?php /* Template Name: The custom email */ ?>
<?php get_header(); ?>
<?php 
$sql =  "CREATE TABLE IF NOT EXISTS " . $wpdb->prefix.credofy_contact_form. " (
                  id mediumint(12) NOT NULL AUTO_INCREMENT,
                  your_name VARCHAR(200) NOT NULL,
                  your_email VARCHAR(200) NOT NULL,
                  your_phone VARCHAR(200) NOT NULL,
                  your_hobby VARCHAR(200) NOT NULL,
                PRIMARY KEY (id));";
$wpdb->query($sql);
require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
dbDelta($sql);
?>

<form action="" method="post"  enctype="multipart/form-data">
    <input type="text" name="cr-your-name" placeholder="Enter your Name"/>
    <input type="text" name="cr-your-email" placeholder="Enter your Email"/>
    <input type="text" name="cr-your-phone" placeholder="Enter your Phone"/>
    <input type="text" name="cr-your-hobby" placeholder="Enter your Hobby"/>
    <input type = "submit" name = "cr-submit" value = "Insert">
</form>

<?php
if(isset($_POST[\'cr-submit\'])){
global $wpdb;
$table=$wpdb->prefix.\'credofy_contact_form\';
$post_data=array(
\'yourName\' => $_POST[\'cr-your-name\'],
\'yourEmail\' => $_POST[\'cr-your-email\'],
\'yourPhone\' => $_POST[\'cr-your-phone\'],
\'yourHobby\' => $_POST[\'cr-your-hobby\']
);
$wpdb->insert( $table, $post_data);
}
?>
<?php get_footer(); ?>

1 个回复
SO网友:Adam

第4行似乎有语法错误。

                                                     string is not quoted
                                                     ↓         ↓         ↓
$sql =  "CREATE TABLE IF NOT EXISTS " . $wpdb->prefix.credofy_contact_form. " (
相反,我建议您将表创建逻辑移动到插件,并让它从安装挂钩上运行。

下面是一个示例:

<?php
/**
 * Plugin Name: WPSE 334694
 * Plugin URI:  https://wordpress.stackexchange.com/q/334694/13418
 * Description: Create database table on activation
 * Version:     1.0
 * Author:      You
 * Author URI:  https://example.com/
 * License:     GPL2
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 */

function wpse_334694_create_table() {
    global $wpdb;

    $charset_collate = $wpdb->get_charset_collate();

    $sql = "
        CREATE TABLE `{$wpdb->base_prefix}credofy_contact_form` (
        id mediumint(12) NOT NULL AUTO_INCREMENT,
        your_name VARCHAR(200) NOT NULL,
        your_email VARCHAR(200) NOT NULL,
        your_phone VARCHAR(200) NOT NULL,
        your_hobby VARCHAR(200) NOT NULL,
        PRIMARY KEY  (id) ) $charset_collate;
        ";

    require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');

    dbDelta($sql);
}

register_activation_hook( __FILE__, \'wpse_334694_create_table\' );
只需将此文件复制到您在中选择的目录名:

/plugins/{your_plugin_dir_name}/index.php

。。。然后激活插件。执行此操作后wpse_334694_create_table 将在激活期间运行一次,而不是此后的任何时候,除非您停用并重新激活插件。

还可以修改$wpdb->insert(...) 按以下格式调用:

$wpdb->insert( 
    \'table\', 
    array( 
        \'column1\' => \'value1\', 
        \'column2\' => 123 
    ), 
    array( 
        \'%s\', // format of column 1
        \'%d\'  // format of column 2
    ) 
);
有关的更多信息$wpdb->insert() 请咨询document here 它还提供了有关如何通过$wpdb 全球的

我还建议将插入逻辑移出插件,启动钩子的背面,并向表单中添加nonce字段,以验证请求,但这稍微超出了这个问题的范围,这个问题主要集中在解决错误上。

推荐阅读:

相关推荐

WordPress中MySQL的CRUD前端

我希望我来对地方了。我想用MySQL数据库的前端丰富我的Wordpress站点,我将其托管在与我的WP站点相同的服务器上。实际上,我已经将(以前的)MS Access数据库迁移到MySQL,并且我确实使用wpdatables获得了对它的“表读/写”访问权限。我想,我要找的基本上是WP上MySQL的CRUD接口。我知道,我可以自己用很多php代码来构建它。但必须有一种方法,使用多种形式的引擎(重力、wp形式、强大……)并让好看的表单显示单个表记录,允许编辑它们,然后将它们写回MySQL数据库。。。这里有什么