No tak to bude tým, že sme tu len asi 5 stály a potom nejaký cezpolný ktorý potrebujú pomoc
. No napríklad si to predstavujem takto, že model.php by mohol vypadať nejako takto.
Code:
<?php
class db_model
{
private $hostname = "";
private $username = "";
private $password = "";
private $db_name = "";
private $charset = "utf8";
public $table = "";
protected static $instance = 0;
protected $connection;
public function __construct()
{
$this->connect();
if (!isset($this->table))
{
$this->chooseTable();
}
}
protected function connect()
{
if (self::$instance === 0)
{
$this->connection = mysql_connect($this->hostname,$this->username,$this->password) or die("<center>Cannot connect to database</center>");
mysql_query("SET CHARACTER SET utf8",$this->connection);
self::$instance = 1;
}
$this->selectDatabase();
}
protected function disconnect()
{
mysql_close($this->connection);
self::$instance = 0;
}
public function selectDatabase($name = NULL)
{
if ($name === NULL) $name = $this->db_name;
mysql_select_db($name) or die("Cannot select database");
}
public function chooseTable($name = NULL)
{
if (!isset($name))
$name = get_class($this);
$this->table = $name;
}
public function fetchAll($where = NULL, $collums = "*", $sort_rule = NULL)
{
$i = 1;
$result = array();
$sql = "SELECT " . $this->selectCollums($collums) . " FROM " . $this->table . $this->where($where) . $this->sortResult($sort_rule);
$query = mysql_query($sql);
while ($results = mysql_fetch_assoc($query))
{
foreach ($results as $key => $value)
{
$row[$key] = $value;
}
$result[$i] = $row;
$i++;
}
mysql_free_result($query);
return $result;
}
public function fetchBy($where, $collums = "*", $sort_rule = NULL)
{
$sql = "SELECT " . $this->selectCollums($collums) . " FROM " . $this->table . $this->where($where) . $this->sortResult($sort_rule);
$query = mysql_query($sql);
$result = mysql_fetch_assoc($query);
mysql_free_result($query);
return $result;
}
public function fetchById($id, $collums = "*", $sort_rule = NULL)
{
if (is_array($id))
{
return $this->fetchBy($id, $collums, $sort_rule);
} else {
return $this->fetchBy(array("id = '".$id."'"), $collums, $sort_rule);
}
}
public function save($data)
{
foreach ($data as $key => $value)
{
$value = $this->clean($value);
$keys[] = "`".$key."`";
if (is_string($value))
{
$values[] = "'".$value."'";
} elseif ($value == NULL)
{
$values[] = "NULL";
} elseif (is_int($value) || is_float($value))
{
$values[] = $value;
}
}
$insert_into = implode(", ",$keys);
$inserted_values = implode(", ",$values);
if (mysql_query($sql))
return true;
else
return false;
}
public function update($data,$where)
{
foreach ($data as $key => $value)
{
$temp[] = "'".$key."'" . " = " . "'" . $this->clean($value) . "'";
}
$set = implode(", ",$temp);
$sql = "UPDATE " . $this->table . " SET " . $set . " " . $this->where($where);
if (mysql_query($sql))
return true;
else
return false;
}
public function delete($where)
{
$sql = "DELETE FROM " . $this->table . $this->where($where) . " LIMIT 1";
if (mysql_query($sql))
return true;
else
return false;
}
public function count($where)
{
$sql = "SELECT * FROM " . $this->table . $this->where($where);
$query = mysql_query($sql);
$numberOfResults = 0;
while ($result = mysql_fetch_array($query))
{
$numberOfResults++;
}
return $numberOfResults;
}
public function doQuery($sql)
{
return mysql_query($this->clean($sql));
}
private function sortResult($sort_rules)
{
if (is_array($sort_rules))
{
list($key, $rule) = $sort_rules;
return " ORDER BY ".$key." ".$rule;
} else return false;
}
private function where($fetch_rules)
{
if (isset($fetch_rules))
{
$condition = " WHERE";
foreach ($fetch_rules as $rule)
{
$condition .= " ".$this->clean($rule);
}
}
return $condition;
}
private function selectCollums($collums)
{
if (is_array($collums)) $collums = implode(", ",$collums);
return $collums;
}
private function clean($string)
{
$hladane = array("DROP", "UNION", "--",);
//$filter = str_ireplace($hladane, "*", $htmlentities($string));
return $string;
}
private function setCharset($charset)
{
mysql_set_charset($charset, $this->connection);
}
public function __destruct()
{
$this->disconnect();
}
}
?>
O controlery mám trochu pochybnosti lebo ešte stále som nenašiel tú správnu filozofiu jeho tvorby. Viewer si spravíš jednoducho, skrátka nejaké public metody ktoré budú printovať alebo echovať html a css výstupy.