我在尝试查询数据库时不断获得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'];
?>
它适用于其他页面。
谢谢!
答案 0 :(得分:1)
请仔细阅读this post关于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行为。
答案 1 :(得分: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' );