【问题标题】:Fatal error: Call to a member function get_results() on a non-object (jQuery From Plugin & WordPress)致命错误:在非对象上调用成员函数 get_results()(来自插件和 WordPress 的 jQuery)
【发布时间】:2011-11-23 04:27:42
【问题描述】:

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

我的目标是在 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?

谢谢。

【问题讨论】:

    标签: php select wordpress jquery-forms-plugin


    【解决方案1】:

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

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

    我希望这会有所帮助。

    【讨论】:

    • require_once('../../../wp-config.php');准确地说。
    【解决方案2】:

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

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

    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() 创建一个可以通过 wp_nonce() 由 wordpress 验证的 nonce 字段:http://codex.wordpress.org/Function_Reference/wp_nonce_field

    希望对你有帮助,

    Vq.

    【讨论】:

    • 嗨@Vidal Quevedo,非常感谢您的帮助。我学到了一些新东西。
    【解决方案3】:

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

    您是如何加载 csf_form_handler.php 文件的?您是包含在 Wordpress 中作为脚本的一部分,还是您自己的插件?如果是后者,记得要先激活它,这样WP才能把它包含在加载序列中(我假设它已经激活了,但是JIC)

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

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

    【讨论】:

    • 嗨@Vidal Quevedo,感谢您的留言。我正在尝试制作自己的插件。我将表单的操作设置为 csf_form_handler.php。我的插件已激活。当我运行 print_r($wpdb); 时,“我收到了通知:未定义的变量:wpdb”。我猜是因为处理程序是通过表单的 action="my handler" 加载的,所以它无法访问 WP 函数。如果您有任何建议,我很乐意听取他们的意见。谢谢。
    【解决方案4】:

    我收到这个致命错误是因为我忘了放

    global $wpdb;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 2012-05-30
      • 2016-08-30
      • 2015-02-06
      相关资源
      最近更新 更多