みなさん、次のサンプルがあります。getNavi.phpという PHP ファイルを使用して mySQL データベースからロードされるナビゲーションがあります。
$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);
?>
しかし、サブリンク div (上記) のオンクリック リスナーは、常に正しい変数を php コードに渡すとは限りません。
$('#titleContent').text(title);
たとえば、このコード行は、別のカテゴリを選択した場合にのみ機能します。