ถ้าจะให้นำคำถามและคำตอบ มาแสดงร่วมกันในหน้าเดียวจะทำการ select ใน php อย่างไร
Code (PHP)
CREATE TABLE IF NOT EXISTS `answer` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`studentid` char(8) DEFAULT NULL,
`qid` int(8) unsigned DEFAULT NULL,
`choice` char(2) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `studentid_2` (`studentid`,`qid`,`choice`),
KEY `studentid` (`studentid`),
KEY `qid` (`qid`),
KEY `choice` (`choice`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
INSERT INTO `answer` (`id`, `studentid`, `qid`, `choice`) VALUES
(1, '540001', 1, 'a'),
(2, '540001', 1, 'c'),
(3, '540001', 1, 'd'),
(4, '540001', 2, 'a'),
(5, '540001', 2, 'd');
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `choice_score` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`qid` int(8) unsigned DEFAULT NULL,
`choice` char(2) DEFAULT NULL,
`choiceText` varchar(200) DEFAULT NULL,
`score` double DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `qid_2` (`qid`,`choice`),
KEY `qid` (`qid`),
KEY `choice` (`choice`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
INSERT INTO `choice_score` (`id`, `qid`, `choice`, `choiceText`, `score`) VALUES
(1, 1, 'a', 'แตงเมล่อน(ญี่ปุ่น)', 10),
(2, 1, 'b', 'ฮโวคาโด', 8),
(3, 1, 'c', 'ทุเรียน', 6),
(4, 1, 'd', 'มะขามป้อม', 12),
(5, 2, 'a', 'Green Hornet', 7),
(6, 2, 'b', 'Green Lantern', 5),
(7, 2, 'c', 'Super 8', 9),
(8, 2, 'd', 'Superman Return', 10);
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `questionaire` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`qid` int(8) unsigned DEFAULT NULL,
`question` varchar(250) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `question` (`question`),
KEY `qid` (`qid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
INSERT INTO `questionaire` (`id`, `qid`, `question`) VALUES
(1, 1, 'คุณชอบทานผลไม้อะไรมากที่สุด?'),
(2, 2, 'คุณชอบภาพยนตร์เรื่องอะไรมากที่สุด?');
Code (PHP)
$sql="select * from questionaire order by qid";
$res=mysql_query($sql) or die(mysql_error());
while($data=mysql_fetch_assoc($res)){
echo "<div style=\"background-color:royalblue;padding:5px;\">{$data["qid"]}.) {$data["question"]}</div>";
$sql2="select * from choice_score where qid='{$data["qid"]}' order by choice";
$res2=mysql_query($sql2) or die(mysql_error());
while($data2=mysql_fetch_assoc($res2)){
echo "<p><input type=\"checkbox\" name=\"answer[{$data["qid"]}][]\" /> {$data2["choice"]}.) {$data2["choiceText"]}</p><br />";
}
echo "<hr />";
}
ประวัติการแก้ไข 2011-06-17 09:52:33
Date :
2011-06-17 09:49:58
By :
sakuraei
พี่ค่ะ แล้วเวลาคิดคะแนนรวมอะค่ะ
จะคิดยังไง มันส่งพร้อมกันทุกข้อเลยอะค่ะ
Date :
2011-06-17 10:19:08
By :
Baitong_ch
ลองทำSelect อย่างที่พี่เคยบอกแล้ว
แต่มันเก็บทีละข้ออะค่ะ
แล้วถ้าเก็บพร้อมกันแบบนี้ ทำอย่างไรดีค่ะ
Date :
2011-06-17 10:21:59
By :
Baitong_ch
ถ้าต้องการหาคะแนนรวมของนักเรียนแต่ละคนก็ตามนี้เลยครับ
SELECT studentid,sum(score) as total FROM answer t1,questionaire t2,choice_score t3
WHERE t1.qid=t2.qid and t1.choice=t3.choice and t1.qid=t3.qid
group by studentid
order by studentid
และผลลัพธ์ครับ
studentid total
540001 45
ให้เปลี่ยนจาก studentid เป็น mid น่ะครับ เพราะน้องทำตาราง สมาชิกไว้แล้ว
CREATE TABLE `member` (
`mid` int(11) NOT NULL auto_increment,
`mname` varchar(50) NOT NULL,
`mlastname` varchar(50) NOT NULL,
`mposition` varchar(50) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`mid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8ว
Date :
2011-06-17 10:25:47
By :
sakuraei
มันไม่โชว์คะแนนรวมอะค่ะพี่ ทำอย่างไรดีค่ะ ขอรบกวนพี่จิงๆๆ
Date :
2011-06-17 10:32:11
By :
Baitong_ch
ใช้ตารางตัวที่ผมให้ไปหรือเปล่าครับ
ถ้าไม่ใช่ช่วยเอาตารางมาวางให้ดู หรือจะ export ออกมาเลยก็แจ๋วกว่า
Date :
2011-06-17 10:40:43
By :
sakuraei
ใช้ตัวที่่ให้ไปค่ะ ลองทำแล้วมันไม่ได้จิงๆๆค่ะ
ถ้าเลือกครบทุกข้อแล้ว
พอคลิกส่งข้อสอบ
มันจะต้องขึ้นว่าได้คะแนนเท่าไหร่อะค่ะ ซึ่งจะเก็บอยู่ในตาราง answer ที่พี่ให้มาอะค่ะ
Date :
2011-06-17 10:44:08
By :
Baitong_ch
เอาโค้ดมาดูกันดีกว่า
Date :
2011-06-17 10:45:36
By :
sakuraei
Code (PHP)
<?php
include ('include/config.inc.php');
$sql="select * from questionaire order by qid";
$res=mysql_query($sql) or die(mysql_error());
while($data=mysql_fetch_assoc($res)){
echo "<div style=\"background-color:royalblue;padding:5px;\">{$data["qid"]}.) {$data["question"]}</div>";
$sql2="select * from choice_score where qid='{$data["qid"]}' order by choice";
$res2=mysql_query($sql2) or die(mysql_error());
while($data2=mysql_fetch_assoc($res2)){
echo "<p><input type=\"radio\" name=\"answer[{$data["qid"]}][]\" /> {$data2["choice"]}.) {$data2["choiceText"]}</p><br />";
}
echo "<hr />";
}
?>
<form action="sum_score_exam1" method="post" name="form1" target="_blank">
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</form>
ส่วนอันนี้ที่ส่งไปcheck อะค่ะ จะต้องปรับแก้อย่างไร แนะนำด้วยน่ะค่ะ
Code (PHP)
<?php
session_start();
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
.style1 {
font-family: "Courier New", Courier, monospace;
font-size: 24px;
}
.style2 {color: #FF0000}
-->
</style>
<p align="center" class="style1"><?php echo $_SESSION["mid"];?><?php $_SESSION["mposition"];?>คุณ
<?php echo $_SESSION["mname"];?>
<?php echo $_SESSION["mlastname"];?></p>
<div align="center" class="style1">
<?
include ('include/config.inc.php');
$strSQL = "SELECT mid,sum(score) as total FROM answer t1,questionaire t2,choice_score t3
WHERE t1.mid = '".$_SESSION["mid"]."' and
t1.qid=t2.qid and
t1.choice=t3.choice and
t1.qid=t3.qid
group by mid
order by mid";
mysql_query("SET NAME utf8");
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
?>
คะแนนปรนัยที่คุณรับ<span class="style2">
<?=$objResult["total"];?></span>
คะแนน</div>
<form name="form1" method="post" action="chk_exam_1">
<label>
<div align="center">
<input type="submit" name="button" id="button" value="Submit">
<label> <br>
<input type="hidden" name="txtmid" id="textfield" value="<?php echo $_SESSION["mid"]?>">
<input type="hidden" name="txtscore" id="textfield" value="<?=$objResult["total"];?>">
</label>
</div>
</label>
</form>
<p align="center"> </p>
Date :
2011-06-17 10:47:56
By :
Baitong_ch
ปัญหาคือข้อมูลที่ตอบ ไม่ไปเก็บในตาราง answer ค่ะ เลยคิดคะแนนรวมไม่ได้
Date :
2011-06-17 10:50:01
By :
Baitong_ch
<form action="sum_score_exam1" method="post" name="form1" target="_blank">
<?php
include ('include/config.inc.php');
.........
.........
........
ต้องเอาแท็กฟอร์มไปวางด้านบนครับ
Date :
2011-06-17 10:51:27
By :
sakuraei
มันก็ไม่โชว์คะแนนรวมอยู่ดีอะค่ะ เพราะข้อที่เลือกไม่ได้ถูกนำไปเก็บที่ตาราง answer จะทำอย่างไรดีค่ะ
Date :
2011-06-17 10:54:49
By :
Baitong_ch
ใช่ค่ะพี่ เพราะไม่รู้ว่าจะใส่ตรงไหนดี คือนู๋เคยทำแต่แบบให้ทำทีละข้อแล้วกดส่งข้อสอบทีละข้อ แต่ทีนี้คือต้องการให้คลิกปุ่มเดียวแล้วโชว์คะแนนรวมทั้งหมดเลยอะค่ะ
Code (PHP)
<?php $value = $_REQUEST[1];
//echo $value;//จะได้ค่าที่เลือก
?>
<?php
include ('include/config.inc.php');
$qid=$_POST['txtqid'];
$mid=$_POST['txtmid'];
$mname=$_POST['txtmname'];
$mlastname=$_POST['txtmlastname'];
$mposition=$_POST['txtmposition'];
$ans=$_POST['txtans'];
$sql = "insert into answer values('$mid','$qid','$value') ";
mysql_query("SET NAME utf8");
$result = mysql_query($sql);
if($result){
echo "<script>alert('Complete successfully.');</script>";
echo "<script>window.location='close.php';</script>";
ob_start();
session_start();
$mid=$_POST['txtmid'];
$mname=$_POST['txtmname'];
$mlastname=$_POST['txtmlastname'];
$mposition=$_POST['txtmposition'];
session_register("mid");
session_register("mname");
session_register("mlastname");
session_register("mposition");
}
else{
echo "<script>alert('Transmission errors.!!! Please try again. ');</script>";
echo "<script>window.location='close.php';</script>";
}
?>
เป็น code เก่าที่เคยทำแบบให้ส่งทีละข้ออะค่ะ แนะนำด้วยน่ะค่ะ
Date :
2011-06-17 10:58:11
By :
Baitong_ch
อันนี้โชว์คำถามและคำตอบ
Code (PHP)
<form action="sum_score_exam1" method="post" name="form1" target="_blank">
<?php
include ('include/config.inc.php');
$sql="select * from questionaire order by qid";
$res=mysql_query($sql) or die(mysql_error());
while($data=mysql_fetch_assoc($res)){
echo "<div style=\"background-color:royalblue;padding:5px;\">{$data["qid"]}.) {$data["question"]}</div>";
$sql2="select * from choice_score where qid='{$data["qid"]}' order by choice";
$res2=mysql_query($sql2) or die(mysql_error());
while($data2=mysql_fetch_assoc($res2)){
echo "<p><input type=\"checkbox\" name=\"answer[{$data["qid"]}][]\" value=\"{$data2["choice"]}\" /> {$data2["choice"]}.) {$data2["choiceText"]}</p><br />";
}
echo "<hr />";
}
?>
<label>
<input type="submit" name="submitForm" id="button" value="Submit">
</label>
</form>
อันนี้สำหรับบันทึกข้อมูลครับ
Code (PHP)
<?php
session_start();
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
.style1 {
font-family: "Courier New", Courier, monospace;
font-size: 24px;
}
.style2 {color: #FF0000}
-->
</style>
<p align="center" class="style1"><?php echo $_SESSION["mid"];?><?php $_SESSION["mposition"];?>คุณ
<?php echo $_SESSION["mname"];?> <?php echo $_SESSION["mlastname"];?></p>
<div align="center" class="style1">
<?php
include ('include/config.inc.php');
if(isset($_POST["submitForm"]) && isset($_POST["answer"]) ){
foreach($_POST["answer"] as $QuestionID => $answerArray){
foreach($answerArray as $selectedChoice){
$sql = "INSERT INTO `answer` ( `mid`, `qid`, `choice`) VALUES";
$sql.= "('{$_SESSION["mid"]}' , '$QuestionID' , '$selectedChoice')";
$res = mysql_query($sql) or die(mysql_error());
}
}
}
$strSQL = "SELECT mid,sum(score) as total FROM answer t1,questionaire t2,choice_score t3
WHERE t1.mid = '".$_SESSION["mid"]."' and
t1.qid=t2.qid and
t1.choice=t3.choice and
t1.qid=t3.qid
group by mid
order by mid";
mysql_query("SET NAME utf8");
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
?>
คะแนนปรนัยที่คุณรับ<span class="style2">
<?=$objResult["total"];?></span>
คะแนน</div>
?>
Date :
2011-06-17 11:22:28
By :
sakuraei
ขอบคุณมากค่ะพี่ได้แล้ว
ไม่รู้จะตอบแทนอย่างไรดี "ขอบคุณมากน่ะค่ะ"
แต่อยากให้พี่ช่วยอธิบายให้ฟังได้ไหมค่ะ
if(isset($_POST["submitForm"]) && isset($_POST["answer"]) ){
foreach($_POST["answer"] as $QuestionID => $answerArray){
foreach($answerArray as $selectedChoice){
$sql = "INSERT INTO `answer` ( `mid`, `qid`, `choice`) VALUES";
$sql.= "('{$_SESSION["mid"]}' , '$QuestionID' , '$selectedChoice')";
$res = mysql_query($sql) or die(mysql_error());
}
}
}
คืออะไรหรอค่ะพี่ ไม่ทราบจิงๆๆ ^^
Date :
2011-06-17 11:31:35
By :
Baitong_ch
คำตอบถูกเก็บอยู่ในรูปแบบ อาร์เรย์สองมิติครับ
Code (PHP)
<input type=\"checkbox\" name=\"answer[{$data["qid"]}][]\" value=\"{$data2["choice"]}\" />
มิติที่หนึ่งใช้เก็บเลขของข้อสอบ
answer[{$data["qid"]}]
มิติที่สองใช้เก็บตัวเลือกของคำตอบ a,b,c,d,e,f,g
answer[{$data["qid"]}][]
ข้อดีของโค้ดชุดนี้คือสามารถเพิ่มคำตอบได้ไม่จำกัดจำนวน กี่ตัวเลือกก็ได้
ใช้สร้างแบบสอบถามที่มีหลายตัวเลือกได้เลยครับ
ประวัติการแก้ไข 2011-06-17 11:41:04 2011-06-17 11:41:57 2011-06-17 11:42:43 2011-06-17 11:44:09 2011-06-17 11:44:55
Date :
2011-06-17 11:40:29
By :
sakuraei
พี่ค่ะมีอีกคำถามนึงคือ ระบบนี้จะต้องเจ้าหน้าที่ทำเพิ่มข้อสอบได้
แต่การเพิ่มข้อสอบปรนัยนี้ ควรจะเพิ่มอย่างไรดีค่ะ
เราจะเพิ่มอย่างไรดีค่ะ
โดยเฉพาะตรงคำตอบอะค่ะ จะระบุได้อย่างไร ว่าเป็นคำตอบของข้อไหน เวลาเพิ่มอะค่ะ
Date :
2011-06-17 11:45:02
By :
Baitong_ch
if(isset($_POST["submitForm"]) && isset($_POST["answer"]) ){ <== เช็คก่อนว่ามีการกดปุ่ม submit และ มีการกำหนดตัวแปรที่ใช้เก็บคำตอบหรือเปล่า
foreach($_POST["answer"] as $QuestionID => $answerArray){ <== เอาคำตอบรวมทั้งหมดมาทำแยกทีละข้อ
foreach($answerArray as $selectedChoice){ <==เอาคำตอบทีละข้อมาแยกอีกครั้งเพื่อดูว่าผู้ทำข้อสอบเลือกคำตอบข้อไหนบ้าง
$sql = "INSERT INTO `answer` ( `mid`, `qid`, `choice`) VALUES";
$sql.= "('{$_SESSION["mid"]}' , '$QuestionID' , '$selectedChoice')";
$res = mysql_query($sql) or die(mysql_error());
}
}
}
Date :
2011-06-17 11:48:45
By :
sakuraei
ก็อันที่พี่ยังทำให้ไม่เสร็จ ต้องอดใจรอก่อนครับ เพราะไม่ค่อยมีเวลาจริงๆ
ช่วงนี้งานพี่ด่วนจริง พอมีเวลาก็มาตอบให้น่ะครับ
Date :
2011-06-17 11:50:23
By :
sakuraei
ยังไงก็ขอบคุณมากค่ะ พี่มีเมล์ไหมอะ ขอหน่อย
Date :
2011-06-17 11:51:24
By :
Baitong_ch
กำหนดส่งงานเมื่อไหร่ครับ
เมล์พี่ [email protected]
ประวัติการแก้ไข 2011-06-17 12:04:36
Date :
2011-06-17 11:57:40
By :
sakuraei
วันจันทร์ค่ะ
Date :
2011-06-17 11:58:52
By :
Baitong_ch
หาาาาาาาาาา จันทร์ที่จะถึงเนี่ยน่ะ
อยู่ที่ไหนครับ กรุงเทพ หรอ
แล้วพรีเซ็นท์เมื่อไหร่
ประวัติการแก้ไข 2011-06-17 12:02:05
Date :
2011-06-17 12:01:30
By :
sakuraei
อยากจะเขียนคำว่าขอบคุณตัวเท่าบ้าน ^^
ขอบคุณค่ะ
ประวัติการแก้ไข 2011-06-17 12:02:04
Date :
2011-06-17 12:01:36
By :
Baitong_ch
อ๋อไม่ต้องพรีเซนต์ค่ะ กำหนดส่งวันจันทร์ เอาระบบไปให้ดูก็เสร็จเลยค่ะถ้าตรงตามขอบเขต
เพราะตัวโปรเจคจบผ่านไปแล้ว แต่อันนี้โดนบังคับให้ทำเพิ่มค่ะ
อยู่กรุงเทพนี่แหละค่ะ
Date :
2011-06-17 12:04:24
By :
Baitong_ch
ในส่วนเพิ่มข้อสอบและคำตอบ ถ้าพี่เสร็จจะส่งให้น่ะครับ คิดว่าน่าจะวันอาทิตย์
ช่วงต้นเดือนหน้าพี่ลงกรุงเทพพอดี อยู่ประมาณสิบวัน
..... แต่ไม่ต้องมาหาพี่หรอกน่ะ....อิอิ
ได้เมล์พี่แล้วแอดมาหน่อย บอกด้วยน่ะครับว่าเป็นน้อง ใบตอง แล้วพี่จะส่งเมล์ในส่วนที่เหลือให้
Date :
2011-06-17 12:08:12
By :
sakuraei
แอดไปแล้วน่ะค่ะพี่ รับด้วย ^^
Date :
2011-06-17 12:15:15
By :
Baitong_ch
ขอบคุณค่ะ
แต่ก็จะพยายามลองทำเองดูน่ะค่ะ ขอบคุณพี่มาก :D
Date :
2011-06-17 12:24:00
By :
Baitong_ch
Load balance : Server 01