Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 20:13 Der er 54 kommentarer og
2 løsninger

Får "not defined" error i srcipt

Jeg har et PHP script der laver følgende javascript i en html side

var pcount = new Array();
pcount["tutorials"]=17;
pcount["centerpage1"]=7;
pcount["test"]=116;
pcount["test1"]=17;
pcount["test2"]=7;
pcount["test3"]=10;
pcount["test4"]=10;

function pagecountdisplay(id)
{
document.write(pcount[id]);
}


I htmlen kadler jeg scriptet med denne:

Resultat = <script type="text/javascript">var all = pcount["test"]+pcount["test2"]; document.write(all);</script>


Men jeg får heletiden "pcount is not defined" fejl ..

Nogen der kan hjælpe mg her ???
Avatar billede nielle Nybegynder
18. juni 2006 - 20:28 #1
Det virker da for mig:

<script type="text/javascript">
var pcount = new Array();
pcount["tutorials"]=17;
pcount["centerpage1"]=7;
pcount["test"]=116;
pcount["test1"]=17;
pcount["test2"]=7;
pcount["test3"]=10;
pcount["test4"]=10;

function pagecountdisplay(id)
{
    document.write(pcount[id]);
}
</script>

Resultat = <script type="text/javascript">var all = pcount["test"]+pcount["test2"]; document.write(all);</script>
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 20:42 #2
Meget underligt ... virker ikke i nogen af mine browsere

http://www.jart.dk/jgom/test2.html
Avatar billede nielle Nybegynder
18. juni 2006 - 20:56 #3
Jeg kan ikke rigtigt se at du definere pcount[] før at du forsøger at bruge det?
Avatar billede mclemens Nybegynder
18. juni 2006 - 20:56 #4
showcounter2.htm
-> Skal have denne kilde:

var pcount = new Array();
pcount["tutorials"]=17;
pcount["centerpage1"]=7;
pcount["test"]=116;
pcount["test1"]=17;
pcount["test2"]=7;
pcount["test3"]=10;
pcount["test4"]=10;


( men hvorfor ikke kalde den for .js ? )



p.t. har den denne:

document.write('-- FILES IN FOLDER --

'); document.write('pcount[','tutorials','] = ','17','
'); document.write('pcount[','centerpage1','] = ','7','
'); document.write('pcount[','test','] = ','116','
'); document.write('pcount[','test1','] = ','17','
'); document.write('pcount[','test2','] = ','7','
'); document.write('pcount[','test3','] = ','10','
'); document.write('pcount[','test4','] = ','10','
'); document.write('

-- TOTAL = ', 7,' FILES FOUND --');





og så skal det p.t. sidste js script være før det første...
<script type="text/javascript" src="123456_files/showcounter2.htm"></script><script type="text/javascript">var all=pcount["test"]+pcount["test2"]; document.write(all);</script>
Avatar billede mclemens Nybegynder
18. juni 2006 - 20:57 #5
src="123456_files/showcounter2.htm"
^ - en lille fejl i src angivelsen jeg gav :D
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:00 #6
Lige en lille ekstra ting javascript linjer med document.write
og andre må ikke splittes op på flere linjer som i php ... :)
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:00 #7
nielle, skal vi dele den?
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:09 #8
> mclemens

Det nederste script "-- FILES IN FOLDER --" har ikke meget med det første at gøre ... det er der kun for at jeg kan se filenavne og indhold (er en tidliger version af PHP scriptet)

> nielle  --- Jeg kan ikke rigtigt se at du definere pcount[] før at du forsøger at bruge det?

Sku da netop være defineret  i
var pcount = new Array();
pcount["tutorials"]=17;
pcount["centerpage1"]=7;
pcount["test"]=116;


> mclemens --- Lige en lille ekstra ting javascript linjer med document.write
og andre må ikke splittes op på flere linjer som i php ... :)

forstår ikke hvad du mener ??? Har da ikke splittet noget op ???

>( men hvorfor ikke kalde den for .js ? )
Kalde vilken ???
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:12 #9
Jeg kalder php scriptet der laver javascriptet i headen
<script type="text/javascript" src="componenter/pagecount/display.php"><!--
//-->
        </script>
    </head>

og så forsøger jeg at bruge det i linien
Resultat = <script type="text/javascript">var all = pcount["test"]+pcount["test2"]; document.write(all);</script>

Det virker fint med andet tilsvarende srcipt
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:13 #10
Nede i bunden af din side har du denne linje:

<script type="text/javascript" src="componenter/pagecount/showcounter2.php"><!--
        //--></script>

- den henviser til det jeg skrev i 18/06-2006 20:56:48 ...

[ forstår ikke hvad du mener ??? Har da ikke splittet noget op ??? ]
- Du har ret det var min FF der lavede kludder ved gemning af dokumentet
Avatar billede nielle Nybegynder
18. juni 2006 - 21:13 #11
Jeg prøver lige at gøre mig helt klar:

Jeg kan ikke rigtigt se at du definere pcount[] *før* at du forsøger at bruge det?

Jeg kan derimod godt se at du definere den *efter*, men der er det for sent. Definitionen skal være ovenfor regnestykket.
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:14 #12
http://ww w.jart.dk/jgom/componenter/pagecount/display.php
^ Siden har intet indhold...
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:15 #13
[ Jeg kan derimod godt se at du definere den *efter*, men der er det for sent. Definitionen skal være ovenfor regnestykket. ]

Nielle,
java script:alert(pcount[','test1',']);void(0);
^ Ind i browserlinjen og enter ... document.write
er ikke det samme som at definere variablen...
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:18 #14
nielle >> Definere/kalder PHP scriptet i headen

Se http://www.jart.dk/jgom/test3.html hvor jeg har fjernet  showcounter2.php

nu er det kun display.php der bliver kaldt
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:19 #15
http://www.jart.dk/jgom/componenter/pagecount/display.php
^ Indholdet der definere javascript variabler mangler stadig...
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:20 #16
http://ww w.jart.dk/jgom/componenter/pagecount/display.php
^ Siden har intet indhold...

Nej det er et ren PHP script ...
Ser sådanne ud

$filedata = 0;
$filename = "";
$dir = "./logs";
echo "var pcount = new Array();\n";
if (is_dir($dir)) {   
    if ($dh = opendir($dir)) {
        while (($filename = readdir($dh)) !== false) {
            if (($filename != ".") && ($filename != "..")) {
                $file = $dir . "/" . $filename ;
                $handle = fopen($file, "r");
                $filedata = fread($handle, filesize($file));
                fclose($handle);
                $filename = substr($filename, 0, strrpos($filename, "."));
                echo 'pcount["' . $filename . '"]=' . $filedata . ';'\n;
            }
        }
        closedir($dh);
    }
}
echo "
function pagecountdisplay(id)
{
document.write(pcount[id]);
}
";
exit();
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:24 #17
Ok, jamen så mangler du jo stadig variablerne...
Php scriptet laver jo ikke variablerne noget sted...
Kan godt se de står i bunden af siden på test2.html - men de skal op over den anden javascript funktion og så skal du definere variablerne som i 18/06-2006 20:56:48
- og ikke med document.write();
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:29 #18
samme metode virker fint her http://www.jart.dk/jgom/actions/actions.html

Så forstår ikke helt hvad du mener


Der sider scriptet i headen
<script type="text/javascript" src="../componenter/actcounter/display.php"><!--
//-->
        </script>

og kalder funktionen i bodyen
<td class="actionnum">0<script type="text/javascript">var all = actcount_link[1]+actcount_link[2]; document.write(all);</script>

Dem i bunde af test2.html er ikke dem der kaldes i headen... se http://www.jart.dk/jgom/test3.html hvor jeg har fjernet dem i bunden
Avatar billede nielle Nybegynder
18. juni 2006 - 21:29 #19
Hvordan ser PHP koden ud i din display.php?
Avatar billede nielle Nybegynder
18. juni 2006 - 21:30 #20
Undskyld, så ikke 18/06-2006 21:20:07
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:30 #21
nielle >> Se 18/06-2006 21:20:07
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:31 #22
18/06-2006 21:19:31
og siden er altså tom ergo ingen variabler...
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:32 #23
http://ww w.jart.dk/jgom/componenter/actcounter/display.php
^ Det er så den anden du henviser til jesper, der
er variabler modsat den du henviser til på den nye...
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:36 #24
mclemens

