Archief - Rare dingen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Mee

Legacy Member
We moeten hier voor't school een website bouwen met PHP, Perl, en nog zo van die dingen. Op een vorige pagina moesten we met Perl een formulier in een tekstbestand zetten, in onderstaand script moeten we die info er terug uithalen en de resultaten laten zien (hoeveel keer er "ja" is geantwoord op vraag 1, hoeveel keer "nee",...).

Nu, dat werkt allemaal heel schoon, tot ik er nog iets onder wou zetten: dat lukt gewoonweg niet.

Hier de code van het hele script, ik heb in het vet/rood aangeduid waar de fout ergens zit:

Code:
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print <<BLA;
	<html>
	<head>
	<title>Resultaten</title>
	<link href="style.css" rel="stylesheet" type="text/css" />
	</head>
	<body>
	<div class="hoofdmening">
	<div class="inhoud">
	<img src="img/zeester.jpg" alt="Pech, geen foto gevonden!"/>
	<div class ="menu" id ="a">
BLA
open(FILE, "menu.php");
while($lijn = <FILE> )
{
	print "$lijn";
}
close FILE;
print <<BLA;
	</div>
	<br/><br/>
	<fieldset>
		<legend>Antwoorden</legend>
		<table>
BLA

#vragen inlezen en bijhouden hoeveel vragen er zijn
$teller = 0;
open(FILE, "enquete.txt");
while($lijn = <FILE> )
{
	$vragen[$teller] = $lijn;	
	$teller++;
}
close FILE;

#resultaten er uit halen:
open(FILE, "tmp/enqres.txt");
while($lijn = <FILE>)
{
	@gesplit = split(/:/,$lijn);
	for($i = 0; $i < ($teller - 1); $i++)
	{
		${$results[$i]}{"$gesplit[0]"}++;
		shift(@gesplit);
	}
	shift(@gesplit);
	shift(@gesplit);
}
close FILE;

#vragen en resultaten afdrukken:

for($i = 0; $i < $teller; $i++)
{
	$totaal = (${$results[$i]}{'j'} + ${$results[$i]}{'n'} + ${$results[$i]}{'g'});
	$r = ((${$results[$i]}{'j'})/$totaal)*300;
	$g = ((${$results[$i]}{'n'})/$totaal)*300;
	$b = ((${$results[$i]}{'g'})/$totaal)*300;
	print <<BLI;
	<tr>
		<td>$vragen[$i]</td>
		<td><table class="resultstabel">
			<tr align="center">
				<td width=$r px bgcolor="red">${$results[$i]}{'j'}</td>
				<td width=$g px bgcolor="green">${$results[$i]}{'n'}</td>
				<td width=$b px bgcolor="DodgerBlue ">${$results[$i]}{'g'}</td>
			</tr>
			</table>
		</td>
	</tr>
	
BLI
[COLOR="Red"][B]print "bla1";
}
print "bla2";[/B][/COLOR]
print <<BLUB;

	bljh
	</table>
	</fieldset>
		bla
	</div>
	</div>
	</body>
	</html>
BLUB

Bla1 zit in de for lus en wordt elke keer afgeprint (6 keer want 6 vragen), Bla2 en alles wat daarna komt wordt straal genegeerd door de browsers.
Weet iemand waar het probleem zit, ik snap er niks van?

PS1: Hier kun je de resulterende pagina zien in zijn volle glorie.
PS2: Sorry als er mensen hartaanvallen krijgen van deze noob-code, u weze gewaarschuwd.
PS3: Opmaak trekt ook op niet veel

Twister

Legacy Member
perl -wc test.pl
test.pl syntax OK

Mijn perl is ook bijna onbestaande maar perl is blij met je syntax :)

Jouw link werkt wel niet (dyndns?)

Ik kan meer testen als je de bijhorende files linked / post.

Mee

Legacy Member
Ja, die site staat hier thuis op mijn pc en die staat niet heel de dag/nacht op... nu zou die moeten werken. Zo kun je ook de andere bestanden bekijken (?).

Heb ook al eens zo'n check gedaan en hij gaf idd syntax ok, ik heb ook eens het html-gedeelte in de W3C html validator gestoken (zonder de Perl variabelen) en dat was ook goed zo.

Twister

Legacy Member
  1. er staan lege lijnen in uw tmp/enqres.txt (niet zo erg maar bon)
  2. er zijn geen checks op 0 values, op de laatste was het totaal 0 --> delen door 0 vind perl niet leuk

Vervang uw for loop voor de resultaten met deze:
Code:
for($i = 0; $i < $teller; $i++)
{
        print <<BLI;
        <tr>
                <td>$vragen[$i]</td>
                <td><table class="resultstabel">
                        <tr align="center">
BLI

        $totaal = (${$results[$i]}{'j'} + ${$results[$i]}{'n'} + ${$results[$i]}{'g'});

        if($totaal) {
                $r = ((${$results[$i]}{'j'})/$totaal)*300;
                $g = ((${$results[$i]}{'n'})/$totaal)*300;
                $b = ((${$results[$i]}{'g'})/$totaal)*300;
                print <<BLI;
                                <td width=$r px bgcolor="red">${$results[$i]}{'j'}</td>
                                <td width=$g px bgcolor="green">${$results[$i]}{'n'}</td>
                                <td width=$b px bgcolor="DodgerBlue ">${$results[$i]}{'g'}</td>
BLI
        }
        else {  print "<td colspan=3>Geen resultaten</td>";}
        print <<BLI;
                        </tr>
                        </table>
                </td>
        </tr>

BLI
print "bla1";
}

Resultaten

Het verfijnen laat ik aan u over. ;)

Mee

Legacy Member
Zo'n stomme fout :doh:.


Heel erg bedankt!

edit: eigenlijk zat het probleem in de for-lus
Code:
for($i = 0; $i < ($teller - 1); $i++)
waar ik de gesplitte dingen in mijn array steek. Die -1 staat daar volledig overbodig en fout waardoor hij voor de laatste vraag niks in mijn array zette. Vermits $teller wel de juiste waarde heeft is die check op 0 dus eigenlijk niet nodig, juist die -1 moest weg...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan