Ну во-первых, это не ООП. Ибо ООП подразумевает использование
объекта.
В вашем варианте все довольно просто:
function db2Array($data){
$arr = array();
while($row = mysql_fetch_assoc($data)){
$arr[] = $row;
}
return $arr;
}
function selectAll(){ // Если она выбирает все то зачем параметр id?
$sql = "SELECT * FROM catalog ";
$result = mysql_query($sql) or die(mysql_error());
return db2Array($result);
}
function selectSimple($id){
$id=(int)$id; //на всякий пожарный
$sql = "SELECT * FROM catalog WHERE id='$id'";
$result = mysql_query($sql) or die(mysql_error());
return db2Array($result);
}
<?php
require "eshop_db.inc.php";
require "eshop_lib.inc.php";
$id = clearData($_GET["id"], "i");
/* $result = mysql_query("SELECT * FROM catalog WHERE id='$id'"); - вместо этой выборки был просто вызов функций просто я не знаю как её правильно вызвать для value в форме*/
if(isset($id)){
$my=selectSimple($id);}
else {
$my=selectAll();
}
/*$my = mysql_fetch_array($result);*/
?>
<html>
<head>
<title>Форма добавления товара в каталог</title>
</head>
<body>
<form action="update_catalog.php" method="post">
<p>Автор: <input value="<?=$my['author']?>" type="text" name="author" size="50">
<p>Название: <input value="<?=$my['title']?>" type="text" name="title" size="100">
<p>Год издания: <input value="<?=$my['pubyear']?>" type="text" name="pubyear" size="4">
<p>Цена: <input value="<?=$my['price']?>" type="text" name="price" size="6"> руб.
<p><input name="id" type="hidden" value="<?=$id?>">
<p><input type="submit" value="Добавить">
</form>
</body>
</html>
теперь простейший вариант с ООП:
пусть будет файл db_class.php
<?php
/**
* абстрактный класс для работы с БД(можно и не абстрактный смотря что да как)
*/
abstract class DB
{
static $query;
/**
* Подсоединяемся к БД
* @param $host
* @param $username
* @param $password
* @param $db_name
* @return void
*/
public function connect($host, $username, $password, $db_name)
{
mysql_connect($host, $username, $password);
mysql_select_db($db_name);
mysql_query("SET NAMES UTF8");//Смотря какая кодировка используется при разработке, в вашем случае, насколько я помню - ASCII
}
/**
* Запрос к бд
* @param $query
* @return $result
*/
public function query($query)
{
$result = mysql_query($query) or self::error($query);
return $result;
}
/**
* Возвращает данные запроса
* @param $query
* @return array
*/
public function fetch($query)
{
$result = self::query($query);
while( $row = mysql_fetch_assoc($result) )
{
$data[] = $row;
}
return $data;
}
/**
* Возвращает кол-во строк
* @param $query
* @return int
*/
public function num_rows($query)
{
return mysql_num_rows(self::query($query));
}
/**
* Возвращает кол-во строк
* @param $query
* @return int
*/
public function numrows($query)
{
return self::num_rows($query);
}
}
и например отдельный класс работы с записями(только на правах примера):
пусть будет class_books.php
<?php
/**
* класс для работы с записями(не абстрактный)
*/
class books
{
public $uid;// на всякий случай
public $id;// на всякий случай
public $book = Array();
private $books = Array();
function __construct($id=0){
if($id && is_numeric($id) && $id>0){
if(DB::numrows("SELECT * FROM `catalog` WHERE `id` = ".$id."")>0)
$fetch=DB::fetch("SELECT * FROM `catalog` WHERE `id` = ".$id."");
$this->book=$fetch;
} else {
if(DB::numrows("SELECT * FROM `catalog` WHERE `id` = ".$id."")>0)
$fetch=DB::fetch("SELECT * FROM `catalog`");
$this->books=$fetch;
$this->selectfromall(1);
}
}
function selectfromall($order){//выбирает например по порядковому номеру выборки
if((int)$order>0){
$this->book=$books[$order];
}
}
}
?>
теперь преобразится верхняя часть файла вывода:
<?php
require "class_books.php";
require "db_class.php";
$id = clearData($_GET["id"], "i");
DB::connect("localhost","login","password","db");//можно это делать ещё на стадии конфига
$book= new books($id);
$my=$book->book;
$book->selectfromall(10);
$my10=$book->book;//10 по счету книга выбранная из базы
?>
<html>
<head>
<title>Форма добавления товара в каталог</title>
</head>
<body>
<form action="update_catalog.php" method="post">
<p>Автор: <input value="<?=$my['author']?>" type="text" name="author" size="50">
<p>Название: <input value="<?=$my['title']?>" type="text" name="title" size="100">
<p>Год издания: <input value="<?=$my['pubyear']?>" type="text" name="pubyear" size="4">
<p>Цена: <input value="<?=$my['price']?>" type="text" name="price" size="6"> руб.
<p><input name="id" type="hidden" value="<?=$id?>">
<p><input type="submit" value="Добавить">
</form>
</body>
</html>
Сообщение отредактировал WallEnd: 26.11.2012, 17:30:18