Thu 20 Jul 2006 14:44:14
โค้ด 1
$row1 = query("SELECT * FROM `activity0026_audition_serial` ORDER BY RAND( ) LIMIT 1 ");
while ($r = fetchs($row1)){
$template->assign_block_vars('fin',array(
"serial" => $r[serial], ));}
โค้ด 2
query("INSERT INTO `activity0026_audition`
SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `serial` = '$r[serial]', `time` = '$time'");
จากโค้ดด้านบน
โค้ด 1 << เป็นโค้ดในการดังข้อมูลมาจาก table ที่มี serial : id , serial การนำไปโชว์คือ ใช้ {fin.serial}
โค้ด 2 เป็นโค้ดในการเพิ่มข้อมูลของสมาชิกที่เข้ามาเล่นกิจกรรม
จากโค้ดทั้งหมดของไฟล์ index.php
<?
$DEFINE_SITE = true;
include "../../../includes/common.php";
include "../../../includes/template.php";
$template = new template();
$v = initial($ck);
if ($mem[rank] > 0){
$step = ($_POST[vote] != "" ? 1 : 0);
if ($_POST[poll] != "" && $step > 0)
{ $poll = $_POST[poll];
$row1 = query("SELECT * FROM `game_serial` ORDER BY RAND( ) LIMIT 1 ");
while ($r = fetchs($row1)){
$template->assign_block_vars('fin',array(
"serial" => $r[serial], ));}
query("INSERT INTO `game_id`
SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `serial` = '$r[serial]', `time` = '$time'");
$startpage = "finish.html";
if (mysql_insert_id() > 0){
} else {
$template->assign_block_vars('al',null);
}
} else {
$startpage = "main.html";
}
} else {
$startpage = "member.html";
}
$template->set_filenames(array(
'body' => $startpage,
));
$template->pparse('body');
?>
จากผลของการตอบกิจกรรมแล้ว หน้าแสดงผลจะให้เป็นแบบนี้ที่อยู่ในช่องสี่เหลี่ยม
|
SCAD345 |
โค้ดที่ได้ของคุณคือ SCAD345 << ได้ id
เสียใจด้วยนะค่ะ << ไม่ได้
คือผมได้เพิ่มโค้ด INSERT INTO ตรงนี้เข้าไป `serial` = '$r[serial]', เพื่อที่จะให้มันดึง id "SCAD345" ที่ได้จาก โค้ด 1 นำมาเพิ่มใน table ชื่อ game_id แต่มันไม่ยอม add เข้าไป
| 112 | 0 | Guest | 3 | 1153380343 |
ไม่รู้ว่าผิดตรงไหนอ่ะครับ
สรุปคือ อยากเอา id ที่ดึงมาจาก table ชื่ game_serial มา add เข้าไปใน table ชื่อ game_id
ไม่รู้ว่าตรงนี้ผิดหรือเปล่า `serial` = '$r[serial]', แต่พอผมเอาค่านี้ออกไปเป็น
`serial` = 'serial', ค่าที่ได้ใน table : game_id จะเป็น
| 112 | 0 | Guest | 3 | serial | 1153380343 |
รบกวนอีกทีครับ
$serial = "";
$row1 = query("SELECT * FROM `game_serial` ORDER BY RAND( ) LIMIT 1 ");
while ($r = fetchs($row1)){
$serial = $r[serial];
$template->assign_block_vars('fin',array(
"serial" => $r[serial], ));}
query("INSERT INTO `game_id`
SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `serial` = '$serial', `time` = '$time'");
เข้าใจว่าน่าจะเกิดจากตัวแปร r ที่คุณเรียกใช้มีขอบเขตไม่ถึงคำสั่ง insert ครับ
Thu 20 Jul 2006 15:38:31
ได้แล้วครับผม ขอบคุณมากครับ แต่ช่วยอธิบายหน่อยครับว่ามันมาไม่ถึงยังไงเอ่ย แบบ งง อ่ะครับ
Thu 20 Jul 2006 15:42:09
อืม งั้นขอเพิ่มเติมอีกหน่อยนะครับ จากโค้ดที่ให้ไปเนี่ย ถ้าจะทำให้เช็คว่า คนที่ได้ id = "ยินดีด้วยนะค่ะ" ถ้าครบ 50 คนต้องเพิ่มคำสั่งตรงไหน แล้วก็ถ้าใส่สคริปว่า คนที่เข้ามาเล่นแล้วจะไม่สามารถเข้ามาได้อีก แต่ผมอยากใส่สคริปว่า ถ้าคนนั้นเล่นไปแล้ว หลังจากนี้ 1 ชั่วโมง สามารถเข้ามาเล่นใหม่ได้ อ่ะครับ
$row1 = query("SELECT * FROM `game_serial` ORDER BY RAND( ) LIMIT 1 ");
while ($r = fetchs($row1)){
$template->assign_block_vars('fin',array("serial" => $r[serial], ));
}
ตัวแปร $r ถูกสร้างภายใน loop while ครับ จึงจบขอบเขตของตัวมันเองเมื่ออยู่นอกวงเล็บครับการนับว่ามี "ยินดีด้วยนะค่ะ" ครบ 50 หรือยัง
$row1 = query("SELECT COUNT(no) AS num FROM game_id WHERE serial='ยินดีด้วยนะค่ะ'");
$count = mysql_fetch_array($row1, MYSQL_ASSOC);นำตัวแปร $count["num"] ไปตรวจสอบครับ เช่น if($count["num"] >= 50)
Thu 20 Jul 2006 16:08:28
ขอบคุณครับจะลองดูครับ
Thu 20 Jul 2006 17:00:39
เพิ่มเติมอีกครับ พอดี โค้ดทีให้มาก่อนหน้านี้มัน save ลง db แล้วครับ แต่พอมีคนมาเล่นกิจกรรมใหม่มันก็ run serial อันใหม่ให้เลยครับ แทนที่มันจะไป หน้า แจ้งว่า ท่านเข้ามาเล่นใหม่แล้วอ่ะครับ
<?
$DEFINE_SITE = true;
include "../../../includes/common.php";
include "../../../includes/template.php";
$template = new template();
$v = initial($ck);
if ($mem[rank] > 0){
$step = ($_POST[vote] != "" ? 1 : 0);
if ($_POST[poll1] != "" && $step > 0){
$startpage = "finish.html";
$poll = $_POST[poll1];
query("INSERT INTO `game_id` SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]' , `poll` = '$poll' , `poll2` = '$poll2' ,`poll3` = '$poll3' , `time` = '$time'");
if (mysql_insert_id() > 0){
$template->assign_block_vars('fin',null);
} else {
$template->assign_block_vars('al',null);
}
} else {
$startpage = "main.html";
}
} else {
$startpage = "member.html";
}
$template->set_filenames(array(
'body' => $startpage,
));
$page_title = "Online-Station Activity :: Dark Story";
$template->pparse('body');
?>
โค้ดข้างบนเป็นต้นฉบับเลยครับ ที่ยังไม่ได้เพิ่มเติมการดึงข้อมูลจาก id_serial
ส่วนอันนี้ต้องเพิ่มเข้าไปครับ
$row1 = query("SELECT * FROM `game_serial` ORDER BY RAND( ) LIMIT 1 ");
พอดีผมลองขยับโน่นขยับนี่แล้วมันไม่ยอม add เข้าไปใน db เลย อ่ะครับ
เหอะๆ แต่พอจะเอาแบบเดิมก็ไม่ยอมบล็อคว่าเล่นแล้วอ่ะ ถ้ามันบล็อคมันจะวิ่งไปที่หน้า finish.html ช่องข้างนี้นี้อ่ะครับ
<!-- BEGIN al -->
<tr>
<td height="20" colspan="2"> <p align="center"> <font face="Tahoma" size="2">
<span lang="th"> คุณลงทะเบียนกับเราไปก่อนหน้านี้แล้ว</span></font></td>
</tr>
<!-- END al -->
ต้องแก้ตรงไหนบ้างครับ
$DEFINE_SITE = true;
include "../../../includes/common.php";
include "../../../includes/template.php";
$template = new template();
$v = initial($ck);
if ($mem[rank] > 0){
$step = ($_POST[vote] != "" ? 1 : 0);
if ($_POST[poll1] != "" && $step > 0){
$res = mysql_query("SELECT time FROM game_id WHERE mem_no='".$mem[no]."'");
if(mysql_num_rows($res)){
//เล่นแล้ว
if(time() < ($row["time"] + 3600)){
//เล่นแล้วไม่เกิน 1 ชั่วโมง
header("Location: finish.html");
}else{
//เล่นแล้วมากกว่า 1 ชั่วโมง
$row1 = query("SELECT COUNT(no) AS num FROM game_id WHERE serial='ยินดีด้วยนะค่ะ'");
$count = mysql_fetch_array($row1, MYSQL_ASSOC);
//มีผู้เล่นครบ 50 คนแล้ว
}else{
//ทำการสุ่ม
$serial = "";
$row1 = query("SELECT * FROM `game_serial` ORDER BY RAND( ) LIMIT 1 ");
while ($r = fetchs($row1)){
$serial = $r[serial];
$template->assign_block_vars('fin',array("serial" => $r[serial], ));
}
query("INSERT INTO `game_id` SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `serial` = '$serial', `time` = '$time'");
}
}
}else{
//ยังไม่เคยเล่น
$row1 = query("SELECT COUNT(no) AS num FROM game_id WHERE serial='ยินดีด้วยนะค่ะ'");
$count = mysql_fetch_array($row1, MYSQL_ASSOC);
if($count["num"] >= 50){
//มีผู้เล่นครบ 50 คนแล้ว
}else{
//ทำการสุ่ม
$serial = "";
$row1 = query("SELECT * FROM `game_serial` ORDER BY RAND( ) LIMIT 1 ");
while ($r = fetchs($row1)){
$serial = $r[serial];
$template->assign_block_vars('fin',array("serial" => $r[serial], ));
}
query("INSERT INTO `game_id` SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `serial` = '$serial', `time` = '$time'");
}
}
$startpage = "finish.html";
$poll = $_POST[poll1];
query("INSERT
INTO `game_id` SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]' ,
`poll` = '$poll' , `poll2` = '$poll2' ,`poll3` = '$poll3' , `time` =
'$time'");
if (mysql_insert_id() > 0){
$template->assign_block_vars('fin',null);
} else {
$template->assign_block_vars('al',null);
}
} else {
$startpage = "main.html";
}
} else {
$startpage = "member.html";
}
$template->set_filenames(array(
'body' => $startpage,
));
$template->pparse('body');
?>
Thu 20 Jul 2006 17:48:06
เอาโค้ดลองดูแล้วครับมัน add ลงดาต้าเบส แต่ลองเล่นอีกครั้งมันก็ สุ่ม serial ขึ้นมาอีกอ่ะครับ ถ้าจะสร้างหน้าใหม่ให้มันกระโดดไป ต้องเซ็ทตรงไหนครับ เพราะหน้า finish.html ผมทำเป็นหน้าจบ การเล่น และหน้า คุณเคยเข้ามาเล่นแล้ว โดยใช้ <!-- BEGIN fin --> xxx <!-- END fin --> , <!-- BEGIN a1 --> xxx <!-- END a1 -->
สองอันนี้เลยครับ
หรือว่าถ้าจะสร้างหน้า .html ให้มันกระโดดไปเลย คือแยกไฟล์เสร็จกับ เคยเข้ามาแล้วต้องเพิ่มตรงไหนบ้างครับ
query("INSERT INTO `game_id` SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `serial` = '$serial', `time` = '".time()."'");
Thu 20 Jul 2006 22:58:57
ใช้โค้ดก่อนหน้านี้คือ ถ้ามีการเล่นกิจกรรมแล้วมันจะ add เฉพาะอันที่มาครั้งแรก ส่วนครั้งต่อ ๆ ไปมันจะไม่ add เพิ่มเข้ามานะครับ
หลังจากที่ใส่โค้ดให้มาบรรทัดนึงเนี่ยก็ยังเหมือนเดิมครับ เข้าเล่นกิจกรรมได้อีก แต่มันก็บันทึกเฉพาะค่าอันแรกเท่านั้นครับ เป็นเพราะอะไรเอ่ย
ลองใส่ echo "SELECT time FROM game_id WHERE mem_no='".$mem[no]."'"; ไว้ก่อนหน้า $res = mysql_query("SELECT time FROM game_id WHERE mem_no='".$mem[no]."'"); แล้วลองเอา query ที่ได้ไปรันใน phpMyAdmin ดูครับว่าสามารถแสดงผลถูกต้องหรือไม่ คือจะต้องได้เวลาของผู้ที่เป็น member คนปัจจุบันครับ
Fri 21 Jul 2006 11:17:05
คุณ Admin ครับ พอดีมึนกะโค้ดมากเลยอ่ะครับ พอดีผมลองเอาตัวเก่ามาใช้ เอาแค่ว่า คนที่เข้ามาเล่นกิจกรรมแล้ว ถ้าเข้ามาแล้วก็เข้ามาไม่ได้อีกอ่ะครับ แต่มันขึ้นมาสองอันคือ ถ้าเข้ามาเล่นอีกครั้งมันจะแจ้ง ว่ามา ได้หรือไม่ได้ แล้วก็ขึ้นมาอีกว่า คุณได้เข้ามาเล่นแล้วค่ะ กรุณาเข้ามาร่วมกิจกรรมอีกครั้งนึงนะค่ะ
คือขึ้น ในช่วง <!-- BEGIN fin --> xxxx <!-- END fin --> กับ <!-- BEGIN al --> xxxx <!-- END al -->
พร้อมกันทั้งสองอันอ่ะครับ ผมลองย้ายสคริปขึ้นไปหรือลงมา มันก็ไม่ได้ซักที ถ้าจะให้มันขึ้นเฉพาะ <!-- BEGIN al --> xxxx <!-- END al -->
แต่เวลาเล่นกิจกรรมมันก็ไม่โชว์ว่า id game
โค้ดนี้ตอนเล่นกิจกรรมครั้งแรกมันจะโชว์ ว่าได้หรือไม่ได้ ซึ่งปกติ แต่พอเข้ามาเล่นใหม่มันจะโชว์ id ใหม่ พร้อมแจ้งว่า คุณเคยเล่นมาแล้ว แต่ผมอยากให้มันแจ้งมาว่า คือ ถ้าเล่นแล้วให้แจ้งเฉพาะข้อความที่อยู่ใน <!-- BEGIN al -->คุณได้เข้ามาเล่นกิจกรรมนี้แล้ว<!-- END al --> นะครับ
ต้องย้ายสคริปตัวไหนบ้างครับ
<?
$DEFINE_SITE = true;
include "../../../includes/common.php";
include "../../../includes/template.php";
$template = new template();
$v = initial($ck);
if ($mem[rank] > 0){
$step = ($_POST[vote] != "" ? 1 : 0);
if ($_POST[poll] != "" && $step > 0)
{ $poll = $_POST[poll];
$serial = "";
$row1 = query("SELECT * FROM `game_serial` ORDER BY RAND( ) LIMIT 1 ");
while ($r = fetchs($row1)){
$serial = $r[serial];
$template->assign_block_vars('fin',array(
"serial" => $r[serial], ));}
query("INSERT INTO `game_id`
SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `serial` = '$serial', `time` = '$time'");
$startpage = "finish.html";
if (mysql_insert_id() > 0){
} else {
$template->assign_block_vars('al',null);
}
} else {
$startpage = "main.html";
}
} else {
$startpage = "member.html";
}
$template->set_filenames(array(
'body' => $startpage,
));
$template->pparse('body');
?>
Fri 21 Jul 2006 12:12:39
finish.html เอาไว้โชว์ค่าจาก ไฟล์ index.php อะครับ
Fri 21 Jul 2006 12:53:56
ตอนนี้ใช้ได้แล้วครับ ขอบคุณมาก ๆ ครับ อิ ๆ งั้นช่วยแนะนำผมหน่อยว่า ถ้าผมจะใส่สคริปเพื่อเช็คการเข้าเล่นกิจกรรม คนละ 1 ชั่วโมงต้องใส่ยังไงบ้าง เพราโค้ดที่คุณ admin ให้มาตอนแรก ๆ ผมไม่รู้จะใส่ยังไงอ่ะครับ ส่วน index.php เสร็จเรียบร้อยแล้วคับ เหลือแค่ตัวตั้งเวลาอย่างเดียว
โค้ดข้างล่าง index.php เป้นโค้ดในการสั่งให้ผลออกไปที่ finish.html
<?
$DEFINE_SITE = true;
include "../../../includes/common.php";
include "../../../includes/template.php";
$template = new template();
$v = initial($ck);
//if ($mem[rank] > 0){
$step = ($_POST[vote] != "" ? 1 : 0);
if ($_POST[poll] != "" && $step > 0){
$poll = $_POST[poll];
$startpage = "finish.html";
$serial = "";
$row1 = query("SELECT * FROM `game_serial` ORDER BY RAND( ) LIMIT 1 ");
while ($r = fetchs($row1)){
$serial = $r[serial];
}
query("INSERT INTO `game_id` SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `serial` = '$serial', `time` = '$time'");
if (mysql_insert_id() > 0){
$template->assign_block_vars('fin',array(
"serial" => $serial,
 
);
} else {
$template->assign_block_vars('al',null);
}
} else {
$startpage = "main.html";
}
//} else {
// $startpage = "member.html";
//}
$template->set_filenames(array(
'body' => $startpage,
));
$template->pparse('body');
?>
-----------------------------------
โค้ดข้างล่างเป็น finish.html ผมเอาเฉพาะในตารางที่ใช้จริง ๆ มา
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<!-- BEGIN fin -->
<tr valign="top">
<td height="34"> <p align="center"><span lang="th"> <font face="Tahoma" size="2">
<br>
การลงทะเบียนเข้าร่วมกิจกรรมเสร็จสิ้น<br>
<font face="Tahoma" size="3"><b>{fin.serial}</b></font><br>
</font></span><span lang="th"><font face="Tahoma" size="2">
ขอบคุณที่เข้าร่วมกิจกรรมกับเราครั้งนี้นะคะ</font></span></p></td>
</tr>
<!-- END fin -->
</table></td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<!-- BEGIN al -->
<tr>
<td height="20"> <p align="center"> <font face="Tahoma" size="2">
<span lang="th"> <br>
เสียใจด้วยนะคะ<br>
คุณได้เข้าร่วมเล่นกิจกรรมกับเรา<br>
ไปก่อนหน้านี้แล้วค่ะ </span></font></td>
</tr>
<!-- END al -->
</table></td>
</tr>
</table>
Fri 21 Jul 2006 13:07:15
เพิ่มเติมเรื่องเช็คว่าคนที่ได้ "ยินดีด้วยนะคะ" ถ้าครบ 50 คนแล้วต้องใส่สคริปยังไงอ่ะครับ
if($row["time"]+3600 > time()){
//ไม่เกิน 1 ชั่วโมง
}else{
//เกิน 1 ชั่วโมง
}
"SELECT COUNT(no) AS num FROM game_id WHERE serial='ยินดีด้วยนะค่ะ'"
ตรงนี้ไว้นับว่ามีกี่คนแล้ว
Fri 21 Jul 2006 14:43:41
ต้องเอาไปใส่ตรงไหนอ่ะครับ แบบว่า งง หรือว่าเอาไปแทนที่ตรงไหนอ่ะ
$res = mysql_query("SELECT time FROM game_id WHERE mem_no='".$mem[no]."'");
if(mysql_num_rows($res)){
//เล่นแล้ว
if(time() < ($row["time"] + 3600)){
//เล่นแล้วไม่เกิน 1 ชั่วโมง
header("Location: finish.html");
}else{
//เล่นแล้วมากกว่า 1 ชั่วโมง
$row1 = query("SELECT COUNT(no) AS num FROM game_id WHERE serial='ยินดีด้วยนะค่ะ'");
$count = mysql_fetch_array($row1, MYSQL_ASSOC);
if($count["num"] >= 50){
//มีผู้เล่นครบ 50 คนแล้ว
}else{
//ทำการสุ่ม
$serial = "";
$row1 = query("SELECT * FROM `game_serial` ORDER BY RAND( ) LIMIT 1 ");
while ($r = fetchs($row1)){
$serial = $r[serial];
$template->assign_block_vars('fin',array("serial" => $r[serial], ));
}
query("INSERT INTO `game_id` SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `serial` = '$serial', `time` = '$time'");
}
}
}else{
//ยังไม่เคยเล่น
$row1 = query("SELECT COUNT(no) AS num FROM game_id WHERE serial='ยินดีด้วยนะค่ะ'");
$count = mysql_fetch_array($row1, MYSQL_ASSOC);
if($count["num"] >= 50){
//มีผู้เล่นครบ 50 คนแล้ว
}else{
//ทำการสุ่ม
$serial = "";
$row1 = query("SELECT * FROM `game_serial` ORDER BY RAND( ) LIMIT 1 ");
while ($r = fetchs($row1)){
$serial = $r[serial];
$template->assign_block_vars('fin',array("serial" => $r[serial], ));
}
query("INSERT INTO `game_id` SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `serial` = '$serial', `time` = '$time'");
}
}
ประมาณนี้ล่ะครับ

















