ระบบ ประมูล

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderator: mindphp, ผู้ดูแลกระดาน

ma-fiaza
PHP Newbie
PHP Newbie
โพสต์: 5
ลงทะเบียนเมื่อ: 20/10/2010 12:33 pm

ระบบ ประมูล

โพสต์ที่ยังไม่ได้อ่าน โดย ma-fiaza »

อันนี้นะครับ คือว่าระบบที่ผมทำเป็นระบบประมูล มานมีปันหาตรงที่ เสนอราคาเเล้วมาขี้นเเบบนี้
ก่อนหน้านี้ใช้ได้ไม่มีปัญหานะครับ พอดีว่าน้องมาเล่นที่เครื่องผมพยายามเเก้ให้หมดเเต่เเบบนี้ไม่เคยเจอ ใครทำได้ช่วยทีนะครับ
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\project29\item_details.php on line 92

บรรทัดที่ 92 คือ $result = mysql_query($sql);

โค้ด: เลือกทั้งหมด

<?php
session_start();
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
<title>Auction: Item Details</title>
<link rel="stylesheet" href="../css/style.css"  />
</head>

<body>
<?php
include("header.inc.php");
include("dbconn.inc.php");

//ตารางสำหรับกำหนดโรงร่างของเนื้อหา
echo "
<table align=center width=500>
<tr>
<td align=center>";

//อ่านค่า id ของสินค้าที่ส่งเข้ามาทาง Query String
$id = $_GET['item_id'];

//ถ้าเป็นการส่งข้อมูลการเสนอราคากลับเข้ามา
if($_POST) {
	//ถ้ายังไม่ได้เข้าสู่ระบบ จะย้ายไปที่เพจสำหรับการล็อกอิน
	if(!isset($_SESSION['user_id'])) {
		header("Location: user_login.php");
	}
	
	$user_id = $_SESSION['user_id'];
	$item_id = $id;
	$offer = $_POST['offer'];
	$valid_offer = false;
	
	//ก่อนที่จะจัดเก็บข้อมูลการเสนอราคา 
	//เราต้องตรวจสอบข้อมูลการเสนอราคาเดิมก่อน
	//โดยเริ่มจากการหาราคาปัจจุบันของสินค้านั้นก่อน
	$sql = "SELECT MAX(offer) FROM bid WHERE item_id = $item_id;";
	$result = mysql_query($sql);
	$max = mysql_result($result, 0, 0);
	
	//ถ้าได้ค่าว่าง แสดงยังไม่มีผู้เสนอราคา ก็ให้นำราคาเริ่มต้นมาใช้แทน
	if(empty($max)) {
		$sql = "SELECT starting_price FROM item
					WHERE item_id = $item_id;";
		$result = mysql_query($sql);
		$starting_price = mysql_result($result, 0, 0);
		
		//ถ้าราคาที่เสนอ ไม่น้อยกว่าราคาเริ่มต้น ก็แสดงว่าราคานั้นยอมรับได้
		if($offer >= $starting_price) {
			$valid_offer = true;
		}
	}
	else {	//ถ้าราคาที่เสนอมากกว่าราคาปัจจุบัน ก็แสดงว่าราคานั้นยอมรับได้
		if($offer > $max) {
			$valid_offer = true;
		}
	}
	
	//หากราคาที่เสนอนั้น เป็นราคทที่ยอมรับได้ ก็จัดเก็บลงในฐานข้อมูล
	if(is_numeric($offer) && $valid_offer) {
		$sql = "INSERT INTO bid VALUES
					(0, $item_id, $user_id, $offer);";
		@mysql_query($sql) or die(mysql_error());
	}
	else {	//หากราคาที่เสนอนั้นยอมรับไม่ได้ ก็แจ้งข้อผิดพลาดกลับไป
		echo "<div style=\"font-size: 12pt; color: red;\">ราคาที่เสนอ($offer) ไม่สามารถยอมรับไดั</div><br />";
	}
}

//ต่อไป คือการอ่านข้อมูลมาแสดงผล

$sql = "SELECT *, DATE_FORMAT(end_date, '%d/%m/%Y') AS ndate 
 			FROM item WHERE item_id = $id;";
$result = mysql_query($sql);
if(mysql_num_rows($result) == 0) {
	echo "ไม่พบข้อมูลสินค้านี้
			</td></tr></body></html>";
	exit;
}

$item = mysql_fetch_array($result);

