Példaprogram négyrétegű architektúrára php-ban

A VIK Wikiből
A lap korábbi változatát látod, amilyen Unknown user (vitalap) 2012. október 21., 21:21-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoalap|SzgLab5PHP4Tier}} __TOC__ ==Konfiguráció — /php-include/db/config.inc== <pre> <?php /* Az itt használt globális változók mind…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


Konfiguráció — /php-include/db/config.inc

<?php

/* Az itt használt globális változók mind konstansok! */

$oracleuser = "neptun kód";
$oraclepassword = "********";

?>

Adatbázis elérési réteg — /php-include/db/sql.inc

<?php

require_once("config.inc");

class SQL {
	private $conn, $statement;

	/* Kapcsolat megnyitása a konstruktorban */	
	function __construct() {
		global $oracleuser, $oraclepassword;
		return $this->conn = OCILogon($oracleuser, $oraclepassword, "");
		// return $this->conn = OCILogon($oracleuser, $oraclepassword, "tnsnames.ora");
	}

	/* Utasításnak lefoglalt terület felszabadítása, ha szükséges */
	private function freeStatement() {
		if ($this->statement) OCIFreeStatement($this->statement);
	}

	/* Paraméteres lekérdezés végrehajtása */
	function query($query, $bind=FALSE) {
		$this->freeStatement();
		$this->statement = OCIParse($this->conn, $query);

		$ok = true;
		if ($bind) {
			foreach ($bind as $key => $value) {
				$ok &= OCIBindByName($this->statement, $key, $bind[$key], -1);
			}
		}
		if ($ok) OCIExecute($this->statement);
		return $ok;
	}

	/* Lekérdezés eredményének következő sora							  */
	/* Asszociatív tömb, OSZLOPNÉV => érték formátumú elemekből áll */
	/* Ha nincs több találat, FALSE-szal tér vissza					  */
	function fetch() {
		OCIFetchInto($this->statement, $line, OCI_ASSOC);
		return $line;
	}

	/* Utasításnak lefoglalt terület felszabadítása, és kapcsolat bontása a destruktorban */
	function __destruct() {
		$this->freeStatement();
		OCILogoff($this->conn);
	}
}

?>

Üzleti logika — /php-include/bom/search.inc

<?php

require_once("../db/sql.inc");

/* Lekérdezi a keresési feltételeknek megfelelő könyvek számát */ 
function search_count($cim, $szerzo) {
	$query = "SELECT count(*) AS count FROM konyv " .
				"WHERE LOWER(szerzo) LIKE LOWER(:szerzo) AND " .
				"LOWER(cim) LIKE LOWER(:cim)";
	$sql = new SQL();
	$sql->query($query, array(":szerzo" => $szerzo, ":cim" => $cim));
	$result = $sql->fetch();
	return $result["COUNT"];			
}

?>

Megjelenítés — /php-include/view/search.inc

<?php

require_once("../bom/search.inc");

/* Keresőform kirajzolása */
function search_showform() {
	echo "<form action='{$_SERVER['PHP_SELF']}' method='GET'>\n";
	echo "<p>Cím: <input name='cim' value='{$_GET["cim"]}'></p>\n";
	echo "<p>Szerző: <input name='szerzo' value='{$_GET["szerzo"]}'></p>\n";
	echo "<p><input type='submit' value='Keres'></p>\n";
	echo "</form>";	 
}

/* Eredmények felsorolása */
function search_showresults($cim, $szerzo) {
	$count = search_count($cim, $szerzo);
	if ($count) {
		echo "<p>$count találat</p>";
		// találatok felsorolása
	} else echo "<p>Nincs találat</p>";
}

?>

/public_html/php/search.php

<?php

require("../../php-include/view/header.inc");
require_once("../../php-include/view/search.inc");

search_showform();
if (isset ($_GET["cim"]) && isset ($_GET["szerzo"])) {
	search_showresults($_GET["cim"], $_GET["szerzo"]);
}

require("../../php-include/view/footer.inc");

?>

-- Peti - 2006.01.13.