联系表单7 - 无法运行php

6

我已经安装了WordPress和插件contact form 7

为了将其变成多页面联系表格,我还安装了Contact Form 7 Multi-Step Forms。目前一切正常,甚至邮件也能发送。

我的问题是,在邮件发送之前我想运行一些PHP代码。

我已经插入了这段代码,以测试该插件的运行能力。

function testfunc( $cf7 )
{
    mysql_connect("localhost", "user_name", "password") or die(mysql_error());
    mysql_select_db("db_name") or die(mysql_error());
    mysql_query("CREATE TABLE `aaaaaaaaaaa` ( test VARCHAR(30))");
}

add_action( 'wpcf7_before_send_mail', 'testfunc', 1);

即使我在一个额外的PHP文件中运行它,该函数也可以正常工作。

现在我无法弄清楚为什么将该函数插入到插件中时它不起作用?


你检查过表 aaaaaaaaaaa 是否已经存在了吗? - Latheesan
是的,那就是我想要实现的,也是我知道它不起作用的原因,因为在运行脚本后表不存在。 - Friedrich
尝试在mysql_query之后添加or die(mysql_error()); - Latheesan
问题是我甚至没有从服务器得到任何响应,就像这样。我什么也没得到,因为我在WordPress中运行整个过程,同时提交表单。 - Friedrich
参数$cf7是必须的吗?这可能是问题所在。 - Kanishk Dudeja
请阅读为什么不应该使用mysql_* - Hugo Delsing
3个回答

3

使用wordpress的全局wpdb对象查询数据库的方法如下:

参考此链接

function testfunc( $cf7 )
{
    global $wpdb;
    $wpdb->query("CREATE TABLE `aaaaaaaaaaa` ( test VARCHAR(30))");
}

add_action( 'wpcf7_before_send_mail', 'testfunc', 1);

2

使用这种方式创建WordPress表格不需要php结构来进行连接:

点击此处了解如何创建、获取wp的表格数据

function testfunc( $cf7 )
{
    global $wpdb;

    $table_name = $wpdb->prefix . 'tablename';

    $sql = "CREATE TABLE IF NOT EXISTS ".$table_name."(
      id int(11) NOT NULL AUTO_INCREMENT,
      name varchar(255) DEFAULT NULL,
      UNIQUE KEY id (id)
    );";

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}

0

+1 给 Rave Patel

我只是建议在每次尝试创建表之前检查表是否存在。

function testfunc( $cf7 )
{

    global $wpdb;

    $table_name = $wpdb->prefix . 'tablename';

    if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {

        $sql = "CREATE TABLE $table_name (
            id int(11) NOT NULL AUTO_INCREMENT,
            name varchar(255) DEFAULT NULL,
            UNIQUE KEY id (id)
        )";

        require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
        dbDelta( $sql );
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接