พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com
PHP development / สอบถามเรื่องการดึงดาต้าเบส โดย...
โอ๋
โอ๋
Wed 12 Jul 2006 22:28:45

สอบถามเรื่องการดึงดาต้าเบส จากข้อมูลข้างล่าง

Table นี้เป็นการดึง  2 table มาแสดง ดังโค้ดข้างล่าง

SELECT d.no, d.mem_no, d.mem_name, v.serial
FROM `member` d
LEFT JOIN `game_serial` v ON v.number = d.no
WHERE 1

no mem_no mem_name serial
2 5491 chanaka2 14266-2288-5992
3 21281 torment 16925-1960-5117
4 20572 Insolence 12023-3994-2116
5 23218 sgigsgig 14473-6215-0492
6 23155 tep_s 17329-6640-5698

จากตาราง no คือ ลำดับการเล่นกิจกรรมคือจะไล่เรียงไปเรื่อย ๆ
mem_no คือสมาชิกที่เข้ามาเล่นกิจกรรม
mem_name คือชื่อของสมาชิกที่เข้ามาเล่นกิจกรรม
serial เป็น Table ที่เรา add ข้อมูลให้ตรงกับ no ของการเข้าร่วมเล่นกิจกรรม

ดังรูปข้างล่าง
no mem_no mem_name number serial
2 5491 chanaka2 2 14266-2288-5992
3 21281 torment 3 16925-1960-5117
4 20572 Insolence 4 12023-3994-2116
5 23218 sgigsgig 5 14473-6215-0492

ดังโค้ดข้างล่างนี้
SELECT d.no, d.mem_no, d.mem_name, v.number, v.serial
FROM `activity0024_os_sf` d
LEFT JOIN `activity0024_sf_serial` v ON v.number = d.no
WHERE 1


ผมก็เลยตัด no ของ serial ออก

สิ่งที่ต้องการโชว์คือ ระบบจะยืนยันการล็อคอินเข้าเว็บไซต์เสียก่อนถึงจะสามารถ เข้ามาเห็น serial ที่เราได้นำมาลิงค์ไว้ เช่น
เมื่อสมาชิก หมายเลข mem_no = 5491  ล็อคอินเข้ามาระบบ จะเจอ serial = 14266-2288-5992  ทันที โดยไม่ต้องกดปุ่มอะไรอีก

no mem_no mem_name serial
2 5491 chanaka2 14266-2288-5992


อยากจะรู้ว่าต้องเขียนสคริ๊ปเช็คยังไงว่า คนที่ล็อคอินเข้ามา mem_name คือใคร แล้ว มันจะดึงเฉพาะ serial ที่ระบุไว้มาโชว์

ส่วนสคริปด้านล่างนี้เป็นหน้าดึงจากดาต้าเบสมาโชว์ แต่มันดึงทั้งหมดมาโชว์

<?
$DEFINE_SITE = true;
include "../../../includes/common.php";
include "../../../includes/template.php";
$template = new template();

$v = initial($ck);

if (!$p || $p < 1){ $p = 1; }
$pp = 26;
$start = (int)($p -1)*$pp;


$serial = "$mem[name]";


$row1 = query("SELECT d.no, d.mem_no , d.mem_name, v.serial FROM `member` d LEFT JOIN `game_serial` v ON v.number = d.no WHERE 1 LIMIT $start,$pp");

$i = 0;
while ($r = fetchs($row1)){
 $color = ($color != "#FFFFFF" ? "#FFFFFF" : "#DFDFDF");
 $template->assign_block_vars('m',array(
  "color" => $color,
  "no" => $r[no],
  "mno" => $r[mem_no],
  "name" => $r[mem_name],
  "serial" => $r[serial],
  "time" => date("j M y H:i",$r[time]),
 ));
}

$syntax = $PHP_SELF;

$template->assign_vars(array(
 "page" => pageresult($syntax,$pp,$allpage,$p),
 "p" => $p,
 "ap" => $allpage,
));


$template->set_filenames(array(
 'body' => 'lists.html',
));

$template->pparse('body');
?>

ส่วนข้างล่างนี้เป็นหน้า .html ที่จะเอาโชว์ทาง browser

<!-- BEGIN m -->
        <tr bgcolor="{m.color}">
          <td width="52">{m.no}</td>
          <td width="79">{m.mno}</td>
          <td width="164">{m.name}</td>
          <td width="109">{m.serial}</td>
        </tr>
        <!-- END m -->

ยังไงรบกวนอีกรอบด้วยครับ


Administrator
Thu 13 Jul 2006 00:53:17
<?
$DEFINE_SITE = true;
include "../../../includes/common.php";
include "../../../includes/template.php";
$template = new template();

