2012-07-31 48 views
0

嘿家伙我有以下示例。我是从一个MySQL的DATABSE装有称为getNavi.php一个PHP文件导航:
通过Ajax在PHP文件中调用MySQL连接singleton对象

$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程序员,我认为为成员函数的连接创建一个类是很好的,我可以调用它。当然,我想到了一个单身的对象,但我不知道如何调用该方法时,我想创建一个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); 
?> 

但似乎我的点击监听子链接divs(这是上面提到的)并不总是将正确的变量传递给php代码。

$('#titleContent').text(title); 

这行代码仅适用于我选择其他类别的示例。

回答

1

可getNavi.php代替旧代码

$category = intval($_GET['category']); 
DBConnection::getInstance()->getNaviForCategory($category); 
+0

似乎工作,但我怎么能存取权限从一个类的对象在一个外部文件?否则每个php文件都必须实现整个类。 – 4ndro1d 2012-07-31 18:12:04

+0

好吧,似乎还有另外一个问题..当我在不同类别的项目之间切换时,它会表现很好,但是当我在相同类别的项目之间切换时,它会随机切换div的内容 – 4ndro1d 2012-07-31 18:54:59

+0

如果您不使用__autoload,请使用require_once('YOUR_FILE') – voodoo417 2012-07-31 18:58:05