致命错误:在非对象上调用成员函数get_results()(jQuery From Plugin& WordPress)

时间:2011-09-22 20:37:38

标签: php select wordpress-plugin jquery-forms-plugin

我正在尝试在Wordpress插件中使用jQuery的Form插件。我正在关注这个example。我已经将我的脚本排队并构建了我的表单。在csf_form_handler.php中,相当于示例的json-echo.php,我可以访问在我的表单中选择的项目(我有一个radiobutton组)。

我的目标是使用SELECT语句中表单中选择的值从自定义wordpress数据库表返回数据。

$csf_selected_sport = $_POST['csf_radiobutton_group_sport'];

global $wpdb;

$csf_db_table = $wpdb->prefix . "activity";


$csf_data = $wpdb->get_results($wpdb->prepare("
            SELECT *
            FROM " .$csf_db_table. "
            WHERE  " . $csf_selected_sport ." ")); 

不幸的是,我得到了:

  

注意:尝试获取非对象的属性(在$ wpdb->前缀上)   线)

     

致命错误:在非对象上调用成员函数get_results()   (在$ csf_data行上)

csf_form_handler.php中的上述代码不在函数中。我不知道这是否有所作为。

如何更改代码以便我可以使用$ wpdb?

谢谢。

4 个答案:

答案 0 :(得分:14)

我遇到了同样的问题,但我通过在WordPress文件夹的根目录中包含wp-config.php文件解决了这个问题:

require_once('../../../wp-config.php');
global $wpdb;

我希望这会有所帮助。

答案 1 :(得分:5)

编写插件时,最好将数据处理保存在插件的主文件中(即不将其发送到单独的文件中),并激活相应处理它的函数。基本上,您可以将表单的操作设置为指向插件的文件或包含表单的页面。

我们假设您正在处理的这个表单显示在站点的前端,侧栏上。要在用户单击“提交”时处理来自该表单的数据,您可以在我们的插件文件中创建一个函数,例如:

function $csf_get_data(){

global $wpdb; //since your this function is in your plugin’s file, $wpdb should be available, so no errors here! =)

$csf_selected_sport = $_POST['csf_radiobutton_group_sport'];

$csf_db_table = $wpdb->prefix . "activity";

$csf_data = $wpdb->get_results($wpdb->prepare("
            SELECT *
            FROM " .$csf_db_table. "
            WHERE  " . $csf_selected_sport ." ")); 

    //do your stuff with $csf_data
}

//now run it everytime the plugin is run
if(isset($_POST[‘submit’])){
    $csf_get_data();
}

现在,您可以设置表单操作的属性以将数据发送到同一页面,该页面将能够使用上述功能处理它。你可以使用:

    action=””

    action="<?php the_permalink()?>"

请注意:为了确保数据来自您的网站(尤其是公共表单),请记住使用wp_nonce_field()创建一个可以通过wordpress通过wp_nonce()验证的nonce字段:http://codex.wordpress.org/Function_Reference/wp_nonce_field < / p>

希望有所帮助,

VQ。

答案 2 :(得分:2)

你在哪里运行这段代码?听起来你在创建$ wpdb实例之前运行它(或者超出范围)。

如何加载csf_form_handler.php文件?你是否包含在Wordpress中作为脚本的一部分,还是你自己的插件?如果是后者,请记住您需要先激活它,因此WP可以将其包含在加载序列中(我假设它已经被激活,但是JIC)

要查看是否已创建$ wpdb对象,可以运行<?php print_r($wpdb);?>打印出对象的内容。

让我知道更多,希望我能帮到你。

答案 3 :(得分:1)

我遇到了这个致命错误,因为我忘记放了

global $wpdb;

在我放置 $ wpdb-> get_results()函数的文件中。