GORAGOD.com

freelance, web developer, web designer, hosting, domain name

มีเรื่องรบกวน เกี่ยวกับ text file ครับ ต้องการอ่านข้อมูลมาใช้ บา

คือผมมีฐานข้อมูล แบบ file.db หรือ file database แล้วต้องการนำข้อมูลบางส่วนมาใช้งาน แบบว่า ในนั้นตัวเลขจะเป็นตัวเลขรวม วินาที แล้วผมต้องการนำตัวเลขในนั้นมา คำนวณ เพื่อให้มันออกมาเป็นชั่วโมงครับ รบกวนผู้รู้ช่วยชีแนะ โค๊ดหน่อยนะครับ ผมไม่เก่ง php ครับ
 ผมลองใช้โค๊ด อ่านไฟล์แล้ว มันโชว์มาหมดทุกอันเลย เลยไม่รู้จะทำยังไงครับ อีกอย่างผมเป็นมือใหม่ด้วย เลยไม่ค่อยเข้าใจครับ

คือผมต้องการใช้ข้อมูล ส่วนที่เป็น total=84486 ครับ ต้องการส่วนนี้แหละ เอาไปคำนวณเวลา จากวินาที เป็นชม.


นี่คือตัวอย่างครับ

02 ก.ย. 2552 20 3,330

ขอขอบคุณล่วงหน้านะครับ อาจารย์ และผู้มีวิชาแก่กล้าท่านอื่นครับ ข้าน้อย อยากได้วิทยายุทธ ของท่านบ้าง

#1

นี่คือข้อมูล บางส่วนครับ

q:5>1:0:-1:-1:-1:-1:-1
q:5>2:0:-1:-1:-1:-1:-1
q:5>3:0:-1:-1:-1:-1:-1
q:5>4:0:-1:-1:-1:-1:-1
q:5>5:0:-1:-1:-1:-1:-1
q:6>1:0:-1:-1:-1:-1:-1
q:6>2:0:-1:-1:-1:-1:-1
q:6>3:0:-1:-1:-1:-1:-1
q:7>1:0:-1:-1:-1:-1:-1
q:7>2:0:-1:-1:-1:-1:-1
q:7>3:0:-1:-1:-1:-1:-1
q:7>4:0:-1:-1:-1:-1:-1
q:7>5:0:-1:-1:-1:-1:-1
q:7>6:0:-1:-1:-1:-1:-1
q:8>1:0:-1:-1:-1:-1:-1
q:8>2:0:-1:-1:-1:-1:-1
q:8>3:0:-1:-1:-1:-1:-1
q:8>4:0:-1:-1:-1:-1:-1
r:-51835398:1236
m:m=393:p=19102:l=23218:a=0:e=0:v=1221:g=2346:t=5354:q=10373:s=10511:r=490:total=84486 <ต้องการใช้ตัวเลขนี้ครับ
t:1:1393:80>80>80>80:50>50>60>50:90>80>80>90:100>100>80>100:-1>-1>-1>-1
t:2:1932:100>100>90>100:70>40>40>90:80>30>30>70:90>50>70>80:-1>-1>-1>-1
t:3:743:100>100>90>100:100>100>80>100:60>60>60>60:80>70>70>80:-1>-1>-1>-1
t:4:1286:80>80>100>80:100>50>50>100:90>70>70>90:80>70>70>80:-1>-1>-1>-1
t:5:0:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1
t:6:0:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1
t:7:0:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1
t:8:0:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1:-1>-1>-1>-1
 

#2

เอาง่ายๆ สุดๆ ไปเลยนะ

<?php
$fr = file('data.dat'); //อ่านไฟล์เป็นบรรทัด
for($i = 0 ; $i < count($fr); $i++){ // วนทีละบรรทัด
  var ds = explode('total=', $fr[$i]); // แยกข้อมูลออกโดยใช้ total= เป็นตัวแยก
  if (ds[1] != '') {
     echo ds[1]; // แสดง 84486 ถ้ามี
  }
}
?>
#3

ขอบคุณครับ อาจารย์ ผมมือใหม่จะลองทำดูนะครับ ขอบคุณจริงๆครับ

#4

ผมลองใช้โค๊ดตามที่อาจารย์บอกแล้วนะครับ

<?php
$fr = file('u004083/U004083_intro3.db'); //อ่านไฟล์เป็นบรรทัด
for($i = 0 ; $i < count($fr); $i++){ // วนทีละบรรทัด
  var ds = explode('total=', $fr[$i]); // แยกข้อมูลออกโดยใช้ total= เป็นตัวแยก
  if (ds[1] != '') {
     echo ds[1]; // แสดง 84486 ถ้ามี
  }
}
?>



