 |
|
|
 |
 |
|
array คีย์มันเริ่มจาก 0 น่ะถูกแล้วครับ
นอกจากว่าคุณจะสร้าง key ให้ array ชุดนั้นใหม่
ว่าแต่ว่า ทำไมต้องเป็น 1 ครับ
|
 |
 |
 |
 |
Date :
2013-10-09 23:15:56 |
By :
mangkunzo |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ก็ คือ จากโค้ดนี้
while($objResult = mysql_fetch_array($objQuery))
{
$datay[] = $objResult["Sugar"];
$date[] = $objResult["Date"];
}
$num = array_sum($datay)/count($datay);
ผมต้องการ ไม่ให้มี บัคเวลา user กรอกค่าไปแค่ ค่าเดียว สมมุติ user กรอก แค่ 1 ค่า มันก็จะได้ count($datay) ซึ่งจะได้เท่ากับ 0
ซึ่งมันไม่มีอะไรมากมายหรอคับ เพียงแต่ เป็นบัค ถ้า user เช็ควันแค่ วันเดียว ถ้าเป็น 2 วันขึ้นไปมันก็แสดงผลได้ถูกต้อง
ขอบคุณครับ
|
 |
 |
 |
 |
Date :
2013-10-10 11:24:57 |
By :
pon1991 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มันไม่เกี่ยวกับ mysql_fetch_array() เลยนี่ครับ
แล้ว count() มันต้องให้ค่า 1 สิครับ ถ้าใน array มีสมาชิก 1 ตัว
$data = array();
$data[] = 'A'; // count($data) = 1
$data[] = 'B'; // count($data) = 2
บั๊กจากตรงอื่นหรือเปล่าครับ ลองเอาโค้ดส่วนอื่นมาดูครับ
|
 |
 |
 |
 |
Date :
2013-10-10 11:32:45 |
By :
phpinfo() |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
<?php
include("jpgraph/src/jpgraph.php");
include("jpgraph/src/jpgraph_line.php");
include("jpgraph/src/jpgraph_bar.php");
include("jpgraph/src/jpgraph_plotline.php");
include("class.database.php");
try{
$connect = new Database();
$strSQL = "SELECT * FROM recorddaily WHERE Date BETWEEN '".($_POST['start'])."'
and '".($_POST['end'])."' AND UserID = ".($_GET['UserID'])." ";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
// ����������ŷ����ʴ� �������ҧ��ҿ
$datay=array();
while($objResult = mysql_fetch_array($objQuery))
{
$datay[] = $objResult["Sugar"];
$date[] = $objResult["Date"];
}
$num = array_sum($datay)/count($datay);
if(count($datay)==1){
throw new JpGraphException('Please enter at least two days to see the chart above.');
}
// Setup the graph
$graph = new Graph(1000,500);
$graph->SetScale("textlin");
$theme_class=new UniversalTheme;
$graph->SetTheme($theme_class);
$graph->img->SetAntiAliasing(false);
$title = iconv("tis-620", "utf-8", "��ҿ �дѺ��ӵ������ʹ");
$graph->title->Set($title);
$graph->title->SetMargin(15);
$graph->title->SetFont(FF_ANGSA, FS_BOLD, 16);
$graph->SetBox(false);
$graph->img->SetAntiAliasing();
$graph->yaxis->HideZeroLabel();
$graph->yaxis->HideLine(false);
$graph->yaxis->HideTicks(false,false);
$graph->xgrid->Show();
$graph->xgrid->SetLineStyle("solid");
$graph->xaxis->SetLabelAngle(60);
$graph->xaxis->SetTickLabels($date);
$graph->xgrid->SetColor('#E3E3E3');
// Create the first line
$p1 = new LinePlot($datay);
$p2 = new PlotLine(HORIZONTAL,$num,'orange',5);
$p3 = new PlotLine(HORIZONTAL,80,'blue',15);
$p4 = new PlotLine(HORIZONTAL,120,'green',15);
$p5 = new PlotLine(HORIZONTAL,200,'yellow',15);
$p6 = new PlotLine(HORIZONTAL,300,'pink',15);
$p7 = new PlotLine(HORIZONTAL,350,'red',15);
$p2->SetLegend("Average");
$p3->SetLegend("Low<80");
$p4->SetLegend("Good 80-120");
$p5->SetLegend("RiskDanger 121-200");
$p6->SetLegend("Danger 200-300");
$p7->SetLegend("VeryDanger >300");
$graph->Add($p1);
$graph->Add($p2);
$graph->Add($p3);
$graph->Add($p4);
$graph->Add($p5);
$graph->Add($p6);
$graph->Add($p7);
//$p1->SetColor("#6495ED");
//$p1->SetLegend('Line 1');
$p1->value->Show();
$p1->mark->SetType(MARK_FILLEDCIRCLE);
//$p1->SetLegend("Product 1");
$graph->legend->SetFrameWeight(1);
// Output line
$graph->Stroke();
}
catch (JpGraphException $e)
{
//JpGraphError::Raise($e->getMessage());
//throw new JpGraphException('Please enter at least two days to see the chart above.');
$e->Stroke();
}
?>
นี้อ่ะคับ โค้ด กราฟ
คือผมต้องการหาค่าเฉลี่ยด้วยเลย ใช้ พวก sum count ไป
ขอบคุณครับ
|
 |
 |
 |
 |
Date :
2013-10-10 11:37:20 |
By :
pon1991 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
count() มันให้ค่าถูกต้องแล้ว
ส่วนที่ทำให้กรอกค่าเดียวไม่ได้ มันอยู่ตรงนี้ต่างหากครับ
Code (PHP)
// ถ้าจำนวนสมาชิกในตัวแปร $datay == 1
if(count($datay)==1){
// ให้โยน Exception ออกมา (error)
throw new JpGraphException('Please enter at least two days to see the chart above.');
}
|
 |
 |
 |
 |
Date :
2013-10-10 11:41:13 |
By :
phpinfo() |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
try catch ตอนแรกผมก็ไม่ได่ใส่นะคับ มันก็ แจ้งเตือนว่า
Warning: Division by zero in /home/u293505357/public_html/grapBloodsugar.php on line 24
มันจะเตือนใน jpgraph เลย
|
 |
 |
 |
 |
Date :
2013-10-10 11:49:49 |
By :
pon1991 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ที่เป็นอย่างนั้นเพราะ sql query ที่คุณสั่งไปมันให้ผลกลับคืนมาเป็น 0 แถวไงล่ะครับ
Code (PHP)
$strSQL = "SELECT * FROM recorddaily WHERE Date BETWEEN '".($_POST['start'])."'
and '".($_POST['end'])."' AND UserID = ".($_GET['UserID'])." ";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
// เช็คก่อนว่าหาข้อมูลเจอหรือไม่
if (!mysql_num_rows($objQuery)) {
// จบการทำงาน หรือแสดง error อะไรก็ว่าไป
exit;
}
$datay=array();
// เพราะถ้าไม่เจอข้อมูล ใน block ส่วน while จะไม่ทำงาน และจำนวนสมาชิก $datay จะเป็น 0
// เพราะไม่มีการเพิ่มสมาชิกให้กับ $datay
while($objResult = mysql_fetch_array($objQuery))
{
$datay[] = $objResult["Sugar"];
$date[] = $objResult["Date"];
}
// และตรงนี้ count จะให้ผลเป็น 0 เมื่อนำไปหารกับ array_sum($datay)
// มันจึงเป็นการหารด้วย 0 (Division by zero) ซึ่งเป็น error ในโปรแกรมคอมพิวเตอร์ทั่วไปครับ
$num = array_sum($datay)/count($datay);
if(count($datay)==1){
throw new JpGraphException('Please enter at least two days to see the chart above.');
}
|
ประวัติการแก้ไข 2013-10-10 11:57:54
 |
 |
 |
 |
Date :
2013-10-10 11:57:15 |
By :
phpinfo() |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
หรือแบบที่สอง เช็คหลังจาก loop while ก็ได้
Code (PHP)
$strSQL = "SELECT * FROM recorddaily WHERE Date BETWEEN '".($_POST['start'])."'
and '".($_POST['end'])."' AND UserID = ".($_GET['UserID'])." ";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
$datay=array();
// ถ้าไม่เจอข้อมูล ใน block ส่วน while จะไม่ทำงาน และจำนวนสมาชิก $datay จะเป็น 0
// เพราะไม่มีการเพิ่มสมาชิกให้กับ $datay
while($objResult = mysql_fetch_array($objQuery))
{
$datay[] = $objResult["Sugar"];
$date[] = $objResult["Date"];
}
// หาจำนวนสมาชิกของ $datay จะเป็น 0 ถ้า query ไม่เจอข้อมูล
$num_rows = count($datay);
if ($num_rows < 1) {
// จบการทำงานหรือแสดง error อะไรก็ว่าไป
exit;
}
// ทำตรงนี้เป็นต้นไปเฉพาะเวลาที่มีข้อมูลเท่านั้น
$num = array_sum($datay)/ $num_rows; // count($datay)
|
 |
 |
 |
 |
Date :
2013-10-10 12:02:14 |
By :
phpinfo() |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่สิครับ อย่าทำอย่างนั้น ผมให้ดูเป็นตัวอย่าง ผมแค่อธิบายการทำงาน และแนวคิดให้
|
 |
 |
 |
 |
Date :
2013-10-10 12:07:30 |
By :
phpinfo() |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ปล่อยให้น้อง เค้าลองแก้ตามไปก็ได้ จะได้เขอปัญหา ปัญญาจะได้เกิด (ไม่ได้โหดร้ายนะ)
ได้คำแนะนำ ก็ต้องลองไปปรับดู ตามความเหมาะสม และ ความต้องการของเรา............
|
 |
 |
 |
 |
Date :
2013-10-10 12:27:34 |
By :
apisitp |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ก็พอเข้าใจบ้างแล้วครับ และอีกอย่าง type date ผมเป็น datetime ด้วย ถ้าจะ คิวรี แค่ 1 วัน มันก็จะไม่ขึ้นข้อมูล
ซึ่งผมก็ลึมใช้ โลจิ เช็คก่อน ซึ่งมีพี่ๆ มาบอก ก็ ขอบคุณ พี่ๆ หลายๆท่าน มากเลยครับ
|
 |
 |
 |
 |
Date :
2013-10-10 12:39:19 |
By :
pon1991 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|