Ja.. er et andet tilsvarend script der fungere på samme måde...
hve dog ikke hvad du mener med modsat ? ...

Og fostår ikke hvad du mener med den er tom ... der er da noget i den ??
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:37 #25
Sætter lige points ne op ...*S*

Og tager den lige fra starten af
Avatar billede nielle Nybegynder
18. juni 2006 - 21:39 #26
Ikke desto mindre skriver den ikke noget ud, ikke engang linjen:

echo "var pcount = new Array();\n";

Prøv at fjerne din exit() i bunden af PHP-koden.
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:39 #27
http://www.jart.dk/jgom/componenter/pagecount/display.php
^ Denne fil siger du indeholder dine variabler... den er tom...
- Kan vist ikke sige det på andre måder...
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:41 #28
Tror måske direktorater mangler eller også
er stien ikke angivet relativt nok...
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:43 #29
http://www.jart.dk/jgom/actions/actions.html
har jeg et script i headen
<script type="text/javascript" src="../componenter/actcounter/display.php"><!--
//-->
        </script>
og det kaldes med denne funktionen i bodyen
<td class="actionnum">0<script type="text/javascript">var all = actcount_link[1]+actcount_link[2]; document.write(all);</script>

Det virker fint

så fandt jeg en hitcounter som (sjovt nok) tæller hits når det bliver kaldt ... men jeg ville gerne kunne vise antallet af hits uden at hitsne blev øget af det ... samt antallet af samlede hits ..
Så jeg lavede mit display.php ud fra samme metode som i componenter/actcounter/display.php

Det ekstra script i bunde af test2 er simpelthen et mellemled i mit forsøg på at lave scriptet så jeg kunne se om det gav de rigtige oplysninger
Avatar billede nielle Nybegynder
18. juni 2006 - 21:46 #30
Selv hvis biblioteket mankede så burde PHP-koden jo udskrive noget. F.eks.:

var pcount = new Array();

- men det gør det altså ikke.

Umiddelbart virker det som om at der er en fejl i koden (men jeg kan nu ikke se den).

Prøv som sagt at fjerne exit() fra bunden af din kode ... den gør alligevel ikke noget fornuftigt der på det sted.
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:46 #31
Nøj hvor er jeg besværlig... *G* ... håber i har tålmodighed med en newbie i Javascript og PHP ...*S*

... er stien ikke angivet relativt nok... ???

>Prøv at fjerne din exit() i bunden af PHP-koden.
Prøve jeg da så ...
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:48 #32
echo 'pcount["' . $filename . '"]=' . $filedata . ';'\n;
->
echo 'pcount["' . $filename . '"]=' . $filedata . ';'\n';

... måske
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:49 #33
ups...
echo 'pcount["' . $filename . '"]=' . $filedata . ';\n';
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:50 #34
[ Nøj hvor er jeg besværlig... *G* ... håber i har tålmodighed med en newbie i Javascript og PHP ...*S* ] Helt ok, det er din php, der ikke spiller :o)

[ ... er stien ikke angivet relativt nok... ??? ]
$dir = "./logs"; om f.eks. den matchede
med et eksisterende direktorat...
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:51 #35
direktorat... ups... mappe :D , har fået
høvl af roenving for den engang tidliger :P
Avatar billede nielle Nybegynder
18. juni 2006 - 21:54 #36
18/06-2006 21:49:02> Ja det er jo nok en meget stor del at årsagen, men så synes jeg hellere at der skal stå:

echo "pcount[\"" . $filename . "\"]=" . $filedata . ";\n";

- ellers biver \n vist nok ikke tolket som er linjeskift, men som teksten \n.
Avatar billede nielle Nybegynder
18. juni 2006 - 21:55 #37
'directory', 'bibliotek', eller 'mappe' ... men selvfølgelig ikke 'direktorat'. ;^)
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:58 #38
Bruger også selv " istedet for ' ... dog så bruger jeg også " ved attributter m.v. - det medfører en masse escaping - så jeg skifter p.t. selv til ' i echo'es ... men det er jo en smagsag :o)
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 21:59 #39
[ ... er stien ikke angivet relativt nok... ??? ]
$dir = "./logs"; om f.eks. den matchede
med et eksisterende direktorat...

Det gør den ...*S*

har fået høvl af roenving for den engang tidliger :P

