Avatar billede anazonda Nybegynder
16. januar 2003 - 09:54 Der er 17 kommentarer og
2 løsninger

Fejl i php stemme counter

Jeg har følgende script:

<?
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_stemme($fil_endelse) + 1;
  $filnavn = "stem" .$fil_endelse;
  $fil = fopen($filnavn, "W");
  fwrite($fil, $antal_stemmer);
  fclose($fil)
}
function tegn_soejle($andel, $samlet){
  $stemme_procent = $andel / $samlet * 100;
  $stemme_procent = round($stemme_procent);
  echo "$stemme_procent %";
  echo "<img src="\images\billede1.gif" height=7 width=$stemme_procent border=0>";
}
if((!$har_stemt) && ($stemme)){
  $har_stemt = 1;
  setcookie("har_stemt", "1", time() + 1209600);

  stem($stemme);
}
?>
<html>
<head><title>what ever</title></head>
<body>
<table border=0>
<?
$samlet_antal_stemmer = 0;
$text[1] = "meget godt";
$text[2] = "ok";
$text[3] = "lidt dårligt";
$text[4] = "stinker";
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[$filnr]</td>";
echo "<td><a href=\"$php_self?stemme=$fil_nr\">";
tegn_soejle($stemmer[$fil_nr], $samlet_antal_stemmer);
echo "</a></td></tr>";
}
}
?>
</table>
</body>
</html>

Scriptet er skrevet af efter ety hæfte men alligev vel får jeg følgende fejlmælging:

Parse error: parse error in /home/anazonda/public_html/stemme.php on line 4

det er et script til en afsteminig

kan i hjælpe

sidens adresse er: http://elevsu.bahh.dk/stemme.php
Avatar billede rzj Nybegynder
16. januar 2003 - 10:50 #1
prøv:
<?
function hent_stemme($fil_endelse){
  $filnavn = "stem".$fil_endelse;
  $fil = fopen($filnavn, "r");
  return fgets($fil, 1096);
  fclose($fil)
}
et lille, men vigtigt " manglede efter stem ;-)
/raz
Avatar billede jakoba Nybegynder
16. januar 2003 - 10:54 #2
der er smuttet et " tegn idet du kopiererde.
prøv at sammenligne:
linie 3:    $filnavn = "stem.$fil_endelse;
linie 8:    $filnavn = "stem" .$fil_endelse;

men faktisk tror jeg der mangler noget mere. Jeg ville skrive:
    $filnavn = "stem." .$fil_endelse;        // bemærk 2 gange '.'
i både linie 3 og linie 8

mvh JakobA
Avatar billede jakoba Nybegynder
16. januar 2003 - 11:06 #3
nu er fejlen flyttet til linie 7 :(
indsæt ; til at afslutte linien
    fclose($fil);    // alle php-statements afsluttes med ';'

ditto i funktionen nedenunder.
Avatar billede rzj Nybegynder
16. januar 2003 - 11:12 #4
åh, nej !! Dette er i virkeligheden sådan et ? der udvider sig i omfang konstant ;-)
Jeg har rettet alle grammatiske fejl i nedenstående. Dvs. at der kun bør være semantiske fejl tilbage. Dvs. scriptet er fejlfrit hvad angår ; og " osv. men det virker stadig ikke fordi stem1 ikke er en fil - prøv det selv og opret nyt ? når du er kommet videre...

<?
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_stemme($fil_endelse) + 1;
  $filnavn = "stem" .$fil_endelse;
  $fil = fopen($filnavn, "W");
  fwrite($fil, $antal_stemmer);
  fclose($fil);
}
function tegn_soejle($andel, $samlet){
  $stemme_procent = $andel / $samlet * 100;
  $stemme_procent = round($stemme_procent);
  echo "$stemme_procent %";
  echo "<img src=\"images\billede1.gif\" height=7 width=$stemme_procent border=0>";
}
if((!$har_stemt) && ($stemme)){
  $har_stemt = 1;
  setcookie("har_stemt", "1", time() + 1209600);

  stem($stemme);
}
?>
<html>
<head><title>what ever</title></head>
<body>
<table border=0>
<?
$samlet_antal_stemmer = 0;
$text[1] = "meget godt";
$text[2] = "ok";
$text[3] = "lidt dårligt";
$text[4] = "stinker";
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[$filnr]</td>";
echo "<td><a href=\"$php_self?stemme=$fil_nr\">";
tegn_soejle($stemmer[$fil_nr], $samlet_antal_stemmer);
echo "</a></td></tr>";
}
}
?>
</table>
</body>
</html>
Avatar billede anazonda Nybegynder
16. januar 2003 - 11:15 #5
jeg har stadig fejl... her er den rettede kilde:

<?
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_stemme($fil_endelse) + 1;
  $filnavn = "stem" .$fil_endelse;
  $fil = fopen($filnavn, "W");
  fwrite($fil, $antal_stemmer);
  fclose($fil);
}
function tegn_soejle($andel, $samlet){
  $stemme_procent = $andel / $samlet * 100;
  $stemme_procent = round($stemme_procent);
  echo "$stemme_procent" "%";
  echo "<img src="\images\billede1.gif" height=7 width=$stemme_procent border=0>";
}
if((!$har_stemt) && ($stemme)){
  $har_stemt = 1;
  setcookie("har_stemt", "1", time() + 1209600);

  stem($stemme);
}
?>
<html>
<head><title>what ever</title></head>
<body>
<table border=0>
<?
$samlet_antal_stemmer = 0;
$text[1] = "meget godt";
$text[2] = "ok";
$text[3] = "lidt dårligt";
$text[4] = "stinker";
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[$filnr]</td>";
echo "<td><a href=\"$php_self?stemme=$fil_nr\">";
tegn_soejle($stemmer[$fil_nr], $samlet_antal_stemmer);
echo "</a></td></tr>";
}
}
?>
</table>
</body>

fejl:

Parse error: parse error, expecting `','' or `';'' in /home/anazonda/public_html/stemme.php on line 19
Avatar billede rzj Nybegynder
16. januar 2003 - 11:17 #6
den her er også interessant:
if((!$har_stemt) && ($stemme)){
  $har_stemt = 1;
  setcookie("har_stemt", "1", time() + 1209600);
  stem($stemme);
}
hvad evaluerer if(($stemme)) ??
det skal være:
if((!$har_stemt) && isset($stemme)){
...
}
Jeg tror du enten skal læse indenad eller anskaffe et andet hæfte ;-)
/raz

Hvis du vil lære PHP er det fint med at prøve hæfter af, men start i det små. Bare et forslag, jeg ved jo ikke hvad/hvem du er...
/raz
Avatar billede anazonda Nybegynder
16. januar 2003 - 11:21 #7
Tro mig... det eneste hæfte der er mere for begyndere end det hæfte jeg har er php for dummies... men det er rigtigt for dummies... du ved som om at man aldrig har arbejdet med computere og websider før
Avatar billede jakoba Nybegynder
16. januar 2003 - 11:23 #8
enig med rzi. det hæfte er ikke mange 5-ører værd.
fx: blot for at vise stemmetallet skal der åbnes og lukkes ligesåmange filer som der er valgmuligheder. et monumentalt frås med servertid.
Avatar billede rzj Nybegynder
16. januar 2003 - 11:26 #9
anazonda>>ok
men jeg er ikke enig i at den bedste måde at lære PHP er at afskrive fra et hæfte og så debugge diverse fejlmeddelelser som du alligevel ikke forstår betydningen af - endnu ihvertfald.
Kontruktivitet: K.I.S.S. (og det ved du godt hvad står for, ik?) ;-)
Start så hellere med en fornuftig bog om emnet ! Læs en side eller tre og test hvad du kan huske, efter du har lagt den LANGT væk - det er ihvertfald den måde jeg har lært en del PHP på...

PS iøvrigt:
jvf. Svar: rzj
16/01-2003 11:12:36
Avatar billede josini Nybegynder
16. januar 2003 - 11:27 #10
Prøv med:

function tegn_soejle($andel, $samlet){
  $stemme_procent = $andel / $samlet * 100;
  $stemme_procent = round($stemme_procent);
  echo $stemme_procent."%";
  echo "<img src='\images\billede1.gif' height=7 width=$stemme_procent border=0>";
}
Avatar billede olebole Juniormester
16. januar 2003 - 11:29 #11
<ole>

Hmmm ... og det mener du, er for højt et niveau? Måske, men jeg tror ikke, du finder noget mere basalt  ;o)

Din linie 19:
  echo "$stemme_procent" "%";
Bør være:
  echo "$stemme_procent %";
Eller:
  echo $stemme_procent." %";

Det er valgfrit.
/mvh
</bole>
Avatar billede rzj Nybegynder
16. januar 2003 - 11:31 #12
anazonda>>jvf: http://www.eksperten.dk/spm/126540
for referencer til PHP litteratur - ikke mindst mine indlæg...

jakoba>>Jeg er/har været underviser på IT-højskolen i PHP, JS, HTML, mySQL, XML, XPath osv. og er BA i Voksenpædagogik så noget burde jeg da have ret i - BARE en gang i mellem ;-)
/raz
Avatar billede rzj Nybegynder
16. januar 2003 - 11:38 #13
hvorfor er der ingen der tager udgangspunkt i:
jvf. Svar: rzj
16/01-2003 11:12:36
??
er det helt håbløst eller hva?
Ja, scriptet kommer stadig med fejl, men det er opbygningen som er håbløs!
anazonda>>start 'all over' eller find et stemme-script på http://www.hotscripts.com el. lign.
Avatar billede jakoba Nybegynder
16. januar 2003 - 12:27 #14
her er en rimeligt ok afstemning af den type:

<?php

if( ! file_exists( "stemmer.txt" ) ) {  // hvis data-filen ikke findes
    $fil = fopen( "stemmer.txt", "r+" );  // opret filen
    fputs( $fil, "0,0,0,0" );            // lav 4 valgmuligheder
    fclose( $fil );                      // luk den nyoprettede fil
}

//status:  vi ved der findes en fil 'stemmer.php'

$fil = fopen( "stemmer.txt", "r+" );  // åben filen
$st = explode( ",", fgets( $fil, 1024 ) );  // læs filen ind i array $st

//status: array $st indeholder afstemningsresultatet.

if( isset($_POST['stem']) ) {  // hvis der er afgivet ny stemme
    $st[$_POST['stem']]++;        // opdater arrayet $st
    rewind( $fil );                // gør klar til at genskrive filen
    fputs( $fil, implode( ",", $st ) );  // skriv opdateret afstemningsresultat
}

fclose( $fil );  // luk filen
        // hurtigst muligt så vi tvinger andre der vil stemme til at vente.

$i=0;  // bruges idet vi skriver formularen nedenfor

?>
<html>
<head><title>Poll</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<form action="poll.php" method="post">
<p><input type="Radio" name="stem" value="<? echo $i ?>"> Meget flot <? echo $st[$i++] ?></p>
<p><input type="Radio" name="stem" value="<? echo $i ?>"> Ret almindelig <? echo $st[$i++] ?></p>
<p><input type="Radio" name="stem" value="<? echo $i ?>"> Den er grim <? echo $st[$i++] ?></p>
<p><input type="Radio" name="stem" value="<? echo $i ?>"> Ved ikke <? echo $st[$i++] ?></p>
<p><input type="submit" value="Stem" name="submit"></p>
</form>
</body>
</html>
Avatar billede jakoba Nybegynder
16. januar 2003 - 12:29 #15
Ups.  så vi tvinger  ->  så vi IKKE tvinger
Avatar billede anazonda Nybegynder
16. januar 2003 - 13:24 #16
jakoba: hvordan virker det der script... jeg kan ikke se nogle steder hvor man kan se resultaterne
Avatar billede jakoba Nybegynder
16. januar 2003 - 13:32 #17
resultatet for hver mulighed skulle gerne stå bagerst på hver linie.
det udskrives med: <? echo $st[$i++] ?>
Avatar billede rzj Nybegynder
16. januar 2003 - 15:30 #18
jakoba>> jeg har rettet i dit forslag så det også virker med ældre version af PHP, samt er mere generisk: $PHP_SELF er indsat i form action""....
Desuden skal du anvende w for at oprette en fil og ikke r+

Håber nogle kan bruge det:
<?php

if( ! file_exists( "stemmer.txt" ) ) {  // hvis data-filen ikke findes
    $fil = fopen( "stemmer.txt", "w" );  // opret filen
    fputs( $fil, "0,0,0,0," );            // lav 4 valgmuligheder
    fclose( $fil );                      // luk den nyoprettede fil
}

//status:  vi ved der findes en fil 'stemmer.php'

$fil = fopen( "stemmer.txt", "r+" );  // åben filen
$st = explode( ",", fgets( $fil, 1024 ) );  // læs filen ind i array $st

//status: array $st indeholder afstemningsresultatet.

if( isset($stem) ) {  // hvis der er afgivet ny stemme
    $st[$stem]++;        // opdater arrayet $st
    rewind( $fil );                // gør klar til at genskrive filen
    fputs( $fil, implode( ",", $st ) );  // skriv opdateret afstemningsresultat
}

fclose( $fil );  // luk filen
        // hurtigst muligt så vi ikke tvinger andre der vil stemme til at vente.

$i=0;  // bruges idet vi skriver formularen nedenfor

?>
<html>
<head><title>Poll</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<form action="<? echo $PHP_SELF; ?>" method="post">
<p><input type="Radio" name="stem" value="<? echo $i ?>"> Meget flot <? echo $st[$i++] ?></p>
<p><input type="Radio" name="stem" value="<? echo $i ?>"> Ret almindelig <? echo $st[$i++] ?></p>
<p><input type="Radio" name="stem" value="<? echo $i ?>"> Den er grim <? echo $st[$i++] ?></p>
<p><input type="Radio" name="stem" value="<? echo $i ?>"> Ved ikke <? echo $st[$i++] ?></p>
<p><input type="submit" value="Stem" name="submit"></p>
</form>
</body>
</html>
Avatar billede jakoba Nybegynder
16. januar 2003 - 15:38 #19
tak :-)
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