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 -->
ยังไงรบกวนอีกรอบด้วยครับ
$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>
</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]),
));
ต้องดึงโค้ดยังไงเพื่อให้เช็คว่าสมาชิกคนนี้ล็อกอินเข้ามา
<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],
 
);
} else {
$startpage = "sorry.html";
}
$template->assign_vars(array(
"name" => $row1[mem_name]
 
);
} 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 มันน่าจะดึงได้ถูกต้องเป็นเพราะอะไรครับ
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 อะครับ
Thu 13 Jul 2006 13:48:14
echo query ยังไงเอ่ย รบกวนช่วยเขียนให้ทีครับ
เพื่อดูว่าตัวแปร $MEM[no] มีค่าถูกต้องหรือไม่ ถ้าทุกอย่างถูกต้องแล้วลองเอา query ที่แสดงผลออกมานั้น ไปรันใน phpMyAdmin ดูครับ

















