 |
รบกวนช่วยดู error ให้หน่อยครับ >> Call to a member function query() on a non-object |
|
 |
|
|
 |
 |
|
ไหนๆ ก็จะ oop แล้ว ก็เอาให้เต็มรปแบบไปเลย
method ล้อของ .net น่าจะพอเข้าใจนะ
database\idatabase.php
<?php
namespace database;
interface idatabase {
public function open_connection();
public function close_connection($conn);
public function execute_nonquery($conn, $query, $params);
public function execute_query($conn, $query, $params );
public function begin_transaction($conn);
public function commit_transaction($conn, $querys);
}
}
?>
database\sql_server.php
<?php
namespace database;
class sql_server implements idatabase {
public function open_connection() {
$connection_info = array("UID" => DB_USER,
"PWD" => DB_PASSWORD,
"Database" => DB_NAME,
"CharacterSet" => DB_CHARACTERSET);
$conn = sqlsrv_connect(DB_HOST, $connection_info);
if ($conn === FALSE) {
echo "Unable to connect.<br />";
die(print_r(sqlsrv_errors(), TRUE));
}
return $conn;
}
public function close_connection($conn) {
sqlsrv_close($conn);
}
public function execute_nonquery($conn, $query, $params = FALSE) {
$resource = ($params === FALSE) ? sqlsrv_query($conn, $query) : sqlsrv_query($conn, $query, $params);
if ($resource === FALSE) {
echo "Error in executing query.<br />";
die(print_r(sqlsrv_errors(), TRUE));
}
return $resource;
}
public function execute_query($conn, $query, $params = FALSE) {
$resource = ($params === FALSE) ? sqlsrv_query($conn, $query) : sqlsrv_query($conn, $query, $params);
if ($resource === FALSE) {
echo "Error in executing query.<br />";
die(print_r(sqlsrv_errors(), TRUE));
}
$results = array();
while ($row = sqlsrv_fetch_array($resource)) {
$result = new query_result();
foreach ($row as $key => $value) {
$result->$key = $value;
}
$results[] = $result;
}
return $results;
}
public function begin_transaction($conn)
{
if (sqlsrv_begin_transaction($conn) === FALSE ) {
echo "Cann't begin transaction.<br />";
die(print_r( sqlsrv_errors(), TRUE));
}
}
public function commit_transaction($conn, $querys)
{
$result = is_array($querys);
if ($result === TRUE) {
foreach ($querys as $q) {
$result = $result && $q;
}
if ($result === TRUE) {
sqlsrv_commit($conn);
}
else {
sqlsrv_rollback($conn);
}
}
return $result;
}
}
?>
database\query_result.php
<?php
namespace database;
class query_result {
private $_results = array();
public function __set($key, $value) {
$this->_results[$key] = $value;
}
public function __get($key) {
if (isset($this->_results[$key])) {
return $this->_results[$key];
}
else {
return null;
}
}
}
?>
database\include.php
<?php
// Database
define('DB_HOST', 'localhost\sqlexpress');
define('DB_NAME', 'SqlServer2008');
define('DB_USER', '');
define('DB_PASSWORD', '');
define('DB_CHARACTERSET', 'UTF-8');
?>
index.php
<?php
require_once (dirname(__FILE__) . '/database/include.php');
// autoload
spl_autoload_extensions(".php");
spl_autoload_register();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>PHP OOP</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
<form id="form1" name="form1" method="post">
<?php
$sqlsvr = new database\sql_server();
$conn = $sqlsvr -> open_connection();
$query = "SELECT ID, SectionCode, SectionName FROM Section WHERE ID BETWEEN ? AND ? OR ID = ? OR SectionName = ?";
$params = array(2, 5, 7, 'OPD');
$result = $sqlsvr -> execute_query($conn, $query, $params);
if ($result) {
foreach ($result as $r) {
echo "<a href=\"$r->SectionCode\">$r->SectionName</a><br />";
}
}
$sqlsvr -> close_connection($conn);
?>
</form>
</body>
</html>
|
 |
 |
 |
 |
Date :
2014-09-11 10:00:05 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Good!
|
 |
 |
 |
 |
Date :
2014-09-11 10:19:07 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สอบถามต่ออีกนิดนึงครับ สมมุติว่าไฟล์ที่จะเรียกใช้ class อยู่ที่พาท modules\member\member_save_data\member_save.php เราต้องเรียกอย่างไรครับ คือที่ผมลองแจ้งว่า spl_autoload(): Class database\sql_server could not be loaded คือไฟล์ member_save.php นี้ไม่ได้ถูก include มาไว้ใน index อ่ะครับ เป็นเหมือนกับว่าไฟล์นี้จะทำหน้าที่บันทึกหลังจากกดปุ่มจากหน้าหลัก
Code (PHP)
ob_start();
session_start();
require_once ('../../../database/include.php');
// autoload
spl_autoload_extensions(".php");
spl_autoload_register();
$sqlsvr = new database\sql_server();
$conn = $sqlsvr -> open_connection();
$query2 = "INSERT INTO tbl_main ( id , name ) VALUES ( 5 , 'บี๋' )";
$result2 = $sqlsvr->execute_query($conn, $query2);
|
 |
 |
 |
 |
