0

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'];

?>

它适用于其他页面。

谢谢!

4

2 回答 2

1

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

您需要将 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 引擎,然后使用操作 - 将调用您的函数并且您的函数将看到 $wpdb 类。

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

于 2013-01-15T09:31:16.807 回答
0

我有同样的问题。实际上,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' );
于 2018-03-08T08:11:04.327 回答