Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > เกิด error Notice: Array ... , Notice: Undefined... , Fatal error: Call to a member เพราะผิดพลาดตรงไหนบ้างครับ



 

เกิด error Notice: Array ... , Notice: Undefined... , Fatal error: Call to a member เพราะผิดพลาดตรงไหนบ้างครับ

 



Topic : 120348



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์




มันขึ้น error แบบนี้ครับ
0
Notice: Array to string conversion in C:\xampp\htdocs\paypoint\testpage\funtion\data.php on line 43

Notice: Array to string conversion in C:\xampp\htdocs\paypoint\testpage\funtion\data.php on line 43

Notice: Undefined variable: mysqli in C:\xampp\htdocs\paypoint\testpage\funtion\data.php on line 48

Fatal error: Call to a member function query() on null in C:\xampp\htdocs\paypoint\testpage\funtion\data.php on line 48


อันนี้เป็นโค้ดครับ

data.php
Code (PHP)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body> 
<?php
class connectDB
{
	  	private $_host = "localhost";
		private $_pass = "";
       	private $_user = "root";
		private $_db   = "mammon";
		
		private function openDB()
		{
			error_reporting(E_ALL);
			$charset = "set names utf8";
			$mysqli = new mysqli("$this->_host","$this->_user","$this->_pass","$this->_db");
			echo mysqli_connect_errno();
			if(mysqli_connect_errno())
			{
				echo "can't connect database";
				exit();
				}
				
			}
		private function closeDB()
		{
			error_reporting(E_ALL);
			mysqli_close();
			}
		public function Insert($Table,$ArrCl,$ArrInf,$Id)
		{
			self::openDB();
			error_reporting(E_ALL);
			$volue = count($ArrCl);
			
				if($Id='*')
			{
			$sql = "INSERT INTO '".$Table."' ('".$ArrCl."')VALUES('".$ArrInf."')";
			}else
				{
			$sql = "INSERT INTO '".$Table."' ('".$ArrCl."')VALUES('".$ArrInf."') WHERE '00_Id'= '".$Id."'";
			}				
				$mq = $mysqli->query($sql);
			self::closeDB();
			}
		
}

			
	?>

</body>
</html>



form.php
Code (PHP)
<?php
require "../funtion/data.php";

//test
$EE = $_REQUEST['EE'];
$PP = $_REQUEST['PP'];

$conn = new connectDB;
if($EE)
{
	$Ai = array($EE,$PP);
	$Ac = array('e','p');
	$In = $conn->Insert('test',$Ac,$Ai,'*');
	if($In)
	{
		echo "ข้อมูลเรียบร้อย";
		}else{
			echo"เกิดข้อผิดพลาด";
			}
	}else{
		echo "ไม่มีข้อมูล";
		}

?>


test.php
Code (PHP)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<?php ?>
</head>

<body>
<form action="testpage/page/form.php" method="post" enctype="multipart/form-data">
<input name="EE" type="text">
<input name="PP" type="text">
<input name="ww" type="submit">
</form>
</body>
</html>


มันผิดพลาดตรงไหนครับ เพราะตอนผมเทส openDB ก็รันได้(แต่ตอนนั้นมไม่ได้ใส่ privateนะครับ)แต่พอมาทำต่อก็เป็นแบบนี้หละครับ



Tag : PHP, MySQL









ประวัติการแก้ไข
2015-12-06 11:55:18
2015-12-06 12:09:30
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2015-12-05 18:03:25 By : satsukode View : 1990 Reply : 6
 

 

No. 1



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


private แล้วจะเรียกจากไฟล์นอกคลาสได้ยังไงครับ
คุณลองทำความเข้าใจเรื่อง public protected private เสียก่อนดีกว่า

แล้วใน error มันแจ้งบรรทัดอะไรมาแล้ว ทำไมคุณไม่ก๊อปหรือไฮไลท์บรรทัดนั้นด้วยอะครับ เพราะผมมองแบบนี้ก็หาไม่เจอว่าบรรทัดปัญหาที่ว่านั้นมันอันไหนแน่?
bb code [ php ] ก็มี ก็ลองใช้ดูด้วยครับ โค้ดที่เอามาให้คนช่วยคนอื่นจะได้อ่านง่ายขึ้น








ประวัติการแก้ไข
2015-12-06 10:23:31
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-06 10:20:22 By : mr.v
 


 

No. 2



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์


แก้แล้วนะครับ ขอโทษด้วยนะครับที่ตอนแรกอ่านยาก

ส่วนที่บอกว่าเป็น เพราะ private ผมไม่แน่ใจนะครับ เพราะตัวที่เป็น private เช่น openDB host use ทั้งหมดผมให้มันทำงานอยู่แต่ใน class อยู่แล้ว จะไม่ให้ฟังชั่นนอก class มาเกี่ยวข้องเลย ส่วนฟังชั่นที่อยู่ใน class เดียวกัน แต่ต้องถูกเรียกใช้จากที่อื่นเช่นพวก insert delete select ผมให้เป็น public หมดนะครับ เหมือนตัวที่เป็น private เป็นแค่ตัวที่สนับสนุน public ไม่รู้ว่าผมเข้าใจถูกหรือป่าวครับ

ขอบคุณทุกคำแนะนำครับ


ประวัติการแก้ไข
2015-12-06 12:28:22
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-06 11:58:44 By : satsukode
 

 

No. 3



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


จากไฟล์ form.php
Code (PHP)
$Ai = array($EE,$PP);
$Ac = array('e','p');
$In = $conn->Insert('test',$Ac,$Ai,'*');

