问题描述
因此,我遇到的问题是我无法将在Results.html页面上计算出的信息传递给脚本,我必须生成一个饼图,然后拍摄图像并将其显示在结果"页面中.我是PHP的新手(大约2周),并且只有最基本的了解,因此我需要非常明确的说明.无论哪种方式,这就是我正在使用的代码:
So the problem I am having is that I have not been able to pass information calculated on a page Results.html to a script I have to generate a pie chart and then take the image and display it in my Results page. I am very new to PHP (about 2 weeks) and have only the most basic understanding so I need very explicit instructions. Either way, this is the code I'm working with:
<?php
$filename = "Results.txt";
$lines = file($filename);
$q1 = $_POST['q1']; // stores checked button value
$q2 = $_POST['q2'];
$q3 = $_POST['q3'];
$q4 = $_POST['q4'];
$q5 = $_POST['q5'];
$q6 = $_POST['q6'];
$q7 = $_POST['q7'];
$q8 = $_POST['q8'];
$qN = 1; //question number
$newLines = '';
$total = array();
foreach($lines as $line) {
$line = trim($line); //remove excess newlines etc.
$lineArr = explode(',',$line); //split line into array by commas
$index = ${'q'.$qN}-1; //zero based
if (isset($lineArr[$index])){
$lineArr[$index]++; //add to position by one vote.
$total = array_sum($lineArr); //number of clicks
$newLines .= implode(',',$lineArr) . "\r\n"; //newLines contains numbers then also
$qN++;
}
}
//write contents back to file.
file_put_contents($filename, $newLines);
//frequencies for each line without strings
$l[1] = explode(',',$lines[0]);
$l[2] = explode(',',$lines[1]);
$l[3] = explode(',',$lines[2]);
$l[4] = explode(',',$lines[3]);
$l[5] = explode(',',$lines[4]);
$l[6] = explode(',',$lines[5]);
$l[7] = explode(',',$lines[6]);
$l[8] = explode(',',$lines[7]);
//multiply each
$result = array();
$values = array(1,2,3,4,5);
for($i=0;$i<count($l);$i++){
for($j=0;$j<count($values);$j++){
$result[$i+1][$j] = $l[$i+1][$j] * $values[$j];
}
}
//calculate percentages
$p1 = (explode(',',$lines[0]));
$p2 = (explode(',',$lines[1]));
$p3 = (explode(',',$lines[2]));
$p4 = (explode(',',$lines[3]));
$p5 = (explode(',',$lines[4]));
$p6 = (explode(',',$lines[5]));
$p7 = (explode(',',$lines[6]));
$p8 = (explode(',',$lines[7]));
// calculate averages *****For some reason most recent frequency item updated is off by one, possibly bc not up to date yet???? figure out later!!!
$f1avg = round((array_sum($result[1])/($total-1)),2);
$f2avg = round((array_sum($result[2])/($total-1)),2);
$f3avg = round((array_sum($result[3])/($total-1)),2);
$f4avg = round((array_sum($result[4])/($total-1)),2);
$f5avg = round((array_sum($result[5])/($total-1)),2);
$f6avg = round((array_sum($result[6])/($total-1)),2);
$f7avg = round((array_sum($result[7])/($total-1)),2);
$f8avg = round((array_sum($result[8])/($total-1)),2);
//pie chart 1 information
$_SESSION['$p1f0s']= round((($p1[0]/$total)*360),2);
$_SESSION['$p1f1s']= round((($p1[1]/$total)*360),2);
$_SESSION['$p1f2s']= round((($p1[2]/$total)*360),2);
$_SESSION['$p1f3s']= round((($p1[3]/$total)*360),2);
$_SESSION['$p1f4s']= round((($p1[4]/$total)*360),2);
$p1f0 = $_SESSION['$p1f0s'];
$p1f1 = $_SESSION['$p1f1s'];
$p1f2 = $_SESSION['$p1f2s'];
$p1f3 = $_SESSION['$p1f3s'];
$p1f4 = $_SESSION['$p1f4s'];
echo $p1f2;
?>
所以我尝试将会话中的信息传递给此:
So I tried passing the info from sessions into this:
$p1f0 = $_SESSION['$p1f0s'];
$p1f1 = $_SESSION['$p1f1s'];
$p1f2 = $_SESSION['$p1f2s'];
$p1f3 = $_SESSION['$p1f3s'];
$p1f4 = $_SESSION['$p1f4s'];
header("Content-type: image/png");
//create pie charts
$image=imagecreatetruecolor(101,51);
//_____________________colors____________________________
$my_colorA=imagecolorallocate($image,51,51,255);
$my_colorB=imagecolorallocate($image,100,150,215);
$my_colorC=imagecolorallocate($image,20,20,151);
$my_colorX=imagecolorallocate($image,216,216,255);
$red = imagecolorallocate($image, 255, 0, 0);
$orange = imagecolorallocate($image, 191, 64, 0);
$dark_yellow = imagecolorallocate($image, 128, 128, 0);
$dark_green = imagecolorallocate($image, 64, 191, 0);
$green = imagecolorallocate($image, 0, 255, 0);
//_______________________________________________________
$ptsize=24;$x=20;$y=50;$angle=-10;
imagefill($image,0,0,$my_colorX);
//__________________ , center, w , h , st, end, clr , type______
imagefilledarc($image,50,25, 100, 50, 0, $p1f0, $red, IMG_ARC_PIE);
imagefilledarc($image,50,25, 100, 50, $p1f0, $p1f01, $orange, IMG_ARC_PIE);
imagefilledarc($image,50,25, 100, 50, $p1f1, $p1f2, $dark_yellow , IMG_ARC_PIE);
imagefilledarc($image,50,25, 100, 50, $p1f2, $p1f3, $dark_green, IMG_ARC_PIE);
imagefilledarc($image,50,25, 100, 50, $p1f3, $p1f4, $green, IMG_ARC_PIE);
//___________________________________________________________________
imagepng($image);
imagedestroy($image)
但是没有成功.在搜索此内容时,我一直遇到$ base64_data的问题,我有点理解应该做什么,但不知道这是否偏离基准.请帮忙!并预先感谢!
But was unsuccessful. I keep running into $base64_data when searching this and I kind of understand what that is supposed to do but don't know if that's way off base. Please help! And thanks in advance!
推荐答案
虽然您可以像这样直接在HTML文件中导出"图像:
While you can "export" an image directly in an HTML file like so:
// generate image here
ob_start(function($c) {return "<img src=\"data:image/png;base64,".base64_encode($c)."\" />";});
imagepng($image);
ob_end_flush();
有点痛苦.拥有<img src="myimage.php" />
并在那里生成它要容易得多.您甚至可以传递GET
变量.
It's kind of a pain. It's a lot easier to juat have <img src="myimage.php" />
and generate it there. You can even pass GET
variables.
这篇关于如何在html页面中显示使用php由gd生成的png图像(饼图)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!