Avatar billede malawimoto Nybegynder
25. oktober 2004 - 10:14 Der er 27 kommentarer og
1 løsning

Hvad er galt med den script?

Jeg hentede en lille script som skulle kunne vise en afstemmnings søjle.

Jeg får den fejl meddelse når jeg kører den.

$tekst[$fil_nr] $stemme_procent%IMG SRC='./test/billed.gif' HEIGHT=7 WIDTH=$stemme_procent BORDER=0>
$tekst[$fil_nr] $stemme_procent%IMG SRC='./test/billed.gif' HEIGHT=7 WIDTH=$stemme_procent BORDER=0>
$tekst[$fil_nr] $stemme_procent%IMG SRC='./test/billed.gif' HEIGHT=7 WIDTH=$stemme_procent BORDER=0>
$tekst[$fil_nr] $stemme_procent%IMG SRC='./test/billed.gif' HEIGHT=7 WIDTH=$stemme_procent BORDER=0>


Her er selv scriptet


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>
<?
function hent_stemme($fil_endelse){
$filnavn='stem'.$fil_endelse;
$fil=fopen($filnavn, 'r');
return fgets($fil, 1096);
fclose($fil);
}
function stem($fil_endelse){
$antal_stemmer=hent_stemmer($fil_endelse)+1;
$filnavn='stem'.$fil_endelse;
$fil=fopen($filnavn, 'w');
fwrite($fil,$antal_stemmer);
}

function tegn_soejle($andel,$samlet){
$stemme_procent=$andel/$samlet*100;
$stemme_procent=round($stemme_procent);
echo'$stemme_procent%';
echo'IMG SRC=\'./test/billed.gif\' HEIGHT=7 WIDTH=$stemme_procent BORDER=0>';
}
IF((!$har_stemt)&&($stemme)){
$har_stemt=1;
setcookie('har_stemt','1',time() + 1209600);

stem($stemme);
}

?>




<table border=0>
<?
$samlet_antal_stemmer=10;
$tekst[1]='meget god';
$tekst[2]='god';
$tekst[3]='middel';
$tekst[4]='elendig';

for($fil_nr=1;$fil_nr <=4;$fil_nr++){
$stemmer[$fil_nr]=hent_stemme($fil_nr);
$samlet_antal_stemmer=$samlet_antal_stemmer +$stemmer[$fil_nr];
}
if($har_stemt){
for($fil_nr=1;$fil_nr<=4;$fil_nr++){
echo'<tr><td>$tekst[$fil_nr]</td>';
echo'<td>';
tegn_soejle($stemmer[$fil_nr],$samlet_antal_stemmer);
echo'</td></tr>';
}
}else{
for($fil_nr=1;$fil_nr<=4;$fil_nr++){
echo'<tr><td>$tekst[$fil_nr]</td>';
echo'<td><a href=\'$PHP_SELF?stemme=$fil_nr\'>';
tegn_soejle($stemmer[$fil_nr],$samlet_antal_stemmer);
echo'</a></td></tr>';
}
}
?>
</table>

</table>
</body>
</html>

Jeg kan ikke helt tyde hvor fejlen er hen, men tror den ligger omkring

function tegn_soejle($andel,$samlet){
$stemme_procent=$andel/$samlet*100;

Hvor er $andel oprettet og $samlet?

}else{

tegn_soejle($stemmer[$fil_nr],$samlet_antal_stemmer);
echo'</a></td></tr>';

For de deres variabler her fra

Hilsen

Moto
Avatar billede fennec Nybegynder
25. oktober 2004 - 10:21 #1
du mangler et < i dit img tag.

echo'<IMG SRC=\'./test/billed.gif\' HEIGHT=7 WIDTH=$stemme_procent BORDER=0>';
Avatar billede Slettet bruger
25. oktober 2004 - 10:34 #2
Når du sætter '' udenom en streng, vil PHP ikke lede efter variable inde i strengen, og det er derfor variablens navn og ikke indhold, der skrives ud.

Ret
echo'$stemme_procent%';
echo'IMG SRC=\'./test/billed.gif\' HEIGHT=7 WIDTH=$stemme_procent BORDER=0>';

Til

echo $stemme_procent . '%';
echo "<IMG SRC='./test/billed.gif' HEIGHT='7' WIDTH='$stemme_procent' BORDER='0'>';
Avatar billede morteeart Nybegynder
25. oktober 2004 - 12:03 #3
echo $stemme_procent . '%';
echo "<IMG SRC='./test/billed.gif' HEIGHT='7' WIDTH='".$stemme_procent."' BORDER='0'>";

er mere korrekt.
Avatar billede Slettet bruger
25. oktober 2004 - 12:13 #4
morteart: Det kommer vel an på definitionen af "korrekt". Begge er fuldt gyldige konstruktioner i PHP.

Til spørgsmålet: Hvor er $andel oprettet og $samlet?

Er svaret:

De er oprettet i selve funktionsdefinitionen. Dvs. function tegn_soejle($andel,$samlet). Når funktionen er defineret på denne måde, vil der internt i funktionen være de to variable. Deres indhold er det, funktionen blev kaldt med. Når funktionen kaldes således:

tegn_soejle($stemmer[$fil_nr],$samlet_antal_stemmer);

vil $andel dermed få værdien fra $stemmer[$fil_nr] og $samlet fra $samlet_antal_stemmer
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 13:59 #5
har prøvet begge forslag får nu
Parse error: parse error in /var/www/html/test/test.php on line 74
som er efter min html dokument

</html>
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 14:02 #6
rettelse
jeg får følgende

$tekst[$fil_nr] 0%
$tekst[$fil_nr] 0%
$tekst[$fil_nr] 0%
$tekst[$fil_nr] 0%

men når jeg klikker på 0%
kommer følgende fejl

http://server.something.fd/test/$PHP_SELF?stemme=$fil_nr

Siden blev ikke fundet
Avatar billede Slettet bruger
25. oktober 2004 - 14:09 #7
Ret echo'<tr><td>$tekst[$fil_nr]</td>'; til:

echo'<tr><td>' . $tekst[$fil_nr] . '</td>';

OG echo'<td><a href=\'$PHP_SELF?stemme=$fil_nr\'>'; Rettes til:

echo "<td><a href='" . $_SERVER['PHP_SELF'] . "?stemme=$fil_nr'>";

Det var i princippet samme fejl, som den, jeg rettede i første omgang. Altså '' om en streng, hvor der bruges variabler.
Avatar billede fennec Nybegynder
25. oktober 2004 - 14:15 #8
Jeg var heller ikke klar over forskellen mellem " og ' som tekst angivelse. Jeg har altid brugt ", så jeg har ikke oplevet problemet. Men så har jeg da også lært noget i dag.

Er det ikke bare at bruge " altid. Så er der vel ikke nogle problemer??
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 14:20 #9
nu ser det rigtigt ud men, følgende fejl dukker op, når man klikker på linket.

linie 32 er setcookie('har_stemt','1',time() +1209600

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/test/test.php:9) in /var/www/html/test/test.php on line 32

Fatal error: Call to undefined function: hent_stemmer() in /var/www/html/test/test.php on line 17

linie 17 = $antal_stemmer=hent_stemmer($fil_endelse)+1;

Moto
Avatar billede Slettet bruger
25. oktober 2004 - 14:21 #10
Der er to fordele ved at bruge ' om en streng:

1) PHP fortolker ikke indholdet. Man kan altså udskrive nogle ting uden at skulle escape dem, som ikke ville kunne udskrives uden escapes med " om. For eksempel hvis man VIL udskrive navnet på en variabel.