//ตรวจสอบราคาสูงสุด
$sql ="SELECT MAX(offer) AS max_offer, COUNT(bid_id) AS num_bids
			FROM bid WHERE item_id = $id;";

$result = mysql_query($sql);
$bid = mysql_fetch_array($result);

if($bid['num_bids'] != 0) {
	$num_bids = $bid['num_bids'];
	$max_offer = $bid['max_offer'];
}
else {	//ถ้าไม่มีผู้เสนอราคา ให้ราคาปัจจุบันเท่ากับราคาเริ่มต้น
	$num_bids = 0;
	$max_offer = $item['starting_price'];
}

//แสดงผล
echo "
<div style=\"font-size:14pt;color:brown;\"> {$item['item_name']} </div> <br />

<b>ผู้ร่วมประมูล:</b> $num_bids 
-
<b>ราคาปัจจุบัน:</b> $max_offer 
-
<b>วันปิดประมูล</b>: {$item['ndate']}
<br /><br />

<img src=read_img.php?item_id=$id />
<br /><br />

{$item['description']} <br />";

//ถ้าเข้าสู่ระบบแล้ว ใ้ห้แสดงฟอร์มสำหรับรับข้อมูลการเสนอราคา
if(isset($_SESSION['user_id'])) {
?>
<br />
<div style="width: 300px; background-color: #CCFFFF; padding: 3px; text-align: center">

<!-- action ของฟอร์ม จะต้องนำค่า id ของสินค้ามาแนบแบบ Query String เอาไว้ด้วย
		เพื่อให้หลังการโพสต์ข้อมูลขึ้นไป สามารถนำไปใช้ตรวจสอบได้ว่าเป็นของสินค้าใด -->
		
<form action="<?php echo $_SERVER['PHP_SELF'] . "?item_id=$id"; ?>" method="post">
เสนอราคา:<input type="text" name="offer" />
<input type="submit" value="ตกลง"  /><br />
*ราคาที่เสนอต้องสูงกว่าราคาสูงสุดที่มีผู้่เสนอไว้แล้ว
</form>
</div>
<?php
}
else {
	echo "<br /><i>หากต้องการเสนอราคา ต้องล็อกอินเข้าสู่ระบบก่อน</i>";
}

echo "
</td>
</tr>
<tr>
<td style=\"padding-left: 100px;\">";

//แสดงประวัติการเสนอราคา ซึ่งก็คือการอ่านราคาทั้งหมดที่เคยมีผู้เสนอสำหรับสินค้านั้น
$sql = "SELECT bid.offer, user.user_name 
 			FROM bid, user
			WHERE bid.user_id = user.user_id 
			 	AND bid.item_id = $id 
			ORDER BY bid.offer DESC;";

$result = mysql_query($sql);

if(mysql_num_rows($result) > 0) {
	echo "<br /><b>ประวัติการเสนอราคาของรายการนี้:</b>
	 		<ul>";
	while($data = mysql_fetch_array($result)) {
		echo "<li> {$data['user_name']} - {$data['offer']} </li>";
	}
	echo "</ul";
}

echo "
</td>
</tr>
</table>";
?>

<p>&nbsp;</p>
</body>
</html>
แก้ไขล่าสุดโดย ma-fiaza เมื่อ 20/10/2010 5:21 pm, แก้ไขไปแล้ว 1 ครั้ง.
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41230
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: ระบบ ประมูล

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

เช็คค่าตัวแปล $sql ก่อนหน้านั้นครับว่าถูกหลักการเขียน หรือเปล่า
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ma-fiaza
PHP Newbie
PHP Newbie
โพสต์: 5
ลงทะเบียนเมื่อ: 20/10/2010 12:33 pm

Re: ระบบ ประมูล

โพสต์ที่ยังไม่ได้อ่าน โดย ma-fiaza »

บรรทัด 92 คืออันนี้นะครับ $bid = mysql_fetch_array($result);
ขอโทดทีผมหาบรรทัดผิด
ma-fiaza
PHP Newbie
PHP Newbie
โพสต์: 5
ลงทะเบียนเมื่อ: 20/10/2010 12:33 pm

Re: ระบบ ประมูล

โพสต์ที่ยังไม่ได้อ่าน โดย ma-fiaza »

อยากทำแต่ทำไม่ถูกเลยครับลองหานานเเล้วทำไม่ได้เลยครับ ช่วยด้วยนะครับ

ต้องเติมตรงไหน ว่าอะไร

ทำไม่ถูกจริงๆๆครับ