มันไปเรียก method insert ซึ่งใน argument ที่ 2 และ 3 คุณกำหนดตรงนี้เป็น array()
array($EE, $PP); และ array('e', 'p');


ในขณะที่ภายใน method insert()
Code (PHP)
public function Insert($Table,$ArrCl,$ArrInf,$Id)
{
	self::openDB();
	error_reporting(E_ALL);
	$volue = count($ArrCl);
			
	if($Id='*') {
		$sql = "INSERT INTO '".$Table."' ('".$ArrCl."')VALUES('".$ArrInf."')";
	} else {
		$sql = "INSERT INTO '".$Table."' ('".$ArrCl."')VALUES('".$ArrInf."') WHERE '00_Id'= '".$Id."'";
	}				
	$mq = $mysqli->query($sql);
	self::closeDB();
}

argument หรือ parameter ที่สองและสาม $ArrCi, $ArrInf คุณเอาไปต่อสตริงซะเฉยๆ ทั้งๆที่มันรับมาน่าจะเป็น array อ่านจากชื่อตัวแปรแล้วก็น่าจะเป็น array แต่ดันต่อสตริง มันจึงทำไม่ได้ มันจึงแจ้งว่า
Quote:
Notice: Array to string conversion

คุณต้องหาวิธี loop array ออกมาก่อนเพื่อใช้ต่อ string ถ้าจะทำแบบนั้นนะครับ

ส่วน
Quote:
Notice: Undefined variable: mysqli
เนื่องมาจากว่าใน method เดียวกันนี้ จู่ๆคุณก็เรียกใช้ $mysqli โดยหาที่มาไม่ได้ มันจึงขึ้น
แต่จากที่ดู คุณคงต้องการใช้ $mysqli จาก method openDB() ดังนั้นตัวแปร $mysqli จึงควรถูกส่งต่อข้าม method ได้ด้วยการกำหนดลงไปยัง property
ตัวอย่าง
Code (PHP)
class ConnectDb
{

    public $mysqli;

    private function openDB()
    {
        $this->mysqli = new mysqli();
    }

    public function insert()
    {
        $mq = $this->mysqli->query($sql);
    }

}

ผมย่อยตัวอย่างให้เหลือน้อยๆเฉพาะที่เกี่ยวกับ $mysqli แล้วคุณลองทำความเข้าใจดูนะครับ.
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-06 12:43:11 By : mr.v
 


 

No. 4



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


เฉพาะส่วน insert() ถ้าการกำหนดค่า array name ตัวหนึ่ง value อีกตัวหนึ่ง แบบนั้นอาจจะเกิดการพลาดได้
ผมคิดว่าน่าจะลองแบบนี้
Code (PHP)
$insert_name_value = array(
    'e' => $EE,
    'p' => $PP,
);

คือกำหนด key เป็น field name => value เป็น field value ไปแล้วเวลาเช็คมันจะพลาดยากกว่า.

การเรียกใช้ก็เปลี่ยนนิดหน่อย ถ้าจะทำอย่างของผม
Code (PHP)
public function insert($table, array $field_value, $id)
{
    $fields = array_keys($field_value);
    $values = array_values($field_value);

    // build sql insert string.
    $sql = 'INSERT INTO `'.$table.'`';
    $sql .= ' ('.implode(',', $fields).')';
    $sql .= ' VALUES';
    $sql .= ' ('.implode(',', $values).')';
    if ($id != '*') {
        $sql .= ' WHERE 00_Id = '.$id;
    }

    // clear junk
    unset($fields, $values);
}

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-06 12:59:12 By : mr.v
 


 

No. 5



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์


เฮ!!! ได้แล้วครับ ขอบคุณครับ แต่มันมีปัญหากับ

Warning: mysqli_close() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\paypoint\testpage\funtion\data.php

คิดว่าน่าจะเป็นที่ mysqli_close() นิดหน่อย เดี๋ยวผมลองหาทางแก้เองก่อน แต่แจ้งเตือนเดิมหมดแล้วครับ ขอบคุณมากครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-06 15:00:53 By : satsukode
 


 

No. 6



โพสกระทู้ ( 1,636 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

class ที่ทำเดิม ถูกต้องแล้วครับ ผิดที่ ต่อ string เอา array มาต่อ ห้วนๆ โดยไม่มีการแปลงให้เป็น string ก่อน

คำสั่งการแปลง string ก็จากที่ mr.v ทำให้ดูนั่นแหล่ะครับ


ส่วน mysqli_close() ต้องการ 1 parameter ซึ่งก็คือตัวแปร สีแดงนี้ $mysqli = new mysqli(....)

ก็ให้ประกาศเป็น private เอาไว้
private $cnx_id;

และเมื่อประกาศเป็น oop ก็ควรเรียกใช้ แบบ oop ไปเลยครับ อย่าเรียกใช้ผสม ระหว่าง procedural code กับ oop ครับ
จะสับสนเอานะครับ

วิธีการเรียกใช้แบบ oop
$this->cnx_id = new mysqli(....) or die ( $this->cnx_id->error);
$this->cnx_id->close();


วิธีเรียกใช้แบบ procedural code
$this->cnx_id = mysqli_connect( ..... ) or die ( msyqli_connect_error());
mysqli_close($this->cnx_id);

ปล. ดูปักหมุดไว้ก็ได้ครับ


ประวัติการแก้ไข
2015-12-06 16:41:24
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-06 16:40:37 By : NewbiePHP
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : เกิด error Notice: Array ... , Notice: Undefined... , Fatal error: Call to a member เพราะผิดพลาดตรงไหนบ้างครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่