Ja det skal man passe på med...*G*
Avatar billede mclemens Nybegynder
18. juni 2006 - 21:59 #40
[ - ellers biver \n vist nok ikke tolket som er linjeskift, men som teksten \n. ]
Ok :o)
Avatar billede mclemens Nybegynder
18. juni 2006 - 22:00 #41
Jamen, så kører den jo :)
Avatar billede nielle Nybegynder
18. juni 2006 - 22:01 #42
Kan se at \n røg helt ud :^)
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 22:02 #43
direktoratet for mappe ?...*G*

nielle
Du har fat i noget der  når jeg fjerne \n virke lortet ...*S*

Jeg stratede egenligt med " men ændred det til ' da jeg skulle have " med i sætningen
Måske jeg skulle prøve med \" istedet :-)
Avatar billede nielle Nybegynder
18. juni 2006 - 22:03 #44
Det burde virke med:

echo "pcount[\"" . $filename . "\"]=" . $filedata . ";\n";
Avatar billede mclemens Nybegynder
18. juni 2006 - 22:03 #45
eller 18/06-2006 21:49:02...
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 22:07 #46
JUBI .. mit første PHP script virke nu.... HURRA ..... *Smiler stolt *

oO( Gad vide hvad/hvordan jeg gjorde? )

Takker for jeres hjælp og tålmodighed med en så langtsomt opfattende person som mig...

smid venligts et svar så i kan få velfortjente point....


(Skulle altså ha være i PHP afsnittet med det spørgsmål men troede det var en javascriptfejl jeg havde lavet :-) )
Avatar billede mclemens Nybegynder
18. juni 2006 - 22:07 #47
svar :o)
Avatar billede mclemens Nybegynder
18. juni 2006 - 22:08 #48
svar :o)
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 22:08 #49
mclemens
echo 'pcount["' . $filename . '"]=' . $filedata . ';\n';
virker ikke
så skriver den ;\npcount
Avatar billede nielle Nybegynder
18. juni 2006 - 22:08 #50
mclemens>

Jeg har desværre ikke lige en PHP ved hånden, men jeg tror faktisk ikke at det er lige meget om der står ';\n' eller ";\n"; i enden af linjen:

echo 'pcount["' . $filename . '"]=' . $filedata . ';\n';
echo "pcount[\"" . $filename . "\"]=" . $filedata . ";\n";

Hvis PHP opføre sig, som visse andre scriptsprog, vil den første resulterer i at der bogstavlig talt står teksten \n i slutningen af strengen, mens at den anden resulterer i at der er et linjeskift i enden.

Men jeg kan selvfølgelig tage fejl...
Avatar billede nielle Nybegynder
18. juni 2006 - 22:09 #51
18/06-2006 22:08:25> Nemlig! :^)
Avatar billede nielle Nybegynder
18. juni 2006 - 22:10 #52
... og et svar :^)
Avatar billede mclemens Nybegynder
18. juni 2006 - 22:10 #53
Nåh ok, tror jeg holder mig til " og escaping så :o)
Avatar billede jesper-moeller Nybegynder
18. juni 2006 - 22:15 #54
Takker for hjælpen :-)
Avatar billede nielle Nybegynder
18. juni 2006 - 22:15 #55
*Nu* tør jeg godt udtale mig med en vis autoritet på dette lille hjørne af PHP. ;^)

Forskellen mellem "..." og '...' er at ved den første version fortolkes indeholdet af strengen.

Derfor bliver \n til linjeskift.

Ved den anden derimod sker der ikke nogen fortolkning ... teksten sættes ind i rå form:

Derfor bliver \n bare til teksten \n ... og ligeledes med \t og \r.

Hvis jeg skulle gætte, så ville der også være meget stor forskel på hvad man fik ud med disse tre linjer kode:

$tekst = "bliver dette indsat?";
echo "... $tekst ...";
echo '... $tekst ...';
Avatar billede mclemens Nybegynder
18. juni 2006 - 22:25 #56
Tak for point :o)

$tekst = "bliver dette indsat?";
echo "... $tekst ..."; - Jeps
echo '... $tekst ...'; - Niks

... bruger ikke selv afstande ... så vidste det ikke men når man ikke
bruger afstande, så er det også svært for andre at læse kildekoden...
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