ไม่สามารถออกรายงานข้อมูลการเข้าชั้นเรียน ในแต่ละเดือน รบกวนช่วยดูให้หน่อยค่ะ
รบกวนหน่อยหน่อยค่ะ คือกำลังหาผลรวมและคำนวนหาเปอร์เซ็นต์การเข้าเรียนของนักเรียน
เลยลองนำตัวอย่างจากบทความมาประยุกต์ใช้ มันติดปัญหานับจำนวนเป็น 0 หมดเลยค่ะ
ช่วยดูให้หน่อยค่ะ
อ้างอิงจากบทความนี้ https://www.thaicreate.com/community/php-array-report.html
Code (PHP)
<html>
<head>
<title>รายงานการมาเรียน</title>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<style>
.number{ text-align : right;}
.number div{
background: #91F7A4;
color : #ff0000;
}
#test_report th{ background-color : #21BBD6; color : #ffffff;}
#test_report{
border-right : 1px solid #eeeeee;
border-bottom : 1px solid #eeeeee;
}
#test_report td,#test_report th{
border-top : 1px solid #eeeeee;
border-left : 1px solid #eeeeee;
padding : 2px;
}
#txt_year{ width : 70px;}
.fail{ color : red;}
</style>
</head>
<body>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
<table>
<tr>
<td>ระบุเดือน-ปี : </td>
<td>
<select name="txt_month">
<option value="">--------------</option>
<?php
$month = array('01' => 'มกราคม', '02' => 'กุมภาพันธ์', '03' => 'มีนาคม', '04' => 'เมษายน',
'05' => 'พฤษภาคม', '06' => 'มิถุนายน', '07' => 'กรกฎาคม', '08' => 'สิงหาคม',
'09' => 'กันยายน ', '10' => 'ตุลาคม', '11' => 'พฤศจิกายน', '12' => 'ธันวาคม');
$txtMonth = isset($_POST['txt_month']) && $_POST['txt_month'] != '' ? $_POST['txt_month'] : date('m');
foreach($month as $i=>$mName) {
$selected = '';
if($txtMonth == $i) $selected = 'selected="selected"';
echo '<option value="'.$i.'" '.$selected.'>'. $mName .'</option>'."\n";
}
?>
</select>
</td>
<td>
<select name="txt_year">
<option value="">--------------</option>
<?php
$txtYear = (isset($_POST['txt_year']) && $_POST['txt_year'] != '') ? $_POST['txt_year'] : date('Y');
$yearStart = date('Y');
$yearEnd = $txtYear-5;
for($year=$yearStart;$year > $yearEnd;$year--){
$selected = '';
if($txtYear == $year) $selected = 'selected="selected"';
echo '<option value="'.$year.'" '.$selected.'>'. ($year+543) .'</option>'."\n";
}
?>
</select>
</td>
<td><input type="submit" value="ค้นหา" /></td>
</tr>
</table>
</form>
<?php
//รับค่าตัวแปรที่ส่งมาจากแบบฟอร์ม HTML
$year = isset($_POST['txt_year']) ? mysql_real_escape_string($_POST['txt_year']) : '';
$month = isset($_POST['txt_month']) ? mysql_real_escape_string($_POST['txt_month']) : '';
if($year == '' || $month == '') exit('<p class="fail">กรุณาระบุ "เดือน-ปี" ที่ต้องการเรียกรายงาน</p>');
//เปิดการเชื่อมต่อฐานข้อมูล
mysql_connect("localhost","root","root");
mysql_select_db("project");
mysql_query("SET NAMES UTF8");
//ดึงข้อมูลนักเรีนนทั้งหมด
$allEmpData = array();
$strSQL = "SELECT stu_id,stu_name FROM `student_data` ";
$qry = mysql_query($strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysql_error());
while($row = mysql_fetch_assoc($qry)){
$allEmpData[$row['stu_id']] = $row['stu_name'];
}
//เรียกข้อมูลการมาเรียนของเดือนที่ต้องการ
$allReportData = array();
$strSQL = "SELECT id_attendance, DAY(`date`) AS inclass_id, COUNT(*) AS inclass_id FROM `attendance` ";
$strSQL.= "WHERE `inclass_id` LIKE '901' ";
$strSQL.= "GROUP by id_attendance,DAY(`date`)";
$qry = mysql_query($strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysql_error());
while($row = mysql_fetch_assoc($qry)){
$allReportData[$row['id_attendance']][$row['date']] = $row['inclass_id'];
}
echo "<table border='0' id='test_report' cellpadding='0' cellspacing='0'>";
echo '<tr>';//เปิดแถวใหม่ ตาราง HTML
echo '<th>รายชื่อนักเรียน</th>';
//วันที่สุดท้ายของเดือน
$timeDate = strtotime($year.'-'.$month."-01"); //เปลี่ยนวันที่เป็น timestamp
$lastDay = date("t", $timeDate); //จำนวนวันของเดือน
//สร้างหัวตารางตั้งแต่วันที่ 1 ถึงวันที่สุดท้ายของดือน
for($day=1;$day<=$lastDay;$day++){
echo '<th>' . substr("0".$day, -2) . '</th>';
}
echo '<th>'.จำนวนครั้ง.'</th>';
echo '<th>'.เปอร์เซนต์เข้าเรียน.'</th>';
echo "</tr>";
foreach($allEmpData as $id_attendance=>$stu_name){
echo '<tr>';//เปิดแถวใหม่ ตาราง HTML
echo '<td>'. $stu_name .'</td>';
//เรียกข้อมูลการมาเรียนของนักเรียนแต่ละคน ในเดือนนี้
for($j=1;$j<=$lastDay;$j++){
$inclass_id = isset($allReportData[$id_attendance][$j]) ? '<div>'.$allReportData[$id_attendance][$j].'</div>' : 0;
echo "<td class='number'>" ,$inclass_id, "</td>";
}
echo '<td>'. $row[0] .'</td>'; //ช่องนับจำนวนวันที่นักเรียนเข้าเรียนภายใน 30 วัน
echo '<td>'. $xxx .'</td>'; //ช่องคำนวนเปอร์เซนต์การเข้าเรียนของนักเรียน
echo '</tr>';//ปิดแถวตาราง HTML
}
echo "</table>";
mysql_close();//ปิดการเชื่อมต่อฐานข้อมูล
?>
Tag : PHP, MySQL, Report Others
Date :
2014-11-20 22:06:28
By :
llooll
View :
1111
Reply :
11
เบื่อจริงๆ พวก 2 เพศเนี่ย
คงนึกว่าปลอมเป็นตัวเมียแล้วจะมีคนมาช่วยมั้ง
Date :
2014-11-21 08:43:30
By :
ห้ามตอบเกินวันละ 2 กระทู้
ลองเอาคำสั่งนี้ไปรันบน phpmyadmin ดูก่อนดีกว่าครับ มีข้อมูลไหม
Code (SQL)
SELECT id_attendance, DAY(`date`) AS inclass_id, COUNT(*) AS inclass_id FROM `attendance`
WHERE `inclass_id` LIKE '901' GROUP by id_attendance,DAY(`date`)
Date :
2014-11-21 09:07:48
By :
cowboycnx
เอิ่มมม งงเลยค่ะ ใช้อ่ะไรวัดหรอค่ะว่าหนูเป็นอีกเพศ ??
ดึงออกมาได้แล้วค่ะว่าทั้งเดือนเข้าเรียนวันที่เท่าไหร่บ้างง ช่วยแนะวิธีที่จะนับผลรวมทั้งเดือนของแต่ละคนให้หน่อยได้ไหมค่ะ ??
ขอบคุณมากค่ะ
Date :
2014-11-25 11:05:44
By :
llooll
Apply จาก SQL ของคุณนิดเดียวครับ
Code (SQL)
select count(*) as total from tb_name where date_column between 'date_from' and 'date_to' and stu_id = 'รหัสนักศึกษา'
Date :
2014-11-25 11:14:40
By :
Manussawin
ขอบคุณสำหรับคำแนะนำมากเลย ค่ะ แต่มั้นก้ยังไม่ออกค่ะ ตรงช่องผลรวม
Code (PHP)
<?php
//รับค่าตัวแปรที่ส่งมาจากแบบฟอร์ม HTML
$year = isset($_POST['txt_year']) ? mysql_real_escape_string($_POST['txt_year']) : '';
$month = isset($_POST['txt_month']) ? mysql_real_escape_string($_POST['txt_month']) : '';
if($year == '' || $month == '') exit('<p class="fail">กรุณาระบุ "เดือน-ปี" ที่ต้องการเรียกรายงาน</p>');
//เปิดการเชื่อมต่อฐานข้อมูล
//mysql_connect("localhost","root","abcd1234"); //ข้อมูลนี้ได้มาจากตอนติดตั้งเว็บเซิร์ฟเวอร์
mysql_connect("localhost","root","root"); //ข้อมูลนี้ได้มาจากตอนติดตั้งเว็บเซิร์ฟเวอร์
mysql_select_db("project");
mysql_query("SET NAMES UTF8");
echo "<table border='0' id='test_report' cellpadding='0' cellspacing='0'>";
echo '<tr>';//เปิดแถวใหม่ ตาราง HTML
echo '<th>รายชื่อนักเรียน</th>';
//วันที่สุดท้ายของเดือน
$timeDate = strtotime($year.'-'.$month."-01"); //เปลี่ยนวันที่เป็น timestamp
$lastDay = date("t", $timeDate); //จำนวนวันของเดือน
//สร้างหัวตารางตั้งแต่วันที่ 1 ถึงวันที่สุดท้ายของดือน
for($day=1;$day<=$lastDay;$day++){
echo '<th>' . substr("0".$day, -2) . '</th>';
}
echo '<th>ผลรวม</th>';
echo '<th>คิดเปอร์เซนต์</th>';
echo "</tr>";
//เรียกข้อมูลการเข้าเรียนของเดือนที่ต้องการ
//++ ต้องดึงมาจากฐานข้อมูลผู้ใช้ ++
$strSQL = "SELECT stu_id,stu_name,stu_lname FROM `student_data` ";
$qry = mysql_query($strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysql_error());
while($row = mysql_fetch_assoc($qry)){
echo '<tr>';//เปิดแถวใหม่ ตาราง HTML
echo '<td>'. $row['stu_name'] .' '. $row['stu_lname'] .'</td>';
//เรียกข้อมูลการมาเรียนของนักเรียนแต่ละคน ในเดือนนี้
for($j=1;$j<=$lastDay;$j++){
$d = substr("0".$j, -2);
$strSQL = "SELECT COUNT(*) AS Num FROM `attendance` ";
$strSQL.= "WHERE `date` = '$year-$month-$d' AND stu_id = '". $row['stu_id'] ."' ";
$strSQL.= "AND`inclass_id` LIKE '901' ";
$strSQL.= "GROUP by DAY(`date`)";
$qry2 = mysql_query($strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysql_error());
$row2 = mysql_fetch_assoc($qry2);
$Num = ($row2['Num'] > 0) ? '<div>'. $row2['Num'] . '</div>' : 0;
echo "<td class='number'>", $Num, "</td>";
///////////////////////////////นับผลรวม เข้าเรียนทั้งหมดกี่วันในแต่ละเดือน///////////////////////////////////////////
$strSQL = "select count(*) as Num from attendance where date between 'date' and 'date' and stu_id = 'stu_id'";
$qry1 = mysql_query($strSQL) or die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ Error : '. mysql_error());
$row1 = mysql_fetch_assoc($qry1);
$Num1 = $row2['$Num'];
}
echo "<td class='number'>", $Num1, "</td>"; ///// ผลลัพธ์ เข้าเรียนทั้งหมดกี่วันในแต่ล่ะเดือน ///////
echo "<td class='number'>", $Num2, "</td>"; ///// ผลลัพธ์ คำนวน % จากการเข้าเรียนทั้งหมดกี่วันในแต่ล่ะเดือน ///////
echo '</tr>';//ปิดแถวตาราง HTML
}
echo "</table>";
mysql_close();//ปิดการเชื่อมต่อฐานข้อมูล
?>
Date :
2014-11-25 11:48:46
By :
llooll
ลองดูครับเพื่อช่วยได้Code (PHP)
$schoolQRY = mysql_query("select * from ตารางข้อมูล where ฟิลที่ต้องการ='".$row['ฟิลที่ต้องการ']."'");
echo "<td><center>".number_format(mysql_num_rows($schoolQRY))."</center></td>";
//echo '<td>'. $row[0] .'sss</td>'; //ช่องนับจำนวนวันที่นักเรียนเข้าเรียนภายใน 30 วัน
echo '<td>'. $xxx .'</td>'; //ช่องคำนวนเปอร์เซนต์การเข้าเรียนของนักเรียน
echo '</tr>';//ปิดแถวตาราง HTML
ในส่งนการหาเปอร์เซ็นต์ก็แบบเดี่ยวกัน คือ จำนวนนักเรียนต่อเดือนคูณร้อยหารจำนวนเดือน
เช่น
Code (PHP)
echo "<td><center>".number_format(mysql_num_rows($schoolQRY)*100/จำนวนเดือน,2). " % "."</center></td>";
// echo '<td>'. $xxx .'</td>'; //ช่องคำนวนเปอร์เซนต์การเข้าเรียนของนักเรียน
จะได้แบบนี้
ประวัติการแก้ไข 2014-11-25 12:18:53 2014-11-25 12:20:06
Date :
2014-11-25 11:56:32
By :
LAGO
ขอบคุณมากเลยค่ะ คุณ LAGO ช่วยได้เยาะเลยค่ะ
Date :
2014-11-25 12:46:58
By :
llooll
Load balance : Server 01