พี่ๆช่วยด้วยค่ะงมแก้ไม่ได้ซะที ถามเรื่องการประเมินค่ะ ในฐานการประเมิน(assess)มี
ถามเรื่องการประเมินค่ะ
ในฐานการประเมิน(assess)มี
ID_At รหัสการประเมิน
ID_Sc โรงเรียนที่ถูกประเมิน
ID_Tc อาจารย์ที่ถูกประเมิน
Point คะแนนรวม
Date_At วันที่ประเมิน
ID_Assess ผู้ประเมิน
ตัวอย่างข้อมูลassess
ID_At | ID_Sc | ID_Tc | Point | Date_At | ID_Assess |
At_1254667118 | NULL | Tc_1252748611 | 76 | 4/10/2552 21:38:38 | Sc_1252749187 |
At_1254667118 | NULL | Tc_1252748611 | 76 | 4/10/2553 22:38:38 | Sc_1252749187 |
โรงเรียนประเมินอาจารย์ได้คะแนน76คะแนนและประเมินวันที่ 4/10/2552ที่นี้เมื่อประเมินอาจารย์คนนี้ไปแล้วชื่ออาจารย์คนนี้ต้องหายไปจากlist boxที่เลือกชื่ออาจารย์ที่จะประเมิน
พอเปลี่ยนปีเป็นปี2553แล้วประเมินใหม่ชื่ออาจารย์ต้องกลับมาให้ประเมินใหม่แต่พอหนูประเมินของปี2553ไปแล้วชื่ออาจารย์ก็ไม่หายไปจากlistอะค่ะทั้งๆที่จิงๆมันต้องหายไปเพราะประเมินไปแล้ว
พอไปดูcodeตรงนี้
Code (PHP)
<?
<!----------------------------------ส่วนนี้จะแสดงในlistเมื่ออาจารย์คนนั้นยังไม่เคยถูกประเมินเลย----------------------->
$list = mssql_query("select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc EXCEPT select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Assess,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc and Promise.ID_Tc = Assess.ID_Tc ");
?>
<select name="teacher_lb" class="TextBox" id="teacher_lb" style="width:250px;" >
<option value=''>---กรุณาเลือกอาจารย์ที่ท่านต้องการประเมิน----</option>
<?
while($a = mssql_fetch_array($list)){
?>
<option value='<? echo $a[0] ?>'><? echo $a[1]?> <? echo $a[2]?> <? echo $a[3]?></option>
<? } ?>
<!-------------------------------------ส่วนด้านล่างจะแสดงเมื่ออาจารย์คนนั้นเคยถูกประเมินไปแล้ว------------------------------------------------------------------------------------------->
<?
$ans1 = mssql_query("select Assess.ID_Tc,Date_At from Assess,Period where Assess.ID_Assess = '$_SESSION[ID_Sc]' and Assess.ID_Period = Period.ID_Period
");
$num2 = mssql_num_rows($ans1);
if($num2 != ""){
while($ans2 = mssql_fetch_array($ans1)){
$Y = explode (" ",$ans2['Date_At']);
//if($Y[2] == $start[2]) คือ ถ้าปีที่ประเมินไปแล้วเท่ากับปีนี้ไม่ต้องแสดงชื่อคนนั้น ($start[2]คือปีปัจจุบัน)
if($Y[2] == $start[2] ){ }else{ //แต่ถ้าไม่เท่ากับก็ให้แสดงรายชื่ออาจารย์คนนั้น
$list2 = mssql_query("select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc and Promise.ID_Tc = '$ans2[ID_Tc]' ");
while($a2 = mssql_fetch_array($list2)){ ?>
<option value='<? echo $a2[0] ?>'><? echo $a2[1]?> <? echo $a2[2]?> <? echo $a2[3]?></option>
<? }
}
}
}
?>
</select>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------>
หนูรู้ว่าที่ปี53ประเมินไปแล้วยางออกชื่ออาจารย์คนนั้นอยู่เพราะตอนวนwhile($ans2 = mssql_fetch_array($ans1)){ มันวนข้อมูลแรกก่อนคือปี52ทำให้แสดงชื่ออาจารย์คนนั้นออกมาเพราะข้อมูลนั้น$Y[2] != $start[2]กว่ามันจามาวนปี53ที่เราประเมินไปแล้วมันก็แสดงข้อมูลของปี52ออกมาแล้ว
หนูไม่รู้จาแก้ยังไงพี่ๆคนไหนช่วยได้ช่วยด้วยนะค่ะTag : - - - -
Date :
2009-10-05 11:43:24
By :
LuckyStar
View :
1049
Reply :
21
ดูโค้ดแค่นี้ไม่รู้จะช่วยไงครับ มองไม่ออกครับ
ไม่เข้าใจหลายๆจุดเลย แต่ก่อนอื่นขอดูว่าตารางแต่ละตารางใช้ทำอะไร เพราะเห็นเรียกหลายตาราง มึนเหมือนกันน่ะครับ
Date :
2009-10-05 14:40:02
By :
xbeginner01
อึมพอจะเข้าใจครับ แต่ดูจากข้อมูลแล้วหน้าจะเพิ่ม field ขึ้นมาอีกหนึ่ง field นะครับ ให้ชื่อว่า success ครับ
สาเหตุที่เพิ่มก็คือให้เราสามารถตรวจสอบการประเมินได้ครับ คือถ้าค่าใน field success = 1 ก็ให้ประเมินเรียบร้อย เวลาดึงข้อมูลก็ดึงเฉพาะ field success = 0 คือ ในส่วนอาจารย์ที่ยังไม่ได้ประเมินนะครับ แต่ให้เรากำหนดเงื่อนไขในการแสดงผล แค่นั้นก็หน้าจะเรียบร้อยครับ
Date :
2009-10-05 15:29:05
By :
cshunter
ไม่ได้อ่าพี่ถ้าอาจารย์ที่ประเมินไปแล้วเป็นsuccess=1แต่ถ้าปีต่อมาจะประเมินอาจารย์คนเดิมชื่อก้อไม่ขึ้นซิค่ะเพราะข้อมูลเดิมปีที่แล้วมานเป็นsuccess=1ไปแล้วอ่าพี่
Date :
2009-10-05 15:49:05
By :
LuckyStar
ตอบพี่ xbeginner01
$list = mssql_query("select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc EXCEPT select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Assess,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc and Promise.ID_Tc = Assess.ID_Tc ");
ตัวcodeนี้เป็นการselectแต่อาจารย์ที่สังกัดโรงเรียนหนูเลยให้ Promise.ID_Tc = Teacher.ID_Tc และ Promise.ID_Sc = '$_SESSION[ID_Sc]'ว่าให้คัดจากอาจารย์ที่สังกัดโรงเรียนตัวเองเท่านั้นที่โชว์ในlist และ หนูก็เอามา EXCEPT กับ Promise.ID_Tc = Assess.ID_Tc เพื่อให้แสดงว่าอาจารย์คนนี้ยังไม่ถูกประเมินในปีนี้อ่าค่ะ
ช่วยด้วยนะค่ะ
Date :
2009-10-05 15:56:42
By :
LuckyStar
capture หน้าตารางแต่ละตารางมาดูหน่อยครับ
เอาให้เห็นทุกฟิล์ เผื่อจะมีประโยชน์กับผู้ที่จะเข้ามาช่วยเหลือหน่อยน่ะครับ
Date :
2009-10-05 16:03:21
By :
pokultra
ปัญหาอยู่ที่ $Y[2] และ $start[2] ไม่เท่ากันหรือเปล่าครับ
ลองทดสอบก่อนน่ะครับ
Code (PHP)
if($Y[2] == $start[2] ){ }else{ //แต่ถ้าไม่เท่ากับก็ให้แสดงรายชื่ออาจารย์คนนั้น
$list2 = mssql_query("select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc and Promise.ID_Tc = '$ans2[ID_Tc]' ");
while($a2 = mssql_fetch_array($list2)){ ?>
<!--<option value='<? echo $a2[0] ?>'><? echo $a2[1]?> <? echo $a2[2]?> <? echo $a2[3]?></option>-->
<option value='<? echo $a2[0] ?>'><? echo $a2[1]?> <? echo $Y[2]?> เท่ากับ <? echo $start[2]?></option>
<? }
ผมเริ่มเดาไปเรื่อยเลยน่ะครับ
Date :
2009-10-05 16:17:39
By :
xbeginner01
รูปตารางฐานนะค่ะ
สัญญา(Promise)
ตารางประเมิน(Assess)
Date :
2009-10-05 18:45:43
By :
LuckyStar
(>.< '' )
ถ้ายังไงช่วยส่งโค้ดทั้งหมดมาให้ดูดีกว่า
แล้วเดียวช่วยหาที่จะแก้ให้
Date :
2009-10-05 19:18:22
By :
xbeginner01
Code (PHP)
<?
$day = date("d");
$month = date("m");
$year = date("Y");
$sql = mssql_query("select ID_Period,Date_start,Date_finish from Period ");
?>
<div class="main">
<table width="903" >
<?
while($result = mssql_fetch_array($sql)){
//$start = explode ("/", date("d/m/Y",$result['Date_start']));
//$finish = explode ("/", date("d/m/Y",$result['Date_finish']));
$start = explode (" ",$result['Date_start']);
$finish = explode (" ", $result['Date_finish']);
if($start[2] == $year){//เลือกช่วงการประเมินปีนี้
//echo $start[0].$start[1].$start[2];
$_SESSION[ID_Period] = $result['ID_Period'];
$day_start = $start[1];
$day_finish = $finish[1];
/*------------------------------แปลงค่าเดือนที่เริ่ม-----------------------------*/
if($start[0] == 'Jun'){
$month_start = '01';
}else if($start[0] == 'Feb'){
$month_start = '02';
}else if($start[0] == 'Mar'){
$month_start = '03';
}else if($start[0] == 'Apr'){
$month_start = '04';
}else if($start[0] == 'May'){
$month_start = '05';
}else if($start[0] == 'Jun'){
$month_start = '06';
}else if($start[0] == 'Jul'){
$month_start = '07';
}else if($start[0] == 'Aug'){
$month_start = '08';
}else if($start[0] == 'Sep'){
$month_start = '09';
}else if($start[0] == 'Oct'){
$month_start = '10';
}else if($start[0] == 'Nov'){
$month_start = '11';
}else if($start[0] == 'Dec'){
$month_start = '12';
}
/*---------------------------------------แปลงค่าเดือนที่สิ้นสุด-------------------------*/
if($finish[0] == 'Jun'){
$month_finish = '01';
}else if($finish[0] == 'Feb'){
$month_finish = '02';
}else if($finish[0] == 'Mar'){
$month_finish = '03';
}else if($finish[0] == 'Apr'){
$month_finish = '04';
}else if($finish[0] == 'May'){
$month_finish = '05';
}else if($finish[0] == 'Jun'){
$month_finish = '06';
}else if($finish[0] == 'Jul'){
$month_finish = '07';
}else if($finish[0] == 'Aug'){
$month_finish = '08';
}else if($finish[0] == 'Sep'){
$month_finish = '09';
}else if($finish[0] == 'Oct'){
$month_finish = '10';
}else if($finish[0] == 'Nov'){
$month_finish = '11';
}else if($finish[0] == 'Dec'){
$month_finish = '12';
}
//echo $_SESSION[ID_Period];
//echo $day_start.'/'.$month_start."-".$day_finish.'/'.$month_finish.'/'.$finish[2];
if($day >= $day_start && $month >= $month_start && $day <= $day_finish && $month <= $month_finish&& $year <= $finish[2] ){
?>
<tr>
<td height="20" colspan="2" align="left"><table width="375" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="375" height="20" align="center" bgcolor="#0066CC" class="TopicSection"><div class="style3" id="result_box" dir="ltr"> รายชื่ออาจารย์ประจำโรงเรียน <? echo $_SESSION[Name_Sc];?></div></td>
</tr>
</table></td>
</tr>
<tr>
<td ><div align="left">กรุณาเลือกชื่ออาจารย์ผู้สอนที่ต้องการประเมิน</div></td>
<td height="20" align="left">
<?
$list = mssql_query("select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc EXCEPT select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Assess,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc and Promise.ID_Tc = Assess.ID_Tc ");
?>
<select name="teacher_lb" class="TextBox" id="teacher_lb" style="width:250px;" >
<option value=''>---กรุณาเลือกอาจารย์ที่ท่านต้องการประเมิน----</option>
<?
while($a = mssql_fetch_array($list)){
?>
<option value='<? echo $a[0] ?>'><? echo $a[1]?> <? echo $a[2]?> <? echo $a[3]?></option>
<? } ?>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------->
<?
$ans1 = mssql_query("select Assess.ID_Tc,Date_At from Assess,Period where Assess.ID_Assess = '$_SESSION[ID_Sc]' and Assess.ID_Period = Period.ID_Period
");
$num2 = mssql_num_rows($ans1);
if($num2 != ""){
while($ans2 = mssql_fetch_array($ans1)){
$Y = explode (" ",$ans2['Date_At']);
if($Y[2] == $start[2] ){ }else{
$list2 = mssql_query("select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc and Promise.ID_Tc = '$ans2[ID_Tc]' ");
while($a2 = mssql_fetch_array($list2)){ ?>
<option value='<? echo $a2[0] ?>'><? echo $a2[1]?> <? echo $a2[2]?> <? echo $a2[3]?></option>
<? }
}
}
}
?>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------>
</select> </td>
<td height="20"><div align="center">
<input type="submit" name="Submit" value="ประเมิน" />
</div></td>
</tr>
<? }else{echo "<span class='style4'>ยังไม่อยู่ในช่วงเวลาการประเมิน กรุณาประเมินในช่วงวันที่ ".$day_start." ".$month_start." ".$start[2]." ถึง".$day_finish." ".$month_finish." ".$finish[2]."</span> ";
}
}else{ echo "<center><span class='style4'>ยังไม่อยู่ในช่วงการประเมินของปี".$year."<center><span class='style2'>";
}
}
?>
</table>
</div>
codeทั้งหมดคะพี่(อิอิพี่ดูรู้เรื่องป่าว)
Date :
2009-10-05 22:43:21
By :
LuckyStar
เดียวตอนเช้าค่อยมาดูให้น่าครับ
แต่ถ้ายังไงก็ช่วยตั้งคำถามใหม่หน่อยครับ คือผมยังมึน ๆ กับคำถามอยู่นิดหน่อย
Date :
2009-10-06 04:07:00
By :
xbeginner01
ระบบประเมินอ่าพี่โรงเรียนจาประเมินได้ต้องอยู่ในช่วงเวลาที่adminกำหนดช่ายปะหนูเลยselectช่วงเวลาประเมินแบบนี้
$sql = mssql_query("select ID_Period,Date_start,Date_finish from Period ");
แล้วเปรียบเทียบกะวันที่ปัจจุบันถ้าอยู่ในช่วงก้อให้selectอาจารย์ที่มีสัญญากับโรงเรียนออกมาในlistแบบนี้
Code (PHP)
<tr>
<td ><div align="left">กรุณาเลือกชื่ออาจารย์ผู้สอนที่ต้องการประเมิน</div></td>
<td height="20" align="left">
<?
$list = mssql_query("select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc EXCEPT select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Assess,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc and Promise.ID_Tc = Assess.ID_Tc ");
?>
<select name="teacher_lb" class="TextBox" id="teacher_lb" style="width:250px;" >
<option value=''>---กรุณาเลือกอาจารย์ที่ท่านต้องการประเมิน----</option>
<?
while($a = mssql_fetch_array($list)){
?>
<option value='<? echo $a[0] ?>'><? echo $a[1]?> <? echo $a[2]?> <? echo $a[3]?></option>
<? } ?>
<!------------------------------------------------------------------------------------------------------------------------------------>
แล้วที่นี้เมื่อประเมินอาจารย์คนไหนไปแล้วกลับมาที่listจะต้องไม่มีชื่อาจาย์คนนั้นที่ประเมินแล้วในlistแต่ถ้าถัดไปปีต่อไปชื่ออาจารย์คนนั้นต้องกลับมาใหม่เพราะคนละปีหนูเลยเขียนแบบนี้
Code (PHP)
<?
$ans1 = mssql_query("select Assess.ID_Tc,Date_At from Assess,Period where Assess.ID_Assess = '$_SESSION[ID_Sc]' and Assess.ID_Period = Period.ID_Period
");
$num2 = mssql_num_rows($ans1);
if($num2 != ""){
while($ans2 = mssql_fetch_array($ans1)){
$Y = explode (" ",$ans2['Date_At']);
if($Y[2] == $start[2] ){ }else{
$list2 = mssql_query("select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc and Promise.ID_Tc = '$ans2[ID_Tc]' ");
while($a2 = mssql_fetch_array($list2)){ ?>
<option value='<? echo $a2[0] ?>'><? echo $a2[1]?> <? echo $a2[2]?> <? echo $a2[3]?></option>
<? }
}
}
เพราะจะเอามาcheckว่าปีทีประเมินไปแล้วของอาจารย์คนนั้นเท่ากับปีนี้หรือป่าวถ้าไม่แสดงว่าปีนี้ยังไม่ประเมินอาจารย์คนนั้นให้แสดงชื่ออาจารย์ในlistได้
ปัญหาคือว่า
พอมีข้อมูลประเมินปีก่อนคือ51พอมาปี52ปีนี้ชื่ออาจารย์ที่เคยประเมินไปปีที่แล้วก็กลับมาอยู่ในlist
พอประเมินปี52เสร็จแต่ปรากฏว่าในlistชื่ออาจารย์คนนั้นยังไม่หายไปทั้งๆที่ต้องหายไปเพราะเราประเมินไปแล้วงี้อ่าพี่(จาเข้าใจหนูไหมเนี่ยฮ่าๆๆๆ)
ไงช่วยด้วยนะค่ะ
Date :
2009-10-06 09:42:52
By :
LuckyStar
Code (PHP)
if($day >= $day_start && $month >= $month_start && $day <= $day_finish && $month <= $month_finish&& $year <= $finish[2] ){
เปลี่ยนเป็ฯ
Code (PHP)
if($day >= $day_start && $month >= $month_start &&
(($day <= $day_finish && $month == $month_finish&& $year == $finish[2])||
($month < $month_finish&& $year == $finish[2])||
($year<$finish[2]))
){
เอาแค่นี้ก่อน กำลังตรวจสอบให้อยู่
แล้วส่งตาราง Period มาให้ดูหน่อยครับ
อ่อนึกออกอีกอย่างแล้วตอนแทรกข้อมูลหลังการประเมิน ทำถูกต้องเปล่าครับข้อมูลถูกแทรกในฐานข้อมูลจริงเปล่า ค่าที่แทรกแต่ละฟิลด์ถูกต้องตามที่ต้องการเปล่า เช็คตรงนี้ให้ด้วยครับ เพราะไม่ได้โชว์ส่วนนี้ให้ไว้ด้วย
Date :
2009-10-06 16:36:22
By :
xbeginner01
โทษพี่หนูหายไปนานเลยชีวิตวุ่นวายอยู่
นี่ภาพของPeriodนะ
แทรกที่พี่หมายถึงคือข้อมลปี52ช่ายป่าวถ้าช่ายมันก้อลงฐานนะพี่
Date :
2009-10-10 18:40:05
By :
LuckyStar
ลืมไปแล้วน่ะเนี่ย 55+
นึกว่าได้ไปแล้ว งั้นขออีกสักพักครับ ตอนนี้ดูหนังอยู่ เดียวดูจบแล้วมาช่วย หรือรอพี่ๆใจดีคนอื่นมาดูต่อให้ได้น่ะ
สองอันเนี่ยผิดแน่ๆแหล่ะ
$start = explode (" ",$result['Date_start']);
$finish = explode (" ", $result['Date_finish']);
Date :
2009-10-10 18:49:33
By :
xbeginner01
Code (PHP)
$day = date("d");
$month = date("m");
$year = date("Y");
$sql = mssql_query("select ID_Period,Date_start,Date_finish from Period ");
?>
<div class="main">
<table width="903" >
<?
while($result = mssql_fetch_array($sql)){
//$start = explode ("/", date("d/m/Y",$result['Date_start']));
//$finish = explode ("/", date("d/m/Y",$result['Date_finish']));
$start = explode (" ",$result['Date_start']);
$finish = explode (" ", $result['Date_finish']);
if($start[2] == $year){//เลือกช่วงการประเมินปีนี้
//echo $start[0].$start[1].$start[2];
$_SESSION[ID_Period] = $result['ID_Period'];
$day_start = $start[1];
$day_finish = $finish[1];
/*------------------------------แปลงค่าเดือนที่เริ่ม-----------------------------*/
if($start[0] == 'Jun'){
$month_start = '01';
}else if($start[0] == 'Feb'){
$month_start = '02';
}else if($start[0] == 'Mar'){
$month_start = '03';
}else if($start[0] == 'Apr'){
$month_start = '04';
}else if($start[0] == 'May'){
$month_start = '05';
}else if($start[0] == 'Jun'){
$month_start = '06';
}else if($start[0] == 'Jul'){
$month_start = '07';
}else if($start[0] == 'Aug'){
$month_start = '08';
}else if($start[0] == 'Sep'){
$month_start = '09';
}else if($start[0] == 'Oct'){
$month_start = '10';
}else if($start[0] == 'Nov'){
$month_start = '11';
}else if($start[0] == 'Dec'){
$month_start = '12';
}
/*---------------------------------------แปลงค่าเดือนที่สิ้นสุด-------------------------*/
if($finish[0] == 'Jun'){
$month_finish = '01';
}else if($finish[0] == 'Feb'){
$month_finish = '02';
}else if($finish[0] == 'Mar'){
$month_finish = '03';
}else if($finish[0] == 'Apr'){
$month_finish = '04';
}else if($finish[0] == 'May'){
$month_finish = '05';
}else if($finish[0] == 'Jun'){
$month_finish = '06';
}else if($finish[0] == 'Jul'){
$month_finish = '07';
}else if($finish[0] == 'Aug'){
$month_finish = '08';
}else if($finish[0] == 'Sep'){
$month_finish = '09';
}else if($finish[0] == 'Oct'){
$month_finish = '10';
}else if($finish[0] == 'Nov'){
$month_finish = '11';
}else if($finish[0] == 'Dec'){
$month_finish = '12';
}
//echo $_SESSION[ID_Period];
//echo $day_start.'/'.$month_start."-".$day_finish.'/'.$month_finish.'/'.$finish[2];
if($day >= $day_start && $month >= $month_start && $day <= $day_finish && $month <= $month_finish&& $year <= $finish[2] ){
?>
เปลี่ยนเป็น
Code (PHP)
<?php
session_start();
$day = date("d");
$month = date("m");
$year = date("Y")+543; // +543 เพื่อให้เป็นปี พ.ศ. <--จำเป็นต้องให้เป็น พ.ศ.
$sql = mssql_query("select ID_Period,Date_start,Date_finish from Period ");
?>
<div class="main">
<table width="903" >
<? php
while($result = mssql_fetch_array($sql)){
list($day_start,$month_start,$year_start)= split('[/[:space:]]',$result['Date_start']);
list($day_finish,$month_finish,$year_finish)= split('[/[:space:]]',$result['Date_finish']);
if($year_start ==$year){
$_SESSION[ID_Period] = $result['ID_Period'];
if($day >= $day_start && $month >= $month_start &&
(($day <= $day_finish && $month == $month_finish&& $year == $year_finish)||
($month < $month_finish&& $year == $year_finish)||
($year<$year_finish)) ){
?>
Code (PHP)
if($Y[2] == $start[2] )
เปลี่ยนเป็น
if($Y[2] == $year_start )
Code (PHP)
echo "<span class='style4'>ยังไม่อยู่ในช่วงเวลาการประเมิน กรุณาประเมินในช่วงวันที่ ".$day_start." ".$month_start." ".$start[2]." ถึง".$day_finish." ".$month_finish." ".$finish[2]."</span> "
เปลี่ยนเป็น
echo "<span class='style4'>ยังไม่อยู่ในช่วงเวลาการประเมิน กรุณาประเมินในช่วงวันที่ ".$day_start." ".$month_start." ".$year_start." ถึง".$day_finish." ".$month_finish." ".$year_finish."</span> "
อันนี้แก้ให้ กรณีที่แน่ใจว่าโค้ดตัวเอง echo มาถูกน่ะไม่ต้องแก้ก็ได้
แต่ตรง $year เช็คหน่อยครับเป็นปี พ.ศ เปล่าถ้าไม่ใช้ก็ +543 ไป จำเป็นมากน่ะครับต้องให้เป็น พ.ศ เพราะในฐานข้อมูลเป็น พ.ศ หมด
อีกอย่างอย่าลืม session_start() ไว้บนสุดด้วย
ต่อไปเดียวมาดูใน query มาเห็นแว๊บๆแหล่ะว่ามีที่ผิด...
Date :
2009-10-10 22:06:00
By :
xbeginner01
เย้ๆขอบคุนนะค่ะ พี่สู้ๆๆ ดูให้ด้วยนะค่ะ
Date :
2009-10-11 08:11:23
By :
LuckyStar
ง่า สรุปยังแก้ไม่ได้อีกหรอ
ลองเช็ค $_SESSION[ID_Sc] มีค่าเปล่า
แล้วที่ถามคือตอนเลือกชื่ออาจารย์ผู้สอนที่ต้องการประเมิน มันแสดงผิดใช่ป่ะ ???
ลองเช็คคำสั่งข้างล่างดูใหม่ ลองเรียบเรียงความคิดใหม่ พอดีพี่ใช้ except ไม่ได้ก็เลยจะทดสอบผลไม่ได้ไปด้วย +ขี้เกียจอ่านนิดหน่อย 555+
$list = mssql_query("select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc EXCEPT select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Assess,Teacher where Promise.ID_Sc = '$_SESSION[ID_Sc]' and Promise.ID_Tc = Teacher.ID_Tc and Promise.ID_Tc = Assess.ID_Tc ");
ทางที่ดีน้องต้องพีเซนความสัมพันธ์ของสี่ตาราง assess promise period teacher ให้พี่ฟังหน่อยหรือจะแสดงเป็น ERD ให้พี่ดูก็ยังดี
เรื่องนี้สงสัยจะยาว บอกตามตรงเลยพี่ยังไม่มองไม่ออก
น้องต้องพยายามแก้ไปเรื่อยๆน่ะ อย่าหวังไรมากเอิ้กๆ
Date :
2009-10-11 12:46:53
By :
xbeginner01
พี่ค่ะ $result['Date_start'] มานแสดงเปง Oct 11 2009 12:00 AM ถ้าจะให้เป็นเป็นdd/mm/YYYYยังไงค่ะเพราะเป็นงี้เลยใช้codeพี่ไม่ได้อ่า
Date :
2009-10-11 12:48:53
By :
LuckyStar
กำ แล้วไมน้องให้ตารางพี่เป็น 1/10/2552 0:00:00 มาละ ทำให้เข้าใจผิดไปใหญ่เลยเหอะๆ งั้นกลับไปใช้อันเก่าเลยครับ
แล้วฟิลด์อืนๆ แสดง Oct 11 2009 12:00 AM เรียงกันแบบนี้เหมือนกันเปล่าครับ
Date :
2009-10-11 12:55:08
By :
xbeginner01
ในตารางมันเป็น 1/10/2552 0:00:00 อ่าพี่แต่เวลาechoแสดงออกมาอยู่ดีมานเป็น Oct 11 2009 12:00 AM อ่าค่ะหนูก้อไม่รู้ว่าทามไม
Date :
2009-10-12 00:25:29
By :
LuckyStar
เป็นเพราะ mssql หรือเปล่าน่ะ หุหุ อันนี้ไม่ทราบแหล่ะ งั้นยึดผลการ echo ละกันน่ะครับ ใช้โค้ดของน้องแต่แรกเลยครับ มาเริ่มดูส่วนอื่นดีกว่า
-เช็ค $_SESSION[ID_Sc] มีค่าเปล่า echo มาทีครับ ถ้าไม่มีค่าก็ผิดตรงนี้
-ทางที่ดีช่วยแสดง ERD ให้พี่ดูหน่อยได้เปล่าครับ
- ไม่งั้นลองมาเขียนคำสั่ง query กันใหม่ไม เพราะพี่ไม่ค่อยเข้าใจ except เท่าไร (พูดอีกอย่าง mysql ไม่มี except :p )
แต่แรกน้องยึด $_SESSION[ID_Sc] เป็นหลัก แล้วลองค้นหาข้อมูลจากตาราง Promise
select * from Promise where Promise.ID_Sc=$_SESSION[ID_Sc]
จากนั้น ก็ดูที่ตาราง Assess ดูว่า ID_Sc นี้ประเมินอาจารย์คนไหนไปแล้วบ้าง
select * from Assess where Assess.ID_Assess=$_SESSION[ID_Sc]
ถ้า ID_Sc คนนี้ มี id_tc หรือไอดีของจารย์ใน assess หรือมีการประเมินไปแล้ว ก็ไม่ให้แสดงข้อมูล
select Promise.ID_Sc,Promise.ID_Tc from Promise,Assess where Promise.ID_Sc=$_SESSION[ID_Sc] and Assess.ID_Assess=$_SESSION[ID_Sc] and Promise.ID_Tc!=Assess.ID_Tc
เนื่องจากว่าบางทีมีการแสดงข้อมูลซ้ำ เราจึงต้อง group by ID_Tc
select Promise.ID_Sc,Promise.ID_Tc from Promise,Assess where Promise.ID_Sc=$_SESSION[ID_Sc] and Assess.ID_Assess=$_SESSION[ID_Sc] and Promise.ID_Tc!=Assess.ID_Tc group by Promise.ID_Tc
จากนั้นอยากแสดงแค่ข้อมูลอาจารย์คนนี้ด้วยชื่อนามสกุลก็แทรกตาราง Teacher เข้าไป
select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Assess,Teacher where Promise.ID_Sc=$_SESSION[ID_Sc] and Assess.ID_Assess=$_SESSION[ID_Sc] and Promise.ID_Tc!=Assess.ID_Tc group by Promise.ID_Tc
แต่ว่าถ้าใน Assess มีข้อมูลการประเมินปีที่แล้ว และไม่ใช่ปีนี้ ก็ต้องทำให้มันแสดงข้อมูลออกมาโดยเทียบปีที่จะประเมินกับ Date_at เช่นประเมินปี 1980
select Promise.ID_Tc,First_Tc,Name_Tc,Sur_Tc from Promise,Assess,Teacher where Promise.ID_Sc=$_SESSION[ID_Sc] and Assess.ID_Assess=$_SESSION[ID_Sc] and ( Promise.ID_Tc!=Assess.ID_Tc or year(Assess.Date_At)=1980 )
Date_At พี่มอง type เป็น datetime พี่ก็เลยใช้ year(Assess.Date_At) แสดงปีออกมาได้ แต่กรณีที่ไม่ใช่ type datetime อาจเป็น varchar หรือ int ต้องใช้วิธีอื่น ตอนนี้พี่นึกไม่ออกแหล่ะ
concept การสร้างquery ของพี่ก็ประมาณนี้แหล่ะ ตรงนี้อาจเป็นแนวทางให้น้องคิดออกได้บ้างว่าควรแก้ตรงไหน
Date :
2009-10-12 02:48:15
By :
xbeginner01
Load balance : Server 00