$v = initial($ck);

if (!$p || $p < 1){ $p = 1; }
$pp = 26;
$start = (int)($p -1)*$pp;


$serial = "$mem[name]";


$row1 = query("SELECT d.no, d.mem_no , d.mem_name, v.serial FROM `member` d LEFT JOIN `game_serial` v ON v.number = d.no WHERE 1 LIMIT $start,$pp");

$i = 0;
while ($r = fetchs($row1)){
 $color = ($color != "#FFFFFF" ? "#FFFFFF" : "#DFDFDF");
 $template->assign_block_vars('m',array(
  "color" => $color,
  "no" => $r[no],
  "mno" => $r[mem_no],
  "name" => $r[mem_name],
  //"serial" => $r[serial],
  "time" => date("j M y H:i",$r[time]),
 Wink);
}

$syntax = $PHP_SELF;

$template->assign_vars(array(
 "page" => pageresult($syntax,$pp,$allpage,$p),
 "p" => $p,
 "ap" => $allpage,
));


$template->set_filenames(array(
 'body' => 'lists.html',
));

$template->pparse('body');
?>

ส่วนข้างล่างนี้เป็นหน้า .html ที่จะเอาโชว์ทาง browser

<!-- BEGIN m -->
        <tr bgcolor="{m.color}">
          <td width="52">{m.no}</td>
          <td width="79">{m.mno}</td>
          <td width="164">{m.name}</td>
        </tr>
        <!-- END m -->



เท่านี้มันก็จะไม่โชว์ครับ แต่ว่าผมไม่เห็นโค๊ดว่าเช็ค login ตรงไหนเลยครับ

โอ๋
โอ๋
Thu 13 Jul 2006 09:38:25

อืม เอาโค้ดใหม่ครับ  อันล่างนี้เป็นตัวเช็คว่าใครเป็นสามาชิกหรือไม่เป็นสมาชิก
<?
$DEFINE_SITE = true;
include "../../../includes/common.php";
include "../../../includes/template.php";
$template = new template();

$v = initial($ck);
if ($mem[rank] > 0){

if ($step > 0){
 $startpage = "finish.html";
} else {
 $startpage = "recive.html";
}
} else {
 $startpage = "member.html";
}

$row1 = query("SELECT d.no, d.`mem_no` , d.`mem_name` , v.serial  FROM `member` d LEFT JOIN `game_serial` v ON v.number = d.no WHERE 1 LIMIT $start,$pp");

$i = 0;
while ($r = fetchs($row1)){
 $color = ($color != "#FFFFFF" ? "#FFFFFF" : "#DFDFDF");
 $template->assign_block_vars('m',array(
  "color" => $color,
  "no" => $r[no],
  "mno" => $r[mem_no],
  "name" => $r[mem_name],
  "serial" => $r[serial],
  "time" => date("j M y H:i",$r[time]),
));
}


$template->set_filenames(array(
 'body' => $startpage,
));

//$page_title = "Online-Station Activity :: Ran Online";
$template->pparse('body');
?>

ตัวที่เช็คว่าเป็นสมาชิกหรือไม่คือ if ($mem[rank] > 0){  นะครับ และถ้าไม่เป็นสมาชิก มันจะกระโดดมาที่
} else { $startpage = "member.html";  }

ผมก็เลยเอาโค้ดดึงค่าจากดาต้าเบสมาไว้ด้านล่างเพื่อกันคนที่ไม่ใส่สมาชิกเข้ามาได้

$row1 = query("SELECT d.no, d.`mem_no` , d.`mem_name` , v.serial  FROM `member` d LEFT JOIN `game_serial` v ON v.number = d.no WHERE 1 LIMIT $start,$pp");
while ($r = fetchs($row1)){
 $color = ($color != "#FFFFFF" ? "#FFFFFF" : "#DFDFDF");
 $template->assign_block_vars('m',array(
  "color" => $color,
  "no" => $r[no],
  "mno" => $r[mem_no],
  "name" => $r[mem_name],
  "serial" => $r[serial],
  "time" => date("j M y H:i",$r[time]),
));    


ต้องดึงโค้ดยังไงเพื่อให้เช็คว่าสมาชิกคนนี้ล็อกอินเข้ามา

Administrator
Thu 13 Jul 2006 10:23:09
<!-- BEGIN m -->
        <tr bgcolor="{m.color}">
          <td width="52">{m.no}</td>
          <td width="79">{m.mno}</td>
          <td width="164">{m.name}</td>
          <td width="109"><? if($mem[rank] > 0){ ?>{m.serial}<? } ?></td>
        </tr>
<!-- END m -->


ลองแบบนี้ดูครับผมไม่แน่ใจว่าตัวแปร $mem จะมีขอบเขตถึงในส่วนแสดงผลหรือไม่
โอ๋
โอ๋
Thu 13 Jul 2006 12:08:20

<?
$DEFINE_SITE = true;
include "../../../includes/common.php";
include "../../../includes/template.php";
$template = new template();

$v = initial($ck);
if ($mem[rank] > 0){

$row1 = fetchs(query("SELECT d.no, d.`mem_no` , d.`mem_name`, v.serial FROM `member` d LEFT JOIN `game_serial` v ON v.number = d.no WHERE d.`mem_no` = '$MEM[no]' LIMIT 1 "));

 if ($row1[mem_no] > 0){
  $startpage = "recive.html";
  
  $template->assign_block_vars('m',array(
   "name" => $row1[mem_name],
   "serial" => $row1[serial],
  Wink);

 } else {
  $startpage = "sorry.html";
 }
 $template->assign_vars(array(
   "name" => $row1[mem_name]
  Wink);
} else {
 $startpage = "member.html";
}

$template->set_filenames(array(
 'body' => $startpage,
));

//$page_title = "Online-Station Activity :: Ran Online";
$template->pparse('body');
?>

ข้างบนนี้ผมได้แก้ใหม่แล้วครับ ถ้าไม่ล็อคอินมันก็จะเข้าหน้า member.html ซึ่งจะโชวบอกว่ายังไม่ได้ล็อคอิน อันนี้ใช้ได้  ตารางข้างล่างเป็นดาต้าเบสที่เก็บข้อมูลไว้

no mem_no mem_name number serial
2 5491 chanaka2 2 14266-2288-5992
3 21281 torment 3 16925-1960-5117
4 20572 Insolence 4 12023-3994-2116


มันตึดตรงที่เวลาล็อคอินเรียบร้อยแล้ว เมื่อไปกดรับ รหัส  มันก็จะกระโดดไปที่หน้า sorry.html ซึ่งจะแจ้งว่า คุณไม่ได้เป็นผู้โชคดี แต่จริง ๆ มันก็จะน่าได้รับ รหัส

ซึ่งจากตรงนี้ ON v.number = d.no   มันน่าจะดึงได้ถูกต้องเป็นเพราะอะไรครับ
Administrator
Thu 13 Jul 2006 12:33:46
คุณลองเรา query ไปใส่ใน phpMyAdmin เพื่อทำการ debug ดูครับ อาจจะมีพิมพ์ผิด หรือว่าข้อมูลเป็นไปไม่ได้ครับ
โอ๋
โอ๋
Thu 13 Jul 2006 13:21:00

ลองแล้วครับ คือใช้ได้เลย ผมลองเอา

SELECT d.no, d.`mem_no` , d.`mem_name`, v.serial FROM `member` d LEFT JOIN `game_serial` v ON v.number = d.no WHERE d.`mem_no` = '$MEM[no]' LIMIT 1

ผมเอา
.`mem_no` = '$MEM[no]'

แทนด้วย  .`mem_no` = '20572]'

ผลที่ออกมาก็ได้ปกติครับ

no mem_no mem_name number serial
4 20572 Insolence 4 12023-3994-2116

ผมก็เลยงง ว่าทำไมมันแจ้งว่า ไม่ได้รับ รหัส เพราะ no = number อะครับ

Administrator
Thu 13 Jul 2006 13:28:36
งั้นลอง echo query ทั้งหมดดูครับ ตัวแปร $mem[no] อาจจะมีค่าไม่ตรงตามที่คิดครับ
โอ๋
โอ๋
Thu 13 Jul 2006 13:48:14

echo query ยังไงเอ่ย รบกวนช่วยเขียนให้ทีครับ

Administrator
Thu 13 Jul 2006 14:54:34
echo "SELECT d.no, d.`mem_no` , d.`mem_name`, v.serial FROM `member` d LEFT JOIN `game_serial` v ON v.number = d.no WHERE d.`mem_no` = '$MEM[no]' LIMIT 1"

เพื่อดูว่าตัวแปร $MEM[no] มีค่าถูกต้องหรือไม่ ถ้าทุกอย่างถูกต้องแล้วลองเอา query ที่แสดงผลออกมานั้น ไปรันใน phpMyAdmin ดูครับ
Reply
Name:
E-mail:
Home | Services | Forum | Classified | Directories | Support | Contact
ATOM feed RSS 0.9 feed RSS 1.0 feed RSS 2.0 feed
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login