Date :
2014-09-11 12:24:36 |
By :
babyprogrammer |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมยังงง อยู่รบกวนอีกทีนะครับ ไม่รู้ว่าผมใส่ผิดตรงไหน
member.php ไฟล์นี้จะถูก include ใส่ใน index
Code (PHP)
<button type="button" class="btn btn-success" onClick="FncMember();" data-toggle="modal"><i class="icon-ok icon-white"></i> บันทึก</button>
fnc_member.js
Code (Java)
function FncMember(){
$.ajax({
type:'POST',
cache: false ,
url:'modules/member/member_save_data/member_save.php',
//data: 'action=load-data&'+data_elearn_subj_search,
beforeSend: function(){
//$("#show_save").html("<img src='images/loading2.gif'> กำลังโหลดข้อมูล กรุณารอ......");
///$("#btn_save").attr("disabled", "disabled");
},
success: function(res){
/*$("#btn_save").removeAttr("disabled");
$("#show_save").html(""); */
// $('#box_show_subject').html(res);
alert(res);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
Code (PHP)
ob_start();
session_start();
require_once ('../../../database/include.php');
// autoload
spl_autoload_extensions(".php");
spl_autoload_register();
use modules\member\member_save_data\member_register_savedata;
$sqlsvr = new member_register_savedata();
$conn = $sqlsvr->open_connection();
$query2 = "INSERT INTO tbl_main ( id , name ) VALUES ( 5 , 'บี๋' )";
$result2 = $sqlsvr->execute_query($conn, $query2);
$sqlsvr -> close_connection($conn);
// error ที่เกิด <b>Fatal error</b>: spl_autoload(): Class modules\member\member_save_data\member_save could not be loaded
|
ประวัติการแก้ไข 2014-09-12 14:01:07
 |
 |
 |
 |
Date :
2014-09-12 14:00:14 |
By :
babyprogrammer |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
modules\member\member_save_data\member_register_savedata.php
namespace modules\member\member_save_data;
class member_register_savedata {
..
..
..
}
insert update ใช้ execute_nonquery
select ใช้ execute_query
|
 |
 |
 |
 |
Date :
2014-09-12 16:07:44 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ในหน้า member_register_savedata.php นี่เราต้องสร้างเป็น class หรอครับ ผมเข้าใจว่าไฟล์นี้จะเขียน insert ได้เลย เพราะไฟล์นี้ของผมจะต้องใช้ทั้ง ดึงข้อมูล ลบข้อมูลด้วย ถ้าจะทำแบบไม่ต้องทำเป็น class แบบนั้นอีกได้ไหมครับ ช่วยชี้แนะด้วยครับ
|
 |
 |
 |
 |
Date :
2014-09-12 16:22:08 |
By :
babyprogrammer |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
modules\member\member_save_data\member_register_savedata.php
<?php
namespace modules\member\member_save_data;
class member_register_savedata implements idatabase {
public function open_connection() {
$connection_info = array("UID" => DB_USER,
"PWD" => DB_PASSWORD,
"Database" => DB_NAME,
"CharacterSet" => DB_CHARACTERSET);
$conn = sqlsrv_connect(DB_HOST, $connection_info);
if ($conn === FALSE) {
echo "Unable to connect.<br />";
die(print_r(sqlsrv_errors(), TRUE));
}
return $conn;
}
public function close_connection($conn) {
sqlsrv_close($conn);
}
public function execute_nonquery($conn, $query, $params = FALSE) {
$resource = ($params === FALSE) ? sqlsrv_query($conn, $query) : sqlsrv_query($conn, $query, $params);
if ($resource === FALSE) {
echo "Error in executing query.<br />";
die(print_r(sqlsrv_errors(), TRUE));
}
return $resource;
}
public function execute_query($conn, $query, $params = FALSE) {
$resource = ($params === FALSE) ? sqlsrv_query($conn, $query) : sqlsrv_query($conn, $query, $params);
if ($resource === FALSE) {
echo "Error in executing query.<br />";
die(print_r(sqlsrv_errors(), TRUE));
}
$results = array();
while ($row = sqlsrv_fetch_array($resource)) {
$result = new query_result();
foreach ($row as $key => $value) {
$result->$key = $value;
}
$results[] = $result;
}
return $results;
}
public function begin_transaction($conn)
{
if (sqlsrv_begin_transaction($conn) === FALSE ) {
echo "Cann't begin transaction.<br />";
die(print_r( sqlsrv_errors(), TRUE));
}
}
public function commit_transaction($conn, $querys)
{
$result = is_array($querys);
if ($result === TRUE) {
foreach ($querys as $q) {
$result = $result && $q;
}
if ($result === TRUE) {
sqlsrv_commit($conn);
}
else {
sqlsrv_rollback($conn);
}
}
return $result;
}
}
?>
|
 |
 |
 |
 |
Date :
2014-09-12 16:27:46 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าแบบนี้ก็เหมือนกับว่าใน modules มี
modules/member/member_save_date
modules/account/account_save_date
ผมต้องทำ class แบบตัวอย่างที่ทำให้ดู ไว้ในพาทข้างบนใช่ไหมครับ
|
 |
 |
 |
 |
Date :
2014-09-12 16:36:49 |
By :
babyprogrammer |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|