$wpdb->get_row不能在单个页面上工作.服务器内部错误


$wpdb->get_row not working on a single page. 500 Internal Server Error

我不断得到500 Internal Server Error,而试图查询一个数据库。数据通过Ajax传递到特定的页面。

代码如下:

<script type="text/javascript">
            $(document).ready(function(){
                    $(".pool-player-list-a").click(function(){
                        /* Prosleđujem parametre za upis u bazu na stranicu insert_tim.php */   
                        var id = $(this).next().val();
                        var br_dresa = $(this).next().next().val();
                        var zapisnik = <?php echo $zapisnik->id; ?>;
                        var mec = <?php echo $zapisnik->idMeca; ?>;
                        $.post('../wp-content/plugins/leaguemanager/admin/insert_tim.php', {id: id, zapisnik: zapisnik, mec: mec, br_dresa: br_dresa},
                    function(data){
                        $("#message").html(data);
                        $("#message").hide();
                        $("#message").fadeIn(500);
                    });
                    return false;
                });
            });
        </script>
        <div id='message'></div>
        <div id='pool-holder'>      
            <!-- Lista igrača iz domaćeg tima -->
            <div id="pool-home">
                <h3 style="margin:0; padding:10px;" align="center">DOMAĆI</h3>
                <?php
                    $igraci_home = $this->igraci_u_timu($league_id, $mec->home_team);
                    foreach ($igraci_home as $igrach){
                        /* Listam igrače */
                        echo "<div class='pool-player-list'>
                                <a class='pool-player-list-a' id='insertTim' href='#'>
                                    $igrach->ime $igrach->prezime
                                </a>
                                <input type='hidden' class='igracId' value='$igrach->id' />
                                <input type='hidden' class='brDresa' value='$igrach->brojDresa' />
                              </div>";
                    }
                ?>
            </div>

我已经用变量检查了所有内容。一切都好。

这是发送服务器错误的insert_tim.php页面。

<?php
global $wpdb;
$id = intval( $_POST['id'] );
$row = $wpdb->get_row("SELECT * FROM wp_pls_leaguemanager_person WHERE id = '$id'", ARRAY_A);
echo $row['ime'];
?>

可以在其他页面上使用

谢谢!

请仔细阅读这篇关于AJAX在WordPress插件中的文章。

你需要发送AJAX请求到特殊的脚本,而不是直接到你的插件!然后你用动作来处理请求。

但是你做了什么?-你发送请求到你的脚本,所以它不知道WordPress:)。WordPress必须包含你的插件,然后你的插件才能访问本地函数和类。

更新。

AJAX只是从给定链接调用您的脚本。当您直接调用脚本(http://site.com/wp-content/plugins/myplugin/insert_tim.php)时,php开始执行它,仅此而已!它不启动WordPress引擎。所以$wpdb将是一个未定义的变量,它将在使用时抛出异常(如果异常显示在php配置中被禁用,那么你将只看到"内部服务器错误500")。当然,如果你删除$wpdb的使用-一切都会好的。

WordPress的ajaxurl (http://site.com/wp-admin/admin-ajax.php)改变了什么?如果你打开这个文件-你会看到,它包含WordPress引擎加载:
/** Load WordPress Bootstrap */
require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' );

如果你将ajaxurl传递给你的AJAX调用,那么这个脚本将加载WordPress引擎,然后使用actions调用你的函数,你的函数将看到$wpdb类。

记住这个规则:不要使用AJAX直接调用插件的PHP脚本。使用原生WordPress行为

我也遇到了同样的问题。实际上,AJAX不获取$wpdb对象。你需要在那里设置你的路径,它会工作得很好。

require_once( 'path/to/wordpress/wp-includes/wp-db.php' );
if ( file_exists( 'path/to/wordpress/wp-content/db.php' ) )
    require_once( 'path/to/wordpress/wp-content/db.php' );
$wpdb = new wpdb( 'user', 'password', 'database', 'host' );