รบกวนหน่อยนะครับ ขอบคุนครับ
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41230
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: ระบบ ประมูล

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

เช็คคำสั่ง sql ที่ใช้ รัน query ก่อนที่จะได้ $result มาดูครับ
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ma-fiaza
PHP Newbie
PHP Newbie
โพสต์: 5
ลงทะเบียนเมื่อ: 20/10/2010 12:33 pm

Re: ระบบ ประมูล

โพสต์ที่ยังไม่ได้อ่าน โดย ma-fiaza »

mindphp เขียน:เช็คคำสั่ง sql ที่ใช้ รัน query ก่อนที่จะได้ $result มาดูครับ
ผมลองเช็คดู ก้อถูกนะครับ
รบก่วนช่วยผมหน่อยได้รึเปล่าครับ
ลองมาเกือบ ชั้วโมงยังเเก้ไม่ได้เลยครับ
pjgunner
PHP Jr. Member
PHP Jr. Member
โพสต์: 24
ลงทะเบียนเมื่อ: 16/08/2010 2:55 pm
ติดต่อ:

Re: ระบบ ประมูล

โพสต์ที่ยังไม่ได้อ่าน โดย pjgunner »

ผมคิดว่าคิวรี่ผิดครับ ยังไงต้องลองตรวจทานดูอีกที
ex.
$sql = '...';
$query = mysql_query($sql) or die($sql);

เอา error ไปยิงที่ phpmyadmin ดูครับ
ช่วยหน่อยนะครับ

Re: ระบบ ประมูล

โพสต์ที่ยังไม่ได้อ่าน โดย ช่วยหน่อยนะครับ »

ตอนนี้คือผมต้องเเก้ตอนไหนบ้างครับ query ตรงบรรทัดไหนหรอครับ รบกวนช่วยหน่อยนะครับ
ผมดูใน code ก้อง่ายจะถูกนะครับ รบกวนช่วยบอกเจาะจงหน่อยนะครับ ขอบคุนมาก
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41230
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: ระบบ ประมูล

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

ทำตามนี้แล้วดู Error ครับ
pjgunner เขียน:ผมคิดว่าคิวรี่ผิดครับ ยังไงต้องลองตรวจทานดูอีกที
ex.
$sql = '...';
$result= mysql_query($sql) or die($sql);

เอา error ไปยิงที่ phpmyadmin ดูครับ
or die($sql) คือว่ารันคำสั่ง sql แล้ว Error ให้มันแจ้ง คำสั่ง sql ออกมาแล้วจบการทำงาน

เวลาใช้จริงๆ อย่าใช้แสดง $sql ที่สำคัญ นะครับ
เปลี่ยนเป็น

โค้ด: เลือกทั้งหมด

$result= mysql_query($sql) or die( mysql_error() );
แทนก็ไ้้ด้ครับ
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
genocideaon
PHP Sr. Member
PHP Sr. Member
โพสต์: 56
ลงทะเบียนเมื่อ: 21/09/2010 3:57 pm

Re: ระบบ ประมูล

โพสต์ที่ยังไม่ได้อ่าน โดย genocideaon »

สร้างไฟล์ขึ้นมาใหม่ แล้วลองทำทีละส่วนดูคัฟ ทำทีละส่วนนะคัฟ ที่ละคำสั่ง

ส่วนที่ติดต่อกับถามข้อมูลอ่ะคัฟ

ถ้าคำสั่งไหนได้แล้วลองก็อปมาวางทับโค๊ดในไฟล์นี้ดูคัฟ

ผมก็เคยเป็น

มันเกิดขึ้นเพราะว่า เราใช้คำสั่งติดต่อกับฐานข้อมูลไม่ถูกคัฟ แค่นิดเดียวแค่นั้น

พยายามหน่อยนะคัฟ อย่าไปดูบรรทัดที่มันบอก error เพราะมันไม่ใช่ตรงนั้นหรอกคัฟ มันคือบรรทัดอื่นแล้วมันก็ส่งผลให้บรรทัดนั้น error คัฟ

แล้วก็อย่าลืมดูฐานข้อมูลด้วยนะคัฟ

ผมเป็นครั้งแรกผมแก้ไม่ได้ ผมต้อง ลง appserv ใหม่เลยหายคัฟ ก็ไม่รุ้ว่าเป็นเพราะอะไร

ไงก็เอาใจช่วยนะคัฟ
ตอบกลับโพส

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: Amazon [Bot], Google Adsense [Bot] และบุคลทั่วไป 99