嘿,伙计们,我有下面的样本。我有一个导航,它是从mySQL数据库加载的,带有一个名为getNavi.PHP的PHP文件:
$query="SELECT * FROM projects WHERE category='"$category'"";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
while ($row = mysql_fetch_object($result)) {
$title=$row->title;
$id=$row->id;
echo "<div class='"sublink'" data-subsite='"$id'" data-category='"$category'" data-title='"$title'" ><a href='"#'">$title<br />";
}
这些链接被正确加载,并通过AJAX进行处理:
$(document).ready(function(){
$('.link').click(function(){
var subsite = $(this).data('subsite');
$('#naviLeftContent').load('php/getNavi.php?category='+subsite);
});
$(document).on("click", ".sublink", function(){
var subsite = $(this).data('subsite');
var category = $(this).data('category');
var title = $(this).data('title');
var info = category + "/" + title;
var lower = info.toLowerCase();
var nospaces = lower.split(' ').join('');
$('#titleContent').text(title);
$('#imageContent').load('php/getImages.php?info='+nospaces);
$('#textContent').load('php/getText.php?id='+subsite);
$('#infosContent').load('php/getInfos.php?id='+subsite);
});
});
这部分是它开始出错的地方,因为我的div的内容有时只是部分加载,或者根本没有加载。文本没有被剪切,但大部分标题和信息都没有加载。有时,当我一直重复点击同一链接时,信息会切换。
问题是,在我加载的所有PHP文件中,我都会打开和关闭SQL连接。现在,作为一名Java程序员,我认为为我与成员函数的连接创建一个类会很好,我可以调用它。当然,我想到了一个singleton对象,但当我创建这样的PHP文件时,我不知道如何调用这些方法:
<?php
class DBConnection {
private static $instance;
private function __construct() {
$user="root";
$password="";
$database="klb";
mysql_connect("localhost",$user,$password);
@mysql_select_db($database) or die( "Unable to select database");
}
public function __destruct() {
mysql_close();
}
public static function getInstance() {
if(!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
public function getNaviForCategory($category) {
$query="SELECT * FROM projects WHERE category='"$category'"";
$result=mysql_query($query);
$num=mysql_numrows($result);
while ($row = mysql_fetch_object($result)) {
$title=$row->title;
$id=$row->id;
echo "<div class='"sublink'" data-subsite='"$id'" data-category='"$category'" data-title='"$title'" ><a href='"#'">$title<br />";
}
}
public function getInfosForProject($id) {
$query="SELECT * FROM projects WHERE id='"$id'"";
$result=mysql_query($query);
$num=mysql_numrows($result);
while ($row = mysql_fetch_object($result)) {
$infos=$row->info;
echo $infos;
}
}
private function createTableProjects(){
$query="CREATE TABLE projects (id int(6) NOT NULL auto_increment,category varchar(30) NOT NULL,title varchar(30) NOT NULL,
info varchar(200) NOT NULL,text varchar(8000) NOT NULL,PRIMARY KEY (id),UNIQUE id (id))";
mysql_query($query);
}
}
?>
我现在需要一些代码行的替换:
$('#infosContent').load('php/getInfos.php?id='+subsite);
编辑:
我用以下代码解决了这个问题:
<?php
require_once( 'dbconnection.php');
$category = $_GET["category"];
DBConnection::getInstance()->getNaviForCategory($category);
?>
但是,我的子链接div的点击监听器(如上所述)似乎并不总是将正确的变量传递给php代码。
$('#titleContent').text(title);
例如,只有当我选择另一个类别时,这行代码才有效。
可能在getNavi.php中,而不是旧代码
$category = intval($_GET['category']);
DBConnection::getInstance()->getNaviForCategory($category);