0

500 Internal Server Errordbをクエリしようとしている間、私は常に取得します。データは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 に答える