มัน error ครับ ผมมือใหม่ เลย งง เป็นไก่ตาแตกเลยครับ อาจารย์อย่าว่าผมนะครับ ผมไม่เป็นจริงๆครับ

Parse error: syntax error, unexpected T_VAR in D:\cyberworld\AppServ\www\testtxtfile\t2.php on line 4

#5

555+++ ขออภัย

$ds = explode('total=', $fr[$i]);
#6

อาจารย์ครับ
ผมลองเปลี่ยนแล้วครับ

ลองใส่ $ ตรงตัวแปร ใช่มั้ยครับ แบบนี้ก็ error ครับ เป็นเพราะอะไรครับ

Parse error: syntax error, unexpected T_VAR in D:\cyberworld\AppServ\www\testtxtfile\t2.php on line 4

  var $ds = explode('total=', $fr[$i]);  // แยกข้อมูลออกโดยใช้ total= เป็นตัวแยก
  if (ds[1] != '') {
     echo ds[1]; // แสดง 84486 ถ้ามี



แบบนี้ก็ error ครับ เป็นเพราะอะไรครับ 

Parse error: syntax error, unexpected T_VAR in D:\cyberworld\AppServ\www\testtxtfile\t2.php on line 4

  var $ds = explode('total=', $fr[$i]);  // แยกข้อมูลออกโดยใช้ total= เป็นตัวแยก
  if ($ds[1] != '') {
     echo $ds[1]; // แสดง 84486 ถ้ามี


ขอบคุณล่วงหน้าครับ อาจารย์ครับ

#7

ผมยังทำไม่ได้เลยครับ อาจารย์ครับ รบกวนอาจารย์ หรือท่านผู้รู้ ทุกท่านหน่อยจาได้มั้ยครับ ผมไมเก่งจริงๆครับ ขอบคุณมากครับ
#8

555+++

var ไม่ต้องใส่สิ
#9

อ้าวหรอครับ โอเคเลยครับ ผมจะไปทำดูครับ ขอบคุณครับ อาจารย์ครับ

#10

ได้แล้วครับ อาจารย์ครับ ขอบคุณมากครับ เดี๋ยวผมขอไปดัดแปลงก่อนว่าจะให้ เอามาคำนวณ เป็นชั่วโมงยังไงดี เพราะตัวเลขที่ได้ มันบอกเป็นวินาทีอ่ะครับ
#11

อาจารย์ครับ ผมยังไม่เข้าใจเกี่ยวกับ การใช้ตัวแปร ครับ คือ ผมต้องการให้ ผู้ใช้งาน ใส่ username เช่น U004083 (ไม่ใช่แบบล๊อกอินนะครับ) คือเหมือนกับว่า ใส่ username ไปแล้ว โดยผมทำ form submit ไว้แล้วครับ ดังนี้

<html>
<head>
<title>Language Center</title>
</head>
<form name="LID" action="t2.php" method="post">
<font color="#0000FF" >Learner ID : </font><input type="text" name="userid">
<input type="submit" name="submit" value="OK">
</form>
<body>
</body>
</html>


และให้ส่งไปหน้านี้ครับ

<?php
$ตัวแปร = $_POST['userid']; //รับค่า input
$fr = file('ตัวแปร/ตัวแปร_intro3.db"'); //อ่านไฟล์เป็นบรรทัด *** ต้องแปลงตัวแปร มาเป็น path ครับต้องทำยังไงดีครับ
for($i = 0 ; $i < count($fr); $i++){ // วนทีละบรรทัด
  $ds = explode('total=', $fr[$i]);  // แยกข้อมูลออกโดยใช้ total= เป็นตัวแยก
  if ($ds[1] != '') {
  $ds = $ds[1]/3600; //แปลงจากวินาที เป็นชั่วโมง
     echo $ds; }
}
?>

คือผมจะทำโปรแกรมเช็คชั่วโมงเรียนจากโปรแกรมเรียนเก็บชั๋วโมง ให้กับนักเรียนครับ ถ้ายังไงผมขอความอนุเคราะห์ผู้รู้ หรืออาจารย์ด้วยนะครับ

#12

php สามารถใช้ตัวแปร เป็นตัวแปร ได้ ครับ ตัวอย่าง

<?php
$aaa = 'xyz';
$bbb = 'aaa';
echo $$bbb;
?>
#13

ขอบคุณครับอาจารย์ แต่ผมยังงงๆ อยู่ว่า ถ้าจะใช้ตัวแปร มาแปลงใส่ path เพื่อเรียกไฟล์ ผมลองแล้ว มันบอกว่า syntax error คือผมคงไม่เข้าใจ พวก syntax มันด้วยอ่ะครับ

ที่ผมทำแบบนี้เพราะว่า user ต่างๆ สร้างเป็น folder ขึ้นมาครับ แล้ว ชื่อไฟล์ ก็จะขึ้นต้นด้วย user อีกที คราวนี้ผมเลย งงครับ
u004582/u004582_intro3.db
u009852/u009852_intro3.db
ประมาณนี้ครับ อาจารย์


บรรทัดนี้  ต้องเขียน syntax ยังไงให้ถูกต้องครับอาจารย์ครับ


$fr = file('ตัวแปร1/ตัวแปร1_intro3.db"');



แต่ผมจะลองทำดูก่อนนะครับ ถ้าอาจารย์มีข้อเสนอแนะยังไง ข้าน้อย ยินดีครับ ขอบคุณมากๆเลยครับอาจายร์ครับ

#14

<?php
  $data = 'u004528';

  $fr = file("$data/$data"."_intro3.db");
?>
#15

ครับ ขอบคุณมากเลยครับ ท่านอาจารย์ครับ ผมรู้สึกดีมากๆเลยครับ ที่ได้รับคำแนะนำจากอาจารย์ ผมว่า ผมต้องเก่ง php ให้ได้ อาจารย์คือแรงบันดาลใจครับ ขอบคุณมากครับ

เดี๋ยวผมจะลองดูนะครับ ขอบคุณมากนะครับ

#16

ได้แล้วครับอาจารย์ แต่เหมือนจะเจอปัญหา เดี๋ยวผมลองศึกษา ค้นหาข้อมูลในเว็บอาจารย์ก่อนครับ ถ้าไม่ได้จริงๆจะปรึกษาอาจารย์ครับ ขอบคุณครับอาจารย์

#17

อาจารย์ครับ ผมได้ลองเอาไปทำกับ apserv แล้วครับซึ่งต่อเป็น cliant อยู่กับ server จริง ปรากฏว่าใช้งานได้ครับ แต่ พอผมลองเปลี่ยน path ไปยัง server จริงที่ด้วยการ map drive ตาม path นี้ครับ I:\Academic\IUtils3\public\StudentRecords แล้วมัน error

Warning: file(I:/Academic/IUtils3/public/StudentRecords/U002476/U002476_intro3.db) [function.file]: failed to open stream: No such file or directory in D:\cyberworld\AppServ\www\testtxtfile\t2.php on line 5

Warning
: file(I:/Academic/IUtils3/public/StudentRecords/U002476/U002476_basics3.db) [function.file]: failed to open stream: No such file or directory in D:\cyberworld\AppServ\www\testtxtfile\t2.php on line 26

Warning
: file(I:/Academic/IUtils3/public/StudentRecords/U002476/U002476_middle3.db) [function.file]: failed to open stream: No such file or directory in D:\cyberworld\AppServ\www\testtxtfile\t2.php on line 43

Warning
: file(I:/Academic/IUtils3/public/StudentRecords/U002476/U002476_senior3.db) [function.file]: failed to open stream: No such file or directory in D:\cyberworld\AppServ\www\testtxtfile\t2.php on line 60
Time total = 0:0:0


 โค๊ดที่ผมไปต่อยอดจากอาจารย์ มีดังนี้ครับ


 <?php
$path = "I:/Academic/IUtils3/public/StudentRecords"; // <-- ถ้าใช้อันนี้ทำงานไม่ได้ครับเป็นเพราะอะไร server จริง
//$path = "D:/cyberworld/AppServ/www/testtxtfile"; <--- ถ้าใช้อันนี้ทำงานได้ appserv
$uid = $_POST['userid']; //รับค่า input
$fr = file("$path/$uid/$uid"."_intro3.db"); //อ่านไฟล์เป็นบรรทัด
for($i = 0 ; $i < count($fr); $i++){ // วนทีละบรรทัด
  $ds = explode('total=', $fr[$i]);  // แยกข้อมูลออกโดยใช้ total= เป็นตัวแยก
  if ($ds[1] != '') {
  /*$ds = $ds[1]/3600;
     echo "Intro =$ds<br>"; */
// แสดง $ds
$data1=$ds[1];
$remain=$data1;
   $hours=intval($remain/3600); //แปลงเป็นจำนวนชั่วโมง
   $remain=$remain%3600; //เอาเศษ
   $mins=intval($remain/60); //แปลงเป็นนาที
   $secs=$remain%60; //เศษที่เหลือเป็น วินาที
   $outputi=$hours.":".$mins.":".$secs;
   echo "Intro =$outputi<br>";

 

  }
}


$fr = file("$path/$uid/$uid"."_basics3.db"); //อ่านไฟล์เป็นบรรทัด
for($i = 0 ; $i < count($fr); $i++){ // วนทีละบรรทัด
  $ds = explode('total=', $fr[$i]);  // แยกข้อมูลออกโดยใช้ total= เป็นตัวแยก
  if ($ds[1] != '') {
 
 $data2=$ds[1];
 $remain=$data2;
   $hours=intval($remain/3600); //แปลงเป็นจำนวนชั่วโมง
   $remain=$remain%3600; //เอาเศษ
   $mins=intval($remain/60); //แปลงเป็นนาที
   $secs=$remain%60; //เศษที่เหลือเป็น วินาที
   $outputb=$hours.":".$mins.":".$secs;
   echo "Basic =$outputb<br>";
  }
}


$fr = file("$path/$uid/$uid"."_middle3.db"); //อ่านไฟล์เป็นบรรทัด
for($i = 0 ; $i < count($fr); $i++){ // วนทีละบรรทัด
  $ds = explode('total=', $fr[$i]);  // แยกข้อมูลออกโดยใช้ total= เป็นตัวแยก
  if ($ds[1] != '') {
 
  $data3=$ds[1];
  $remain=$data3;
   $hours=intval($remain/3600); //แปลงเป็นจำนวนชั่วโมง
   $remain=$remain%3600; //เอาเศษ
   $mins=intval($remain/60); //แปลงเป็นนาที
   $secs=$remain%60; //เศษที่เหลือเป็น วินาที
   $outputm=$hours.":".$mins.":".$secs;
   echo "Middle =$outputm<br>";
  }
}


$fr = file("$path/$uid/$uid"."_senior3.db"); //อ่านไฟล์เป็นบรรทัด
for($i = 0 ; $i < count($fr); $i++){ // วนทีละบรรทัด
  $ds = explode('total=', $fr[$i]);  // แยกข้อมูลออกโดยใช้ total= เป็นตัวแยก
  if ($ds[1] != '') {
 
  $data4=$ds[1];
  $remain=$data4;
   $hours=intval($remain/3600); //แปลงเป็นจำนวนชั่วโมง
   $remain=$remain%3600; //เอาเศษ
   $mins=intval($remain/60); //แปลงเป็นนาที
   $secs=$remain%60; //เศษที่เหลือเป็น วินาที
   $outputs=$hours.":".$mins.":".$secs;
   echo "Sinior =$outputs<br>";
  }
}
$sum=$data1+$data2+$data3+$data4;
   //echo $sum;
   $remain=$sum;
   $hours=intval($remain/3600); //แปลงเป็นจำนวนชั่วโมง
   $remain=$remain%3600; //เอาเศษ
   $mins=intval($remain/60); //แปลงเป็นนาที
   $secs=$remain%60; //เศษที่เหลือเป็น วินาที
   $outputt=$hours.":".$mins.":".$secs;
   echo "Time total = $outputt<br>";
?>



ถ้าใช้ path ใน Appserv จะได้ผลลัพธ์

Intro =13:16:11
Basic =13:42:46
Middle =8:7:12
Sinior =5:19:22
Time total = 40:25:31


โค๊ดอาจจะดูเยอะไปหน่อยครับ ผมไม่เป็นจริงๆครับ ยังไงรบกวนอาจารย์ ชี้แนะเกี่ยวกับ เรื่องการ ใช้ path กับ server ด้วยนะครับ คือ ผมอยากให้ เว็บที่ผมเขียนนี้ run แค่ apserv cliant เล้วเรียกเปิดจากเครื่อง cliant ท่านั้น เพราะว่า ไม่อยาก run บน server จริงๆ  กลัว ไฟล์ database หายครับ ขอบคุณล่วงหน้าครับอาจารย์

#18

ใช้ path ไม่ได้ ก็แสดงว่า path ไม่ถูกต้อง หรืออาจไม่มีอยู่จริง

ตัวอักษรพิมพ์เล็กใหญ่ ให้ตรงกัน
#19

ผมลองใส่ path ใน url แล้ว มันเปิดเจอครับ แต่ผมคงเขียนโค๊ดผิดหรือเปล่า ไม่แน่ใจ เดี๋ยวจะลองดูอีกทีครับ

#20
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 2M
^