Ich habe eine Klasse zur Suche auf meiner Sete geschrieben und die Suche etc. funktioniert auch soweit aber ich will, das die Suche nur einmal, also beim ersten Aufruf der Seite ausgeführt wird und dann erst wieder, wenn die Seite verlassen und dann wieder betreten wurde. Soweit ich weiß, könnte man das doch mit Singleton machen oder nicht?
Das ist der GUI Teil:
Die Search Klasse:
db ist ein PDO Object, das sollte ja aber auch denke ich, wohl klar sein. Die anderen $_POST Werte werden alle übergeben und daraus wird dann mit der buildQuery Funktion eine Query zusammengebastelt aber das funktioniert ja wie gesagt alles schon, von daher habe ich die Query auch mal leer gelassen. Das Problem ist ja, das $isLoaded einfach immer false ist aber wieso? Sollte das nicht so funktionieren?
Das ist der GUI Teil:
PHP-Code:
$search = Search::Instance($db);
if(!Search::$isLoaded)
{
$entries = $search->default($start);
}
if(isset($_POST["BtnSearch"]))
{
$entries = $search->start($year, $_POST["Search"], $_POST["Criteria"], $_POST["sorting"], $start);
}
PHP-Code:
final class Search
{
private $db;
private $entries;
public static $isLoaded = false;
public static function Instance($db)
{
static $inst = null;
if ($inst === null) {
$inst = new Search($db);
}
return $inst;
}
private function __construct($db)
{
$entries = array();
$this->db = $db;
return;
}
public function default($start)
{
try
{
$query = $this->dbz->prepare('......');
$query->execute();
$this->entries = $query->fetchAll();
Self::$isLoaded = true;
}
catch(PDOException $e)
{
echo '<p>An PDO Error occured!</p>' . $e;
}
return $this->entries;
}
public function start($year, $searchText, $criteria, $sortOrder, $start)
{
try
{
$buildQuery = "....";
$buildQuery = ($buildQuery . $this->buildQuery($searchText, $criteria));
$query->execute();
$this->entries = $query->fetchAll();
}
catch(PDOException $e)
{
echo '<p>An PDO Error occured!</p>' . $e;
}
return $this->entries;
}
}


Kommentar