/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
søjlediagram
Fra : Tonny Jørgensen


Dato : 15-05-02 00:47

jeg har et lille problem...

syntaksen for 2 funktioner er ENS !! nemlig..

imagerectangle ( resource image, int x1, int y1, int x2, int y2, int
col)
imagefilledrectangle ( resource image, int x1, int y1, int x2, int y2, int
col)

men.....

[snip en masse kode]

while ($row=mysql_fetch_array($result)) {

$number=$number+1;
$sojle=$sojle+$size;
imagerectangle
($pic,($sojle+$size),($hojde-($row[tal]*20)),($sojle+4),($hojde-1),$col3);
ImagettfText ($pic, 10, 90, $sojle+$size, $hojde-($row[tal]*20), $col2,
$fontfile, $row[doto]);
ImagettfText ($pic, 8, 1, $sojle+6, $hojde-10, $col2, $fontfile,
$row[tal]);
}

[snip slut]

den tegne fint mine kasser, hvorimod

[snip en masse kode]

while ($row=mysql_fetch_array($result)) {

$number=$number+1;
$sojle=$sojle+$size;
imagefilledrectangle
($pic,($sojle+$size),($hojde-($row[tal]*20)),($sojle+4),($hojde-1),$col3);
ImagettfText ($pic, 10, 90, $sojle+$size, $hojde-($row[tal]*20), $col2,
$fontfile, $row[doto]);
ImagettfText ($pic, 8, 1, $sojle+6, $hojde-10, $col2, $fontfile,
$row[tal]);
}

[snip slut]

ikke tegner kasserne. Bemærk det eneste jeg har gjort er at erstatte
imagerectangle med imagefilledrectangle ..

nogen gode bud ? jeg ser helst mine søjler er massive, det ser pænest ud.

- Tonny



 
 
Peter Brodersen (15-05-2002)
Kommentar
Fra : Peter Brodersen


Dato : 15-05-02 01:22

On Wed, 15 May 2002 01:47:03 +0200, "Tonny Jørgensen"
<hest@jegergud.dk> wrote:

>nogen gode bud ? jeg ser helst mine søjler er massive, det ser pænest ud.

Med imagefilledrectangle _skal_ du gå fra "øverste venstre" til
"nederste højre" som de to koordinatsæt, jf. en kommentar på php.net:

==
While imagerectangle will allow you to use a different order of your
coordinates (such as bottom-left to upper-right), imagefilledrectangle
will only work correctly if you use top-left to bottom-right as
indicated in the docs.
==

Mon ikke, din x1 er større end x2 - eller din y1 er større end din y2?

--
- Peter Brodersen

Tonny Jørgensen (15-05-2002)
Kommentar
Fra : Tonny Jørgensen


Dato : 15-05-02 01:31

"Peter Brodersen" <professionel@nerd.dk> wrote in message
news:SRhE8.3820$4f4.238407@news000.worldonline.dk...
> On Wed, 15 May 2002 01:47:03 +0200, "Tonny Jørgensen"
> <hest@jegergud.dk> wrote:
>
> >nogen gode bud ? jeg ser helst mine søjler er massive, det ser pænest ud.
>
> Med imagefilledrectangle _skal_ du gå fra "øverste venstre" til
> "nederste højre" som de to koordinatsæt, jf. en kommentar på php.net:
>
> ==
> While imagerectangle will allow you to use a different order of your
> coordinates (such as bottom-left to upper-right), imagefilledrectangle
> will only work correctly if you use top-left to bottom-right as
> indicated in the docs.
> ==
>
> Mon ikke, din x1 er større end x2 - eller din y1 er større end din y2?

det er ikke utænkeligt, prøver lgie at bytte rundt på ....

[rum stund med lidt roden frem og tilbage]

hmm..

while ($row=mysql_fetch_array($result)) {

$number=$number+1;
$sojle=$sojle+$size;
imagefilledrectangle
($pic,($sojle+4),($hojde-1),($sojle+$size),($hojde-($row[tal]*20)),$col3);
ImagettfText ($pic, 10, 90, $sojle+$size, $hojde-($row[tal]*20), $col2,
$fontfile, $row[doto]);
ImagettfText ($pic, 8, 1, $sojle+6, $hojde-10, $col2, $fontfile,
$row[tal]);
}

giver samme kedelige resultat....

- Tonny



Peter Brodersen (15-05-2002)
Kommentar
Fra : Peter Brodersen


Dato : 15-05-02 01:49

On Wed, 15 May 2002 02:31:12 +0200, "Tonny Jørgensen"
<hest@jegergud.dk> wrote:

> imagefilledrectangle
>($pic,($sojle+4),($hojde-1),($sojle+$size),($hojde-($row[tal]*20)),$col3);

Blot et simpelt spørgsmål: Er du sikker på at $size er lig med noget?
Hvis den ikke er noget, vil ($sojle+4) være større end ($sojle+$size).

Under alle omstændigheder vil det kunne være lettere at finde ud af
ved at omskrive ting lidt på forhånd, fx:

$x1 = ($sojle+4);
$y1 = ($hojde-1);
$x2 = ($sojle+$size);
$y2 = ($hojde-($row['tal']*20);
print "Nu vil jeg lave en linje fra ($x1 , $y1) til ($x2 , $y2)<br>";
#imagefilledrectangle($pic,$x1,$y1,$x2,$y2,$col3);

Tjek at dette tekst-output ser fornuftigt ud.

--
- Peter Brodersen

Tonny Jørgensen (15-05-2002)
Kommentar
Fra : Tonny Jørgensen


Dato : 15-05-02 03:26


> $x1 = ($sojle+4);
> $y1 = ($hojde-1);
> $x2 = ($sojle+$size);
> $y2 = ($hojde-($row['tal']*20);
> print "Nu vil jeg lave en linje fra ($x1 , $y1) til ($x2 , $y2)<br>";
> #imagefilledrectangle($pic,$x1,$y1,$x2,$y2,$col3);
>
endte op med

while ($row=mysql_fetch_array($result)) {

$number=$number+1;
$sojle=$sojle+$size;
$x1 = ($sojle+4);
$y2 = ($hojde-($row['tal']*20));
$x2 = ($sojle+$size);
$y1 = ($hojde-1);
print "Nu vil jeg lave en linje fra ($x1 , $y1) til ($x2 , $y2)<br>";
#imagefilledrectangle($pic,$x1,$y1,$x2,$y2,$col3);
ImagettfText ($pic, 10, 90, $sojle+$size, $hojde-($row[tal]*20), $col2,
$fontfile, $row[doto]);
ImagettfText ($pic, 8, 1, $sojle+6, $hojde-10, $col2, $fontfile,
$row[tal]);
}


som giver output...

Nu vil jeg lave en linje fra (24 , 499) til (40 , 420)
Nu vil jeg lave en linje fra (44 , 499) til (60 , 420)
Nu vil jeg lave en linje fra (64 , 499) til (80 , 420)
Nu vil jeg lave en linje fra (84 , 499) til (100 , 240)
Nu vil jeg lave en linje fra (104 , 499) til (120 , 420)
Nu vil jeg lave en linje fra (124 , 499) til (140 , 360)
Nu vil jeg lave en linje fra (144 , 499) til (160 , 460)
Nu vil jeg lave en linje fra (164 , 499) til (180 , 300)
Nu vil jeg lave en linje fra (184 , 499) til (200 , 480)
Nu vil jeg lave en linje fra (204 , 499) til (220 , 480)
Nu vil jeg lave en linje fra (224 , 499) til (240 , 240)
Nu vil jeg lave en linje fra (244 , 499) til (260 , 400)
Nu vil jeg lave en linje fra (264 , 499) til (280 , 440)
Nu vil jeg lave en linje fra (284 , 499) til (300 , 480)
Nu vil jeg lave en linje fra (304 , 499) til (320 , 240)
Nu vil jeg lave en linje fra (324 , 499) til (340 , 480)

osv osv

ergo x er stignede og y er faldende, hvilket BURDE give fra øverste venstre
hjørne til neder højre hjørne.....

dog er der stadig ingen søjler...

det er mildest talt frustrende.....

- Tonny




Peter Brodersen (15-05-2002)
Kommentar
Fra : Peter Brodersen


Dato : 15-05-02 03:32

On Wed, 15 May 2002 04:26:14 +0200, "Tonny Jørgensen"
<hest@jegergud.dk> wrote:

>Nu vil jeg lave en linje fra (324 , 499) til (340 , 480)
>
>osv osv
>
>ergo x er stignede og y er faldende, hvilket BURDE give fra øverste venstre
>hjørne til neder højre hjørne.....

y2 skal nu altså også være en højere værdi end y1.

==
imagefilledrectangle() creates a filled rectangle of color col in
image image starting at upper left coordinates x1, y1 and ending at
bottom right coordinates x2, y2. 0, 0 is the top left corner of the
image.
==

y1 er altså øverst, tættest på 0. y2 skal så være nederst, længst væk
fra 0.

--
- Peter Brodersen

Hest (15-05-2002)
Kommentar
Fra : Hest


Dato : 15-05-02 16:11


> y1 er altså øverst, tættest på 0. y2 skal så være nederst, længst væk
> fra 0.
tak nu virker det.

spørgsmål nr 2.

jeg vil lave en autoskalering af størrelsen og har derfor lavet følgende
stykke kode.

$result = mysql_query("select count(*) as tal, doto from warp where kat LIKE
'$valg' group by doto order by doto") or die("Fejl: ".mysql_error());
$count = mysql_num_rows($result);
$row = mysql_fetch_array($result);


/* variabel definition og grafikoutput */


$filnavn = rand(1,10000);
$sojle=0;
$number=1;
$size = 20;
$inc = $size;
$hojde = max($row[tal])*$inc;
$fontfile = "/usr/home/hest/ttf/verdana.ttf";

problemet er bare at $hojde = max($row[tal])*$inc; er 0

jeg kan med andre ord åbenbart ikke lave en max($row[tal]); for at få den
største værdi for arrayet "tal".

jeg prøvede derfor at ændre mit query til

mysql_query("select count(*) as tal, doto, max(tal) as maxtal from warp
where kat LIKE '$valg' group by doto order by doto") or die("Fejl:
".mysql_error());

men den giver invalid field specification på max(tal), jeg kan med andre ord
åbenbart ikke køre en max() i sql på et alias...

nogen gode ideer ?

- Tonny




Tonny Jørgensen (15-05-2002)
Kommentar
Fra : Tonny Jørgensen


Dato : 15-05-02 03:33


"Tonny Jørgensen" <hest@jegergud.dk> wrote in message
news:absh0n$8mf$1@news.cybercity.dk...
>
> > $x1 = ($sojle+4);
> > $y1 = ($hojde-1);
> > $x2 = ($sojle+$size);
> > $y2 = ($hojde-($row['tal']*20);
> > print "Nu vil jeg lave en linje fra ($x1 , $y1) til ($x2 , $y2)<br>";
> > #imagefilledrectangle($pic,$x1,$y1,$x2,$y2,$col3);
> >
> endte op med
>
> while ($row=mysql_fetch_array($result)) {
>
> $number=$number+1;
> $sojle=$sojle+$size;
> $x1 = ($sojle+4);
> $y2 = ($hojde-($row['tal']*20));
> $x2 = ($sojle+$size);
> $y1 = ($hojde-1);
> print "Nu vil jeg lave en linje fra ($x1 , $y1) til ($x2 , $y2)<br>";
> #imagefilledrectangle($pic,$x1,$y1,$x2,$y2,$col3);
> ImagettfText ($pic, 10, 90, $sojle+$size, $hojde-($row[tal]*20), $col2,
> $fontfile, $row[doto]);
> ImagettfText ($pic, 8, 1, $sojle+6, $hojde-10, $col2, $fontfile,
> $row[tal]);
> }
>
>
> som giver output...
>
> Nu vil jeg lave en linje fra (24 , 499) til (40 , 420)
> Nu vil jeg lave en linje fra (44 , 499) til (60 , 420)
> Nu vil jeg lave en linje fra (64 , 499) til (80 , 420)
> Nu vil jeg lave en linje fra (84 , 499) til (100 , 240)
> Nu vil jeg lave en linje fra (104 , 499) til (120 , 420)
> Nu vil jeg lave en linje fra (124 , 499) til (140 , 360)
> Nu vil jeg lave en linje fra (144 , 499) til (160 , 460)
> Nu vil jeg lave en linje fra (164 , 499) til (180 , 300)
> Nu vil jeg lave en linje fra (184 , 499) til (200 , 480)
> Nu vil jeg lave en linje fra (204 , 499) til (220 , 480)
> Nu vil jeg lave en linje fra (224 , 499) til (240 , 240)
> Nu vil jeg lave en linje fra (244 , 499) til (260 , 400)
> Nu vil jeg lave en linje fra (264 , 499) til (280 , 440)
> Nu vil jeg lave en linje fra (284 , 499) til (300 , 480)
> Nu vil jeg lave en linje fra (304 , 499) til (320 , 240)
> Nu vil jeg lave en linje fra (324 , 499) til (340 , 480)
>
> osv osv
>
> ergo x er stignede og y er faldende, hvilket BURDE give fra øverste
venstre
> hjørne til neder højre hjørne.....
>
> dog er der stadig ingen søjler...
>
> det er mildest talt frustrende.....
>
> - Tonny
for overskuelighedens skyld poster jeg lige koden her (ved godt det sikkert
ikke er cotume at gøre det)...

<?php
// test paa at faa ordentlig caching

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// always modified
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
?>
<?php


/* sql connect */


$res=mysql_connect ('localhost', 'root', '') or die("Fejl: ".mysql_error());
mysql_select_db ('warp',$res) or die("Fejl: ".mysql_error());


/* sql træk */


$result = mysql_query("select count(*) as tal, doto from warp where kat LIKE
'$valg' group by doto order by doto") or die("Fejl: ".mysql_error());
$count = mysql_num_rows($result);
$row = mysql_fetch_array($result);


/* variabel definition og grafikoutput */


$filnavn = rand(1,10000);
$sojle=0;
$number=1;
$size = 20;
$inc = $size;
$hojde = 500;
$fontfile = "/usr/home/hest/ttf/verdana.ttf";


/* image størrelse og farve */


$pic=ImageCreate($size*$count+20,$hojde);
$col1=ImageColorAllocate($pic,255,255,255);
$col2=ImageColorAllocate($pic,0,0,255);
$col3=ImageColorAllocate($pic,255,0,0);
$col4=ImageColorAllocate($pic,0,255,0);


/* løkke der tegner sojlerne, og skriver dato ovenover hver enkelt søjle,
samt værdi for hver enkel søjle i bunden af søjlen */


while ($row=mysql_fetch_array($result)) {

$number=$number+1;
$sojle=$sojle+$size;
$x1 = ($sojle+4);
$y2 = ($hojde-($row['tal']*20));
$x2 = ($sojle+$size);
$y1 = ($hojde-1);
print "Nu vil jeg lave en linje fra ($x1 , $y1) til ($x2 , $y2)<br>";
#imagefilledrectangle($pic,$x1,$y1,$x2,$y2,$col3);
ImagettfText ($pic, 10, 90, $sojle+$size, $hojde-($row[tal]*20), $col2,
$fontfile, $row[doto]);
ImagettfText ($pic, 8, 1, $sojle+6, $hojde-10, $col2, $fontfile,
$row[tal]);
}


/* lav grid til aflæsning af graf */


while ($size < $hojde) {
$size=$size+$inc;
ImageLine($pic,0,$size,$size*$count,$size,$col3);
}


/* skriv billede til fil og vis denne i browser */


print "<font face=verdana size=-1>" . $valg . " uploads for all ftp
uptime</font><br>";
ImagePNG($pic,"./$filnavn.png");
print "<img src=\"./$filnavn.png\" border=0>";
flush();


/* slet billedet fra rammen, og derefter fra disken */


ImageDestroy($pic);


/* vis form i bunden til ny graf */


?>

<form action=index.php>
<select name=valg>
<option value="svcd">svcd
<option value="divx">divx
<option value="apz-iso">apz-iso
<option value="gamez-iso">gamez-iso
<option value="ps2">ps2
</select>
<input type=submit value="show me">

</form>
</body>
</html>


håber det kan give et clue... som du kan se burde size være sat til en værdi
før den ryger ind i løkken.....

evt kan jeg poste et billede i binaer så du kan se billedet...

- Tonny



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste