php oop การ return ค่าจาก function มายัง หน้า form
ดิฉันเพิ่งหัดเขียน php แบบ OOP ค่ะ
ตอนนี้พบปัญหาดังนี้ค่ะ คือสับสนว่าเราควร นำ sql string พวก select , update, insert ไว้ใน class หรือ เอาไว้ที่หน้า form ดีคะ
--- itemList.php-----
include("DBConnect.php");
require("class_itemmaster.php");
$objItemList = new ItemList;
$conn = new DBConnect;
echo $objItemList->itemLoad(); // หรือ นำ code ใน class itemlist,function itemLoad มาไว้ที่นี่ดีคะ ???
----DBConnect.php-------
ob_start();
Class DBConnect
{
private $_host = "localhost";
private $_user = "root";
private $_pass = "1234";
private $_db = "test_db";
private function openDB()
{
$charset = "set names utf8";
$link = mysql_pconnect($this->_host, $this->_user, $this->_pass);
if (!$link) {
die('Could not connect to the server: ' . odbc_error());
}
$db_selected = mysql_select_db($this->_db, $link);
if (!$db_selected) {
die ('Could not connect to the database"' . $this->_db ." get error: " . mysql_error());
}
mysql_query($charset) or die('Invalid query: ' . mysql_error());
}
private function closeDB()
{
mysql_close($link);
}
public function return_sql($sql)
{
self::openDB();
$result = mysql_query($sql) or trigger_error("SQL", E_USER_ERROR);
if ($result){
$arrData = array();
while ($rows = mysql_fetch_array($result)) {
$arrData[] = $rows;
}
}else{
$message = 'This command of : ' . mysql_error() . " incorrect<BR />";
$message = mysql_error();
die($message);
}
return $arrData;
self::closeDB();
}
public function exe($sql)
{
self::openDB();
$result = mysql_query($sql);
if (!$result) {
$message = 'This command of : ' . mysql_error() . "incorrect<BR />";
die($message);
}
}
}
?><?php ob_end_flush();?>
--------class_itemmaster.php-----
class ItemList {
public $itemcode;
public $itemname;
public $unittype;
public $status;
public $remark;
public $createby;
public $sql;
public function DuplicateItem ($fitemcode,$fitemname,$funittype,$fstatus,$fremark,$fcreateby) {
$this->itemcode=$fitemcode;
$this->itemname=$fitemname;
$this->unittype=$funittype;
$this->status=$fstatus;
$this->remark=$fremark;
$this->createby=$fcreateby;
$conn = new DBConnect;
$sSql = "select * from itemmaster where itemcode ='$this->itemcode'";
$arrData = $conn->return_sql($sSql);
if ( $arrData=true) {
return "<script>alert('Duplicate Data !');</script>";
}
else {
AddNewItem($this->itemcode,$this->itemname,$this->unittype,$this->status,$this->remark,$this->createby);
}
}
public function AddNewItem ($fitemcode,$fitemname,$funittype,$fstatus,$fremark,$fcreateby) {
$this->itemcode=$fitemcode;
$this->itemname=$fitemname;
$this->unittype=$funittype;
$this->status=$fstatus;
$this->remark=$fremark;
$this->createby=$fcreateby;
$conn = new DBConnect;
$sSql = "Insert into itemmaster (ItemCode,ItemName,Unit,Status,Remark,Createby) VALUES ('$this->itemcode','$this->itemname','$this->unittype','$this->status','$this->remark','$this->createby')";
$arrData = $conn->exe($sSql);
return "<meta http-equiv='refresh'Content =0;URL='ItemList.php'>";
}
public function itemLoad () {
$conn = new DBConnect;
$sSql = "SELECT * FROM itemmaster";
$arrData = $conn->return_sql($sSql);
return $arrData; // จากตรงนี้จะ return ค่าเป็น ไปยัง form ยังงัยดีคะ หรือว่า ต้องสร้าง html แทรกไว้ใน class ที่นี่ดีคะ ??
// ถ้าสร้างที่นี่ /*
echo "<table width=200 border=1>";
echo " <tr><td cellpadding= 0 cellspacing=3 bgcolor=#99CCFF align=center class=style274>ItemCode</td>
<td cellpadding= 0 cellspacing=3 bgcolor=#99CCFF align=center class=style274>ItemName</td>
<td cellpadding= 0 cellspacing=3 bgcolor=#99CCFF align=center class=style274>Unit</td></tr>";
$j=0;
foreach($arrData as $row){ {
echo "<tr><td cellpadding= 0 cellspacing=1 bgcolor=#99CCFF>"; echo $row['ItemCode']; echo"</td>";
echo "<td cellpadding= 0 width=100 cellspacing=1 bgcolor=#99CCFF >"; echo $row['ItemName']; echo"</td>";
echo "<td cellpadding= 0 width=250 cellspacing=1 bgcolor=#99CCFF >"; echo $row['Unit']; echo"</tr></td>";
echo "<br\n>";
}echo "</table>";*/
}
public function itemCodeSearch ($fitemcode) {
$this->itemcode=$fitemcode;
$conn = new connectDB;
$sSql = "SELECT * FROM itemmaster WHERE ItemCode ='$this->itemcode' ";
$arrData = $conn->return_sql($sSql);
return "<meta http-equiv='refresh'Content =0;URL='ItemList.php'>";
}
}
?>
รบกวนผู้รู้ทั้งหลายช่วยเข้ามาตอบด้วยค่ะ ตอนนี้มึนกับ OOP มั่กๆๆ หรือว่าจากลับไปเขียนแบบไม่ OOP ดีมั้ย???Tag : PHP
Date :
2012-01-17 10:19:25
By :
เนย
View :
1699
Reply :
5
ดิฉันเพิ่งหัดเขียน php แบบ OOP ค่ะ
ตอนนี้พบปัญหาดังนี้ค่ะ คือสับสนว่าเราควร นำ sql string พวก select , update, insert ไว้ใน class หรือ เอาไว้ที่หน้า form ดีคะ
Code (PHP)
--- itemList.php-----
include("DBConnect.php");
require("class_itemmaster.php");
$objItemList = new ItemList;
$conn = new DBConnect;
echo $objItemList->itemLoad(); // หรือ นำ code ใน class itemlist,function itemLoad มาไว้ที่นี่ดีคะ ???
----DBConnect.php-------
ob_start();
Class DBConnect
{
private $_host = "localhost";
private $_user = "root";
private $_pass = "1234";
private $_db = "test_db";
private function openDB()
{
$charset = "set names utf8";
$link = mysql_pconnect($this->_host, $this->_user, $this->_pass);
if (!$link) {
die('Could not connect to the server: ' . odbc_error());
}
$db_selected = mysql_select_db($this->_db, $link);
if (!$db_selected) {
die ('Could not connect to the database"' . $this->_db ." get error: " . mysql_error());
}
mysql_query($charset) or die('Invalid query: ' . mysql_error());
}
private function closeDB()
{
mysql_close($link);
}
public function return_sql($sql)
{
self::openDB();
$result = mysql_query($sql) or trigger_error("SQL", E_USER_ERROR);
if ($result){
$arrData = array();
while ($rows = mysql_fetch_array($result)) {
$arrData[] = $rows;
}
}else{
$message = 'This command of : ' . mysql_error() . " incorrect<BR />";
$message = mysql_error();
die($message);
}
return $arrData;
self::closeDB();
}
public function exe($sql)
{
self::openDB();
$result = mysql_query($sql);
if (!$result) {
$message = 'This command of : ' . mysql_error() . "incorrect<BR />";
die($message);
}
}
}
?><?php ob_end_flush();?>
--------class_itemmaster.php-----
class ItemList {
public $itemcode;
public $itemname;
public $unittype;
public $status;
public $remark;
public $createby;
public $sql;
public function DuplicateItem ($fitemcode,$fitemname,$funittype,$fstatus,$fremark,$fcreateby) {
$this->itemcode=$fitemcode;
$this->itemname=$fitemname;
$this->unittype=$funittype;
$this->status=$fstatus;
$this->remark=$fremark;
$this->createby=$fcreateby;
$conn = new DBConnect;
$sSql = "select * from itemmaster where itemcode ='$this->itemcode'";
$arrData = $conn->return_sql($sSql);
if ( $arrData=true) {
return "<script>alert('Duplicate Data !');</script>";
}
else {
AddNewItem($this->itemcode,$this->itemname,$this->unittype,$this->status,$this->remark,$this->createby);
}
}
public function AddNewItem ($fitemcode,$fitemname,$funittype,$fstatus,$fremark,$fcreateby) {
$this->itemcode=$fitemcode;
$this->itemname=$fitemname;
$this->unittype=$funittype;
$this->status=$fstatus;
$this->remark=$fremark;
$this->createby=$fcreateby;
$conn = new DBConnect;
$sSql = "Insert into itemmaster (ItemCode,ItemName,Unit,Status,Remark,Createby) VALUES ('$this->itemcode','$this->itemname','$this->unittype','$this->status','$this->remark','$this->createby')";
$arrData = $conn->exe($sSql);
return "<meta http-equiv='refresh'Content =0;URL='ItemList.php'>";
}
public function itemLoad () {
$conn = new DBConnect;
$sSql = "SELECT * FROM itemmaster";
$arrData = $conn->return_sql($sSql);
return $arrData; // จากตรงนี้จะ return ค่าเป็น ไปยัง form ยังงัยดีคะ หรือว่า ต้องสร้าง html แทรกไว้ใน class ที่นี่ดีคะ ??
// ถ้าสร้างที่นี่ /*
echo "<table width=200 border=1>";
echo " <tr><td cellpadding= 0 cellspacing=3 bgcolor=#99CCFF align=center class=style274>ItemCode</td>
<td cellpadding= 0 cellspacing=3 bgcolor=#99CCFF align=center class=style274>ItemName</td>
<td cellpadding= 0 cellspacing=3 bgcolor=#99CCFF align=center class=style274>Unit</td></tr>";
$j=0;
foreach($arrData as $row){ {
echo "<tr><td cellpadding= 0 cellspacing=1 bgcolor=#99CCFF>"; echo $row['ItemCode']; echo"</td>";
echo "<td cellpadding= 0 width=100 cellspacing=1 bgcolor=#99CCFF >"; echo $row['ItemName']; echo"</td>";
echo "<td cellpadding= 0 width=250 cellspacing=1 bgcolor=#99CCFF >"; echo $row['Unit']; echo"</tr></td>";
echo "<br\n>";
}echo "</table>";*/
}
public function itemCodeSearch ($fitemcode) {
$this->itemcode=$fitemcode;
$conn = new connectDB;
$sSql = "SELECT * FROM itemmaster WHERE ItemCode ='$this->itemcode' ";
$arrData = $conn->return_sql($sSql);
return "<meta http-equiv='refresh'Content =0;URL='ItemList.php'>";
}
}
?>
รบกวนผู้รู้ทั้งหลายช่วยเข้ามาตอบด้วยค่ะ ตอนนี้มึนกับ OOP มั่กๆๆ หรือว่าจากลับไปเขียนแบบไม่ OOP ดีมั้ย???
Date :
2012-01-17 15:37:09
By :
เนย
แล้วแต่จะออกแบบกระบวนการ มันทำได้ทั้งนั้นแหละครับ
Date :
2012-01-17 15:56:37
By :
mr.v
พอเข้าใจค่ะ ว่ามันทำได้ทั้งสองแบบ แต่อยากทราบว่าคนส่วนใหญ่ใช้วิธีการไหนคะ
คือตอนนี้เพิ่งเริ่มหัดเขียนน่ะคะ กังวลว่าแบบที่เราเขียนจะเกิดปัญหาในระยะยาวรึเปล่า
เลยลองมา post ถาม ในนี้ดูก่อนค่ะ
แล้วที่งง อีกอย่างก็คือ ถ้าเราเอา query string ไปไว้ในหน้า form (จริงๆต้องไว้ใน class?) แระมันจะเป็น OOP ตรงไหนค่ะ
หรือว่า php เขียน oop เฉพาะตอนติดต่อ database เท่าันั้นเหรอคะ
รบกวนช่วยเข้ามาตอบกันอีกครั้งนะคะ ยังสับสนอยู่ค่ะ ขอบคุณค่ะ
Date :
2012-01-17 16:17:50
By :
เนย
ยังงัยรบกวน ช่วยยกตัวอย่างให้ดูได้มั้ยคะ
เื่ผื่อจะเข้าใจมากขึ้น
ขอบคุณค่ะ
Date :
2012-01-17 16:21:45
By :
เนย
Load balance : Server 04