Tue 18 Jul 2006 12:07:42
คือผมอยากให้นำข้อมูลใสดาต้าเบสขึ้นมาโชว์แล้ว random อ่ะครับ แบบนี้นะครับ
Table ชื่อ member ไว้เก็บข้อมูลสมาชิกที่เข้ามาเล่นกิจกรรมแล้ว
member :
no mem_name recive
0 tom_naka ขอแสดงความยินดี
1 tongdee เสียใจด้วยค่ะ
2 vorapon ID : DAXES453
3 phiphat เสียใจด้วยค่ะ
4 tangmo เสียใจด้วยค่ะ
| |
| |
50 chaianal ขอแสดงความยินดี
ส่วนอีกอัน เป็นดาต้าเบสที่จะเก็บ ID เกมส์ ซึ่งจะมีทั้งหมด 1000 รายการ แต่จะมี ID อยู่แค่ 50 ID เท่านั้นนอกนั้นจะมี คำว่า "เสียใจด้วยค่ะ"
id_game
no id_game
0 ขอแสดงความยินดี
1 เสียใจด้วยค่ะ
2 AXES453
3 เสียใจด้วยค่ะ
4 เสียใจด้วยค่ะ
5 เสียใจด้วยค่ะ
6 AXES453
7 เสียใจด้วยค่ะ
8 เสียใจด้วยค่ะ
| |
| |
1000 เสียใจด้วยค่ะ
ผมจะใช้วิธีคือว่า Table ชื่อ member จะเป็นตัวกำหนดว่าคนที่จะเข้ามารับ id นี้ได้จะต้อง เป็นสมาชิกเท่านนั้น และ ใครที่เข้ามาเล่นแล้วจะไม่สามารถเข้ามาเล่นอีกได้ อันนี้ผมทำแล้ว จะเหลือก็แต่อันที่ ระบบให้ดึงข้อมูล id มาจาก Table : id_game มาให้สามาชิก เห็นว่าเขาได้หรือไม่ได้ และเช็คว่า สมาชิกคนไหน ที่ได้ id เกมส์หรือไม่ได้ และให้มันเช็คว่า ถ้าสามาชิกที่เข้ามาเล่น ได้ id ครบ 50 คนแล้ว ให้ระบบหยุดทำงาน หรือให้ refresh ไปอีกหน้าเพื่อแจ้งว่า id ครบแล้ว
no mem_name recive id
0 tom_naka ขอแสดงความยินดี 0
1 tongdee เสียใจด้วยค่ะ 1
2 vorapon DAXES453 2
3 phiphat เสียใจด้วยค่ะ 3
ตรวจสอบว่ามีจำนวนครบหรือยัง
SELECT COUNT(m.mem_name) AS num FROM member m INNER JOIN id_game g ON g.no=m.id WHERE recive='AXES453'
ถ้า num = 50 ก็ให้ไปหน้าที่ต้องการ
ถ้า num < 50 ก็ให้สุ่มค่าให้แก่ member
SELECT no, id_game FROM id_game WHERE NOT EXIST (SELECT * FROM member WHERE member.id=id_game.no) ORDER BY RAND() LIMIT 1
จากนั้นก็บันทึกค่าเปล่านั้นลงใน table member เพื่อให้ไม่เอาค่าที่ใช้แล้วมาคำนวณใหม่ครับ
Tue 18 Jul 2006 16:19:02
อืม ตรงที่ให้เช็คว่า ครบ 50 คนแล้วเนี่ย คือว่าคนที่จะได้ id เท่านั้นอ่ะครับ คือมี table ที่เก็บ ข้อมูลคือ "เสียใจด้วยค่ะ" , "ID GAME" มีแค่สองอย่างอ่ะครับ แต่จำนวน "เสียใจด้วยค่ะ" จะมี 950 อัน และ "ID GAME" จะมี 50 อัน ที่ผสมกันอยู่ใน table id_game แล้วคนที่มาสุ่มจะได้รับผลจากกาสุ่มอ่ะครับ และ table member จะมีคนที่ได้ "ID GAME" ก็ไม่รู้จะได้ตอนไหน แต่จะสุ่มจนกว่าจะมีสมาชิก สุ่ม "ID GAME" ได้ครบ 50 คน ส่วนคนที่ได้ "เสียใจด้วยค่ะ" ก็ไม่รู้จะได้เท่าไหร่ในจำนวน 950
ไม่แน่ใจว่า โค้ดที่ให้มาด้านบนเป็นเช็คว่า มีสมาชิกเข้ามาเล่นคน 50 คนหรือเปล่าอ่ะครับ
แล้ว recive='AXES453' จะใส่ยังไงว่าคนที่ได้ id ได้ครบ 50 คนแล้ว เพราะ id มันไม่ซ้ำกันเลยอ่ะครับ
Query นี้จะนับเฉพาะ member ที่มีค่า recive เป็น "ID GAME" เท่านั้นครับ จากนั้นคุณก็ทำการ mysql_fetch_array() ออกมาแล้วตรวจสอบว่าค่านั้นเกิน 50 หรือยังครับ
Wed 19 Jul 2006 09:47:46
พอจะเขียนสคริปแบบเต็ม ๆ ให้หน่อยได้ไหมครับ ผมจับต้นชนปลายแล้วมึนครับ ระบบแบบนี้ไม่เคยทำเหมือนกัน แบบประมาณว่า
ขึ้นมาหน้าแรกแล้ว มีปุ่มให้กด refresh เมื่อกดปุ่ม refresh แล้วก็จะโชว์ id ขึ้นมาให้
id_game
no id_game
0 ขอแสดงความยินดี
1 เสียใจด้วยค่ะ
2 AXES453
3 เสียใจด้วยค่ะ
4 เสียใจด้วยค่ะ
5 เสียใจด้วยค่ะ
เมื่อได้รับ id เกมส์เสร็จแล้วก็คือจบ แล้วสคริปที่จะเขียนถึงข้อมูลมาโชว์จะเขียนยังไง ผมได้ทำ tabel wไว้แบบนี้แล้ว
member :
no mem_name recive id
id_game :
id serial
รบกวนด้วยนะครับ
และ คุณใช้ส่วนใดในการแยกว่าคนไหนเป็นสมาชิกหรือไม่ครับ
Wed 19 Jul 2006 10:27:58
หน้าที่ผมทำไว้คือเมื่อคลิ๊กปุ่มแล้วก็จะมีป๊อบอัพขึ้นมาจะมีหน้าเปล่า ๆ ขึ้นมาและมีข้อความเพื่อบอกเขาว่า กดปุ่ม refresh (bottom ที่ผมทำไว้ ) จากนั้นเมื่อเขากดปุ่ม refresh หน้านั้นก็จะ refresh เพื่อบอก id game ขึ้นมา ถ้ามันได้นะ หรือถ้าไม่ได้มันก็จะขึ้นว่า "เสียใจด้วยค่ะ " ดังตารางข้างล่าง
id_game
| 1 | เสียใจด้วยนะค่ะ | 1 | |||
| 2 | เสียใจด้วยนะค่ะ | 2 | |||
| 3 | DSDI45D | 3 | |||
| 4 | เสียใจด้วยนะค่ะ | 4 | |||
| 5 | SFAKSRS | 5 |
โดยให้ดึงแบบสุ่มขึ้นมาจา table นี้ไปแสดง เพราะผมจะทำใว้ 1000 อันแล้วมี id game อยู่ประมาณ 50 id
นะครับ
<?
$link = mysql_connect($host, $user, $pass);
mysql_select_db($dbname, $link);
$res = mysql_query(" SELECT COUNT(m.mem_name) AS num FROM member m INNER JOIN id_game g ON g.no=m.id WHERE m.recive<>'เสียใจด้วยนะคะ'", $link);
if(mysql_num_rows($res)){
$row = mysql_fetch_array($res, MYSQL_ASSOC);
if($row["num"] < 50){
$res = mysql_query(" SELECT no, id_game FROM id_game WHERE NOT EXIST (SELECT * FROM member WHERE member.id=id_game.no) ORDER BY RAND() LIMIT 1", $link);
if(mysql_num_rows($res)){
$row = mysql_fetch_array($res, MYSQL_ASSOC);
mysql_query("UPDATE member SET recive='".$row["id_game"]."', id=".$row["no"]." WHERE no=".$GET["uid"], $link);
echo $row["id_game"];
}else{
echo "ขออภัยระบบขัดข้อง";
}
}else{
echo "ขออภัยด้วยค่ะ"; //มีผู้เล่นครบ 50 แล้ว
}
}
mysql_free_result($res);
mysql_close($link);
?>
ในปุ่มที่ให้คลิ๊กก็ <input type="button" value="คลิ๊ก" onclick="window.open('getresult.php?uid=1234', 'res', 'width=150, height=100, toolbars=no, statusbar=no');">
เปลี่ยนเลข 1234 เป็นหมายเลขของสมาชิกครับ
Wed 19 Jul 2006 17:12:49
พอดีผมได้เปลี่ยนระบบใหม่ครับ ระบบเดิมที่คุณ admin ให้มาใช้งานได้ดีทีเดียวครับ แต่มันมีปัญหาอยู่อย่างคือเวลาคนเข้ามาเล่นกิจกรรมแล้วกดสุ่ม แล้วมีคนเข้ามาพร้อมกัน เลยทำให้ ได้ id เหมือนกันหลายคนอ่ะครับ
ก็เลยจะแก้ใหม่คือ
หน้า main.html
คำถาม : คุณเคยเล่นเกมส์นี้นานหรือยัง
| ||||
อันด้านบนเป็นหน้าต้อนรับเวลาคนเข้ามาเล่นกิจกรรม คือต้องเลือกคำตอบเสียก่อนจึงจะเข้าไปรับ id ได้ ผมก็เลยเปลี่ยนจาก id มาเป็นข้อความว่า "คุณได้รับ ID ค่ะ" และถ้าคนไม่ได้รับ id ก็จะโชว์คำว่า "เสียใจด้วยนะค่ะ"
จากนั้นผมก็จะเอาคนที่ได้ ID "คุณได้รับ ID ค่ะ" มาเรียงในดาต้าเบสแล้วดึงเฉพาะคนที่ ได้ ID มาเรียงกัน แล้วทำสคริ๊ปแจก serial ไป โดยจะแก้ปัญหา serial ตรงกัน
จึงจะถามว่า ดังสคริปด้านล่างจะเพิ่มสคิปเข้าไปยังไง
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];
query("INSERT INTO `activity_game` SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', `poll` = '$poll', `time` = '$time'");
$startpage = "finish.html";
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');
?>
ขออธิบายนิดนึงนะ
activity_game` SET `mem_no` = '$mem[no]' , `mem_name` = '$mem[name]', ` << เป็นสคริปดึงค่าของสมาชิก
if ($mem[rank] > 0){ << สำหรับสมาชิกเท่านั้น ถ้าไม่ใช่สมาชิกให้ไปที่หน้า member.html แต่ถ้าเป็นสมาชิกให้ไปที่หน้า main.html
$startpage = "finish.html"; << เมื่อตอบคำถามแล้วจะมาที่หน้านี้ และถ้าเคยเล่นกิจกรรมนี้แล้วให้ขึ้นข้อความว่า "คุณเคยเล่นกิจกรรมนี้แล้ว"
member.html << เป็นหน้า html เพื่อแจ้งว่า คุณยังไม่ได้ login เข้าระบบ มันถึงจะมาหน้านี้
มี table ชื่อ id_game
id serial
1 คุณได้รับ ID ค่ะ
2 เสียใจด้วยนะค่ะ
3 เสียใจด้วยนะค่ะ
4 คุณได้รับ ID ค่ะ
ซึ่งจะมีประมาณ 1000 แต่แจก id แค่ 50 อัน สำหรับคนที่ได้
จะเขียนสคริปเพิ่มเติมเข้าไปในไฟล์ index.php ยังไงเพื่อให้มันดึง serial มาโชว์คำว่า "คุณได้รับ ID ค่ะ" หรือ "เสียใจด้วยนะค่ะ" หลังจากกดปุ่ม "เล่นกิจกรรม" ไปแล้ว และทำการ insert ลงดาต้าเบส จากนั้น ให้เอาคำ "คุณได้รับ ID ค่ะ" หรือ "เสียใจด้วยนะค่ะ" มาโชว์ที่หน้า finish.html
สรุปคือ เมื่อกดปุ่ม "เล่นกิจกรรม" แล้วให้มันสุ่ม id ว่าได้หรือไม่ลงดาต้าเบส หลังจาก insert ข้อมูลลงดาต้าเบสแล้วให้ เอาข้อมูลมาโชว์ด้วยว่าเขาได้หรือไม่ได้
| 16 | 0 | Guest | 3 | 1153301111 |
ผมลองเอาสคริบที่คูณ admin ทำให้มาลองใส่ดูก็ไม่ได้ซักทีอ่ะครับ เหอะ ๆ รบกวนด้วยนะคับ หมดปัญหา
<?
$link = mysql_connect($host, $user, $pass);
mysql_select_db($dbname, $link);
$res = mysql_query(" SELECT COUNT(m.mem_name) AS num FROM member m INNER JOIN id_game g ON g.no=m.id WHERE m.recive<>'เสียใจด้วยนะคะ'", $link);
if(mysql_num_rows($res)){
$row = mysql_fetch_array($res, MYSQL_ASSOC);
if($row["num"] < 50){
$res = mysql_query(" SELECT no, id_game FROM id_game WHERE NOT EXIST (SELECT * FROM member WHERE member.id=id_game.no) ORDER BY RAND() LIMIT 1", $link);
if(mysql_num_rows($res)){
$row = mysql_fetch_array($res, MYSQL_ASSOC);
mysql_query("UPDATE member SET recive='".$row["id_game"]."', id=".$row["no"]." WHERE no=".$GET["uid"], $link);
echo $row["id_game"];
}else{
echo "ขออภัยระบบขัดข้อง";
}
}else{
echo "ขออภัยด้วยค่ะ"; //มีผู้เล่นครบ 50 แล้ว
}
}
mysql_free_result($res);
mysql_close($link);
?>
ไปใส่ไว้ในไฟล์ finish.html แทนครับ
**แต่ว่าคงต้องเปลี่ยนให้เป็น finish.php แทนครับ

