2) Det giver en lille performance-gevinst at indholdet ikke skal undersøges for variable.
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 14:23 #11
nej har erfaret i nogle scripts vil den nægte at kører når man blander php og HTML sammen, nu konveretere jeg " til ' så er jeg sikker på det virker:-)

hvorfor...det kan jeg ikke svar på
Avatar billede Slettet bruger
25. oktober 2004 - 14:24 #12
Funktionen hedder hent_stemme ikke hent_stemmer

Du kan ikke sætte en cookie efter du er begyndt at skrive noget ud. Flyt dette op før ALT output:

IF((!$har_stemt)&&($stemme)){
$har_stemt=1;
setcookie('har_stemt','1',time() + 1209600);

stem($stemme);
}
Avatar billede Slettet bruger
25. oktober 2004 - 14:27 #13
Hvis du skal bruge " inde i en streng, hvor der også er " uden om, skal du skrive \" i stedet inde i strengen.

$eksempel="Her er en \"tekst\" med anførselstegn";
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 14:29 #14
function hent_stemme($fil_endelse){
$filnavn='stem'.$fil_endelse;
$fil=fopen($filnavn, 'r');
return fgets($fil, 1096);
fclose($fil);
}
function stem($fil_endelse){
$antal_stemmer=hent_stemmer($fil_endelse)+1;
$filnavn='stem'.$fil_endelse;
$fil=fopen($filnavn, 'w');
fwrite($fil,$antal_stemmer);

den en fejl er at der er en r for meget i hent_stemmer
Avatar billede Slettet bruger
25. oktober 2004 - 14:34 #15
Ja. Det var jo også det, jeg sagde.
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 14:37 #16
Vil det sige i toppen af html før <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 14:37 #17
Sandbox..du fortjener 150 point:-)
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 14:50 #18
Satte den øverst med <? og ?> ser ud til at virke...dog får jeg ikke den billede med sort pixel der løber
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 15:04 #19
det meste er ok...dog virker

echo'$stemme_procent%';
echo'IMG SRC=\'./test/billed.gif\' HEIGHT=7 WIDTH=$stemme_procent BORDER=0>';

ikke
Avatar billede fennec Nybegynder
25. oktober 2004 - 15:13 #20
du har stadig glemt et <

echo'IMG SRC=\'./test/billed.gif\' HEIGHT=7 WIDTH=$stemme_procent BORDER=0>';

skal være:
echo'<IMG SRC=\'./test/billed.gif\' HEIGHT=7 WIDTH=$stemme_procent BORDER=0>';
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 15:22 #21
ja så det til sidst vil du hvad det ser ud til at fung...
Avatar billede Slettet bruger
25. oktober 2004 - 15:32 #22
Den sidste var jo netop den, vi allerførst bad dig rette til. Nu opdagede jeg dog lige, at jeg havde glemt at rette det afsluttende ' til et ", så her er den rigtige linie:

echo "<IMG SRC='./test/billed.gif' HEIGHT='7' WIDTH='$stemme_procent' BORDER='0'>";
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 19:46 #23
tak..sandbox...
Avatar billede Slettet bruger
25. oktober 2004 - 20:03 #24
Hvis det virker nu, så lægger jeg lige et svar.
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 20:57 #25
det er helt ok...men hvad gøre jeg lige, således at du får point
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 20:58 #26
trykker på accepter der sker intet
Avatar billede malawimoto Nybegynder
25. oktober 2004 - 20:59 #27
lukket
Avatar billede Slettet bruger
25. oktober 2004 - 21:28 #28
Jeg kan se du fandt ud af det. Du er så absolut ikke den første, der har haft problemer med at acceptere, og jeg synes da også, at det er ekstremt ulogisk, at man skal udvælge den ene ud af en svarer. Rimeligt nok, at man skal vælge, hvis der er mere end en, men ikke, når der kun er en.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester