DarkPrince2005 Posted October 8, 2007 Share Posted October 8, 2007 I've got this script to generate a graph using data in a database. But, how would I combine two fields like Race ad Gender to be displayed correctly. <?php include 'dbinc.php'; // Variables for DB connection include 'error.inc'; // Error handler // Function to display a bar chart from O'Reilly 'PHP Cookbook' function pc_bar_chart ($question, $answers) { // define colours to draw the bars $colours = array (array(104,153,255), array(0,153,0), array(255,255,0), array(255,0,51), array(51,51,204), array(255,102,0), array(153,0,204), array(255,0,255), array(102,255,255)); $total = array_sum($answers['qsos']); // define some spacing $padding = 5; $line_width = 80; $scale = $line_width * 7.5; $bar_height = 20; $x = $y = $padding; // Allocate a large palette for drawing $image = ImageCreate (550, 1000); $bg_colour = ImageColorAllocate($image, 224, 224, 224); $black = ImageColorAllocate($image, 0, 0, 0); // print the query $wrapped = explode ("\n", wordwrap($question, $line_width)); foreach ($wrapped as $line) { ImageString($image,3,$x,$y,$line,$black); $y += 40; } $y += $padding; // print the results for ($i = 0; $i < count ($answers['query']); $i++) { // format percentages $percent = sprintf ('%1.1f', 100 * $answers ['qsos'][$i]/$total); $bar = sprintf ('%d', $scale * $answers ['qsos'][$i]/$total); // grab colour $c = $i % count($colours); $text_colour = ImageColorAllocate($image, $colours[$c][0], $colours[$c][1], $colours[$c][2]); // draw bar and percentage numbers ImageFilledrectangle ($image, $x, $y, $x + $bar, $y + $bar_height, $text_colour); ImageString ($image, 5, $x + $bar + $padding, $y, "$percent%", $black); $y += 5; // print query $wrapped = explode ("\n", wordwrap ($answers['query'][$i], $line_width)); foreach ($wrapped as $line) { ImageString ($image, 3, $x, $y, $line, $black); $y += 8; } $y += 20; } // crop image by copying it $chart = ImageCreate (550, $y); ImageCopy ($chart, $image, 0, 0, 0, 0, 550, $y); //deliver image header ('Content-type: image/png'); ImagePng($chart); //clean up ImageDestroy ($image); ImageDestroy ($chart); } // Start of main program $qso_count = 0; $nps_count = 0; $dos_count = 0; $cs_count = 0; $wpu_count = 0; $sccu_count = 0; $afu_count = 0; // Connect to MySQL if (! ($connection = @ mysql_connect($hostName,$username,$password))) die ("Could not connect to the database"); // Connect to the log database. if (!mysql_select_db ($databaseName, $connection)) ; // Query the total number of QSOs made by 9M2/G4ZFE (logbooks 2,3,4,5 and 10) if (! ($result = mysql_query ("SELECT count(*) FROM dis where Status like 'Closed' and Date_Recieved between '$_POST[date1]' and '$_POST[date2]'", $connection))) ; $row = @ mysql_fetch_array ($result); $qso_count = $row['count(*)']; // Extract the number of QSOs made per mode if (! ($result = mysql_query (" SELECT count(*),Unit FROM dis where Status like 'Closed' and Date_Recieved between '$_POST[date1]' and '$_POST[date2]' GROUP BY Unit", $connection))) showerror(); // Fetch each row. It is returned in the following order - CW, DIG, SSB while ($row = @ mysql_fetch_array ($result)) { $count = $row['count(*)']; $mode = $row['Unit']; switch ($mode) { case "NPS": $nps_count = $count; break; case "DOS": $dos_count = $count; break; case "CS": $cs_count = $count; break; case "WPU": $wpu_count = $count; break; case "SCCU": $sccu_count = $count; break; case "AFU": $afu_count = $count; break; } } // Display text $question = 'Carried Over Unit Totals = ' . $qso_count; // Bar Chart for KZN QSOs $answers['query'][] = ' NPS ' .$nps_count; $answers['qsos'][] = $nps_count; // Bar Chart for GP QSOs $answers['query'][] = ' DOS ' .$dos_count; $answers['qsos'][] = $dos_count; // Bar Chart for GP QSOs $answers['query'][] = ' CS ' .$cs_count; $answers['qsos'][] = $cs_count; // Bar Chart for GP QSOs $answers['query'][] = ' WPU ' .$wpu_count; $answers['qsos'][] = $wpu_count; // Bar Chart for GP QSOs $answers['query'][] = ' SCCU ' .$sccu_count; $answers['qsos'][] = $sccu_count; // Bar Chart for GP QSOs $answers['query'][] = ' AFU ' .$afu_count; $answers['qsos'][] = $afu_count; // Display the Bar Chart pc_bar_chart ($question, $answers); // Close the database connection if (!mysql_close ($connection)) showerror(); ?> Link to comment https://forums.phpfreaks.com/topic/72280-solved-graph/ Share on other sites More sharing options...
MadTechie Posted October 8, 2007 Share Posted October 8, 2007 #1, please use code tags #2, define "to be displayed correctly" Link to comment https://forums.phpfreaks.com/topic/72280-solved-graph/#findComment-364501 Share on other sites More sharing options...
DarkPrince2005 Posted October 8, 2007 Author Share Posted October 8, 2007 <?php include 'dbinc.php'; // Variables for DB connection include 'error.inc'; // Error handler // Function to display a bar chart from O'Reilly 'PHP Cookbook' function pc_bar_chart ($question, $answers) { // define colours to draw the bars $colours = array (array(104,153,255), array(0,153,0), array(255,255,0), array(255,0,51), array(51,51,204), array(255,102,0), array(153,0,204), array(255,0,255), array(102,255,255)); $total = array_sum($answers['qsos']); // define some spacing $padding = 5; $line_width = 80; $scale = $line_width * 7.5; $bar_height = 20; $x = $y = $padding; // Allocate a large palette for drawing $image = ImageCreate (550, 1000); $bg_colour = ImageColorAllocate($image, 224, 224, 224); $black = ImageColorAllocate($image, 0, 0, 0); // print the query $wrapped = explode ("\n", wordwrap($question, $line_width)); foreach ($wrapped as $line) { ImageString($image,3,$x,$y,$line,$black); $y += 40; } $y += $padding; // print the results for ($i = 0; $i < count ($answers['query']); $i++) { // format percentages $percent = sprintf ('%1.1f', 100 * $answers ['qsos'][$i]/$total); $bar = sprintf ('%d', $scale * $answers ['qsos'][$i]/$total); // grab colour $c = $i % count($colours); $text_colour = ImageColorAllocate($image, $colours[$c][0], $colours[$c][1], $colours[$c][2]); // draw bar and percentage numbers ImageFilledrectangle ($image, $x, $y, $x + $bar, $y + $bar_height, $text_colour); ImageString ($image, 5, $x + $bar + $padding, $y, "$percent%", $black); $y += 5; // print query $wrapped = explode ("\n", wordwrap ($answers['query'][$i], $line_width)); foreach ($wrapped as $line) { ImageString ($image, 3, $x, $y, $line, $black); $y += 8; } $y += 20; } // crop image by copying it $chart = ImageCreate (550, $y); ImageCopy ($chart, $image, 0, 0, 0, 0, 550, $y); //deliver image header ('Content-type: image/png'); ImagePng($chart); //clean up ImageDestroy ($image); ImageDestroy ($chart); } // Start of main program $qso_count = 0; $nps_count = 0; $dos_count = 0; $cs_count = 0; $wpu_count = 0; $sccu_count = 0; $afu_count = 0; // Connect to MySQL if (! ($connection = @ mysql_connect($hostName,$username,$password))) die ("Could not connect to the database"); // Connect to the log database. if (!mysql_select_db ($databaseName, $connection)) ; // Query the total number of QSOs made by 9M2/G4ZFE (logbooks 2,3,4,5 and 10) if (! ($result = mysql_query ("SELECT count(*) FROM appeals where Status like 'Closed' and Date_Recieved between '$_POST[date1]' and '$_POST[date2]'", $connection))) ; $row = @ mysql_fetch_array ($result); $qso_count = $row['count(*)']; // Extract the number of QSOs made per mode if (! ($result = mysql_query (" SELECT count(*),Unit FROM appeals where Status like 'Closed' and Date_Recieved between '$_POST[date1]' and '$_POST[date2]' GROUP BY Unit", $connection))) showerror(); // Fetch each row. It is returned in the following order - CW, DIG, SSB while ($row = @ mysql_fetch_array ($result)) { $count = $row['count(*)']; $mode = $row['Unit']; switch ($mode) { case "NPS": $nps_count = $count; break; case "DOS": $dos_count = $count; break; case "CS": $cs_count = $count; break; case "WPU": $wpu_count = $count; break; case "SCCU": $sccu_count = $count; break; case "AFU": $afu_count = $count; break; } } // Display text $question = 'Carried Over Unit Totals = ' . $qso_count; // Bar Chart for KZN QSOs $answers['query'][] = ' NPS ' .$nps_count; $answers['qsos'][] = $nps_count; // Bar Chart for GP QSOs $answers['query'][] = ' DOS ' .$dos_count; $answers['qsos'][] = $dos_count; // Bar Chart for GP QSOs $answers['query'][] = ' CS ' .$cs_count; $answers['qsos'][] = $cs_count; // Bar Chart for GP QSOs $answers['query'][] = ' WPU ' .$wpu_count; $answers['qsos'][] = $wpu_count; // Bar Chart for GP QSOs $answers['query'][] = ' SCCU ' .$sccu_count; $answers['qsos'][] = $sccu_count; // Bar Chart for GP QSOs $answers['query'][] = ' AFU ' .$afu_count; $answers['qsos'][] = $afu_count; // Display the Bar Chart pc_bar_chart ($question, $answers); // Close the database connection if (!mysql_close ($connection)) showerror(); ?> Well the above code displays the business units. But i want the graph to display the count of to concatinated fields like Race and Gender. The basic mysql syntax would look something like: select * from appeals where Race like 'African' and Gender like 'Male'; Link to comment https://forums.phpfreaks.com/topic/72280-solved-graph/#findComment-364504 Share on other sites More sharing options...
MadTechie Posted October 8, 2007 Share Posted October 8, 2007 I can't seam to find, any referance to Race or Gender in the code.. can you post the part your having problems with Link to comment https://forums.phpfreaks.com/topic/72280-solved-graph/#findComment-364511 Share on other sites More sharing options...
another_Rookie Posted August 13, 2009 Share Posted August 13, 2009 I'm searching for the PHP-Script wich make an output like this http://www.g4zfe.com/9m2qsochart.php the small one i have but i want the chart ist sorted by band, like shown in the grafik ( Link ). Somebody have this script or may be Richard is member of this board ? I need it, but i can't do it by myself ... Thank you ... Link to comment https://forums.phpfreaks.com/topic/72280-solved-graph/#findComment-897060 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.