/ Forside/ Teknologi / Udvikling / Java Scripts / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
variabelnavne med []
Fra : leifnel
Vist : 577 gange
100 point
Dato : 12-12-01 15:07

Af hensyn til den php, der behandler formen, hedder feltvariablene felt[1], felt[2] osv.

Nu skal jeg i javascript lave en reference: window.tal=document.form.felt[1], så et popup-vindue kan levere data til det kaldende dokument.

Men javascript fortolker felt[1] som felt.1, og der findes ingen variable, der hedder felt:

document.form.felt.1 er null eller ikke et objekt.

Hvordan kan man navngive et variabelt antal felter, så både javascript og php kan forstå det

 
 
Accepteret svar
Fra : Nyhedsbruger

Modtaget 100 point
Dato : 12-12-01 17:05

leifnel skrev:
>
> Af hensyn til den php, der behandler formen, hedder feltvariablene
> felt[1], felt[2] osv.
>
> Nu skal jeg i javascript lave en reference:
> window.tal=document.form.felt[1], så et popup-vindue kan levere data
> til det kaldende dokument.
>
> Men javascript fortolker felt[1] som felt.1, og der findes ingen
> variable, der hedder felt:

Sæt et id på formularelementet:

<input type='text' name='felt[]' id='input1'/>

Brug så getElementById()-funktionen til at gøre noget ved
formularelementet:

document.getElementById("input1").disabled = true

--
Jonas Koch Bentzen

http://understroem.dk/

Godkendelse af svar
Fra : leifnel


Dato : 13-12-01 01:00

Tak for svaret Jonas Koch Bentzen. Det virkede perfekt.
Leif
                        

Kommentar
Fra : Nyhedsbruger


Dato : 16-12-01 18:18

"leifnel" <leifnel.news@kandu.dk> wrote in message
news:spJR7.6857$z4.895096@news000.worldonline.dk...
> Af hensyn til den php, der behandler formen, hedder feltvariablene
> felt[1], felt[2] osv.

Dette er ikke af hensyn til PHP, men udelukkende hvis du vil benytte en
indbygget convenience method. Der er absolut ingen grund til at benytte
ulovlige tegn til at navngive dine elementer (brackets er ulovlige efter
HTML4 standarden i NAME og ID attributer), lær at parse form headers i PHP
og overhold standarderne.

<URL: http://jibbering.com/faq/#FAQ4_25 >
<URL: http://jscript.dk/faq/php.asp >

--
Thor Larholm
<URL: http://www.jibbering.com/faq/> FAQ for comp.lang.javascript



Kommentar
Fra : Nyhedsbruger


Dato : 16-12-01 19:45

On Sun, 16 Dec 2001 18:17:42 +0100, "Thor Larholm" <usenet@jscript.dk>
wrote:

>Der er absolut ingen grund til at benytte
>ulovlige tegn til at navngive dine elementer (brackets er ulovlige efter
>HTML4 standarden i NAME og ID attributer), lær at parse form headers i PHP
>og overhold standarderne.

Mit råd er så: Brug standarderne og læs tilbage i denne nyhedsgruppe
;)

"name" i input, button, select, m.m. er af SGML-basis-typen CDATA,
_ikke_ af SGML-basis-typen NAME.

"id" er rigtigtnok af SGML-basis-typen NAME, men såvidt, jeg kan se,
henvises der blot til at "feltvariablerne" (underforstået værdien til
"name"-attributten) hedder noget med [..]. Og det er ganske enkelt
ikke ulovligt.

<news:x5rc7.762$uI6.66466@news000.worldonline.dk>
http://www.w3.org/TR/REC-html40/interact/forms.html

Misforståelsen stammer selvfølgelig i "navne-sammenfaldet" (no pun) i
attributten "name" og SGML-basis-typen NAME.

For en god ordens skyld bør det nævnes, at det samme er tilfældet i
XHTML1.0:
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd

<!ELEMENT input EMPTY> <!-- form control -->
<!ATTLIST input
[..]
name CDATA #IMPLIED
[..]
>

At det så på nogle punkter kan give uhensigtsmæssigheder, er så en
anden sag. Men det er synd at anklage det for ikke at overholde
standarderne.

--
- Peter Brodersen
24 Days of Crashmas - julekalender:
http://jul.bums.dk/

Kommentar
Fra : Nyhedsbruger


Dato : 16-12-01 21:06

"Peter Brodersen" <professionel@nerd.dk> wrote in message
news:3Y5T7.4613$Q3.710913@news010.worldonline.dk...
> Mit råd er så: Brug standarderne og læs tilbage i denne nyhedsgruppe
> ;)

Fra <URL: http://www.w3.org/TR/html401/types.html#type-id >
<QUOTE>
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed
by any number of
letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and
periods (".").
</QUOTE>

[ og ] kan ikke bruges i NAME og ID attributer i HTML 4.

> For en god ordens skyld bør det nævnes, at det samme er tilfældet i
> XHTML1.0:
> http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
>
> <!ELEMENT input EMPTY> <!-- form control -->
> <!ATTLIST input
> [..]
> name CDATA #IMPLIED
> [..]

Samtidig bør der dog kigges på
<URL: http://www.w3.org/TR/xhtml1/#guidelines >
under "C.8 Fragment Identifiers", hvor vi finder
<QUOTE>
Further, since the set of legal values for attributes of type ID is much
smaller than for those of type CDATA, the type of the name attribute has
been changed to NMTOKEN. This attribute is constrained such that it can only
have the same values as type ID, or as the Name production in XML 1.0
Section 2.5, production 5.
</QUOTE>

Fra <URL: http://www.w3.org/TR/2000/REC-xml-20001006#NT-Name > kan vi se at
NMTOKEN, som NAME og ID attributer i HTML4, kun kan indeholde tal,
bogstaver, -, _, : og ., ikke [ eller ].

> At det så på nogle punkter kan give uhensigtsmæssigheder, er så en
> anden sag. Men det er synd at anklage det for ikke at overholde
> standarderne.

Jeg nævnte specifikt at det ikke overholdt HTML 4 standarden, hvilket det
ikke gør ;)

Det vil selvf. være i orden i XHTML strict, men når det nu både er i
modsætning til HTML4 standarden samt XHTML HTML Compatibility Guidelines og
derudover vil give syntax-fejl i JS hvis man ikke tager højde for det .. så
kan man lige så godt lære at parse form headers selv istedet for at bero på
en convenience funktion i PHP.


--
Thor Larholm
<URL: http://www.jibbering.com/faq/> FAQ for comp.lang.javascript



Kommentar
Fra : Nyhedsbruger


Dato : 16-12-01 21:55

On Sun, 16 Dec 2001 21:06:16 +0100, "Thor Larholm" <usenet@jscript.dk>
wrote:

>Fra <URL: http://www.w3.org/TR/html401/types.html#type-id >
><QUOTE>
>ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed
>by any number of
>letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and
>periods (".").
></QUOTE>

ID og NAME er her SGML-typer; der henvises ikke til attribut-navne.

>[ og ] kan ikke bruges i NAME og ID attributer i HTML 4.

Vi taler altså ikke om "id", men "name", som fx:

<input type="text" name="vare[]">

Det er ikke forkert, da værdien til name skal være af typen CNAME.

http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.4

<!ATTLIST INPUT
[..]
name CDATA #IMPLIED -- submit as part of form --
[..]
>

Længere er den altså ikke. Vi er enige om at der står "CDATA" ud for
sgml-type, og ikke "NAME", ikke sandt?

>Samtidig bør der dog kigges på
> <URL: http://www.w3.org/TR/xhtml1/#guidelines >
>under "C.8 Fragment Identifiers", hvor vi finder

Igen, vi snakker ikke om id (kun i Jonas' løsningsforslag, hvor []
ikke har været på tale), men om name.

>> At det så på nogle punkter kan give uhensigtsmæssigheder, er så en
>> anden sag. Men det er synd at anklage det for ikke at overholde
>> standarderne.
>Jeg nævnte specifikt at det ikke overholdt HTML 4 standarden, hvilket det
>ikke gør ;)

Beklager, men det gør det, jf. ovenstående.

Check fx:

http://stock.ter.dk/html4.php
http://validator.w3.org/check?uri=http%3A%2F%2Fstock.ter.dk%2Fhtml4.php&charset=%28detect+automatically%29&doctype=Inline
http://www.htmlhelp.com/cgi-bin/validate.cgi?url=http://stock.ter.dk/html4.php&input=yes

Den validerer uden problemer i HTML 4.01 Strict, og den indeholder
bl.a. følgende:
<input type="text" name="vare[]">


Vi er ikke uenige om at det ikke er hensigtsmæssigt at bruge, hvis man
vil lave js-kald på indholdet af dette felt, men du bør ikke kalde det
forkert, når det er 100% gyldig HTML.

--
- Peter Brodersen
24 Days of Crashmas - julekalender:
http://jul.bums.dk/

Kommentar
Fra : leifnel


Dato : 17-12-01 04:54

"Thor Larholm" skrev d. 16-12-01 18:18 dette indlæg :
> "leifnel" <leifnel.news@kandu.dk> wrote in message
> news:spJR7.6857$z4.895096@news000.worldonline.dk...
> > Af hensyn til den php, der behandler formen, hedder feltvariablene
> > felt[1], felt[2] osv.
>
> Dette er ikke af hensyn til PHP, men udelukkende hvis du vil benytte en
> indbygget convenience method. Der er absolut ingen grund til at benytte
> ulovlige tegn til at navngive dine elementer (brackets er ulovlige efter
> HTML4 standarden i NAME og ID attributer), lær at parse form headers i PHP
> og overhold standarderne.
>

Ok, så kom med en efter din mening lovlig løsning på dette:

Et sql-query returnerer et variabelt antal rækker (nøgle og værdi)

Alle disse rækker skal kunne redigeres samtidig (ikke noget med en submit-knap pr række)
Jeg laver en form:
<form action=post.php>
<input type=hidden name=numrows value=7>
<input type=hidden name=key[1] value=1234><input type=text name=val[1] value=2345>
<input type=hidden name=key[2] value=1234><input type=text name=val[2] value=2345>
...
<input type=submit>

I post.php:
$query="replace into tabel (key,value) values "
for ($n=1;$n<=$numrows;$n++) {
$query.="($key[$n],$val[$n])";
};


Leif


Kommentar
Fra : Nyhedsbruger


Dato : 17-12-01 05:02

On Mon, 17 Dec 2001 03:54:11 GMT, "leifnel" <leifnel.news@kandu.dk>
wrote:

><input type=hidden name=key[1] value=1234><input type=text name=val[1]
>value=2345>

Du bør blot have "" rundt om key[1] og val[1], fx:

<input type=hidden name="key[1]" value=1234><input type=text
name="val[1]" value=2345>

.... men ellers er det gyldigt nok. Hvis du dog vil forsøge at tilgå
dataen, bør du så fx bruge getElementById()

Dog, hvad angår hidden-felter, kan du overføre dataen på andre måder.
Fx ved brug af serialize() og unserialize() i PHP'en.

Men selvom [..] var ulovlig at bruge, ville man blot kunne lave sit
eget hjemmebryg, fx ved at kalde variablerne for variabel1, variabel2,
variabel3, etc. - og så i sit PHP-script ræse $HTTP_GET_VARS-array'et
igennem og selv trække variabler ud og omdanne det til et array.

Der er intet galt i internt at behandle data, før man ender op med en
eller anden query.

--
- Peter Brodersen
24 Days of Crashmas - julekalender:
http://jul.bums.dk/

Kommentar
Fra : Nyhedsbruger


Dato : 20-12-01 05:05

"Peter Brodersen" <professionel@nerd.dk> wrote in message
news:D6eT7.4831$Q3.749306@news010.worldonline.dk...
> Men selvom [..] var ulovlig at bruge, ville man blot kunne lave sit
> eget hjemmebryg, fx ved at kalde variablerne for variabel1, variabel2,
> variabel3, etc. - og så i sit PHP-script ræse $HTTP_GET_VARS-array'et
> igennem og selv trække variabler ud og omdanne det til et array.

Se, det er netop dette jeg ville pointere - at man godt selv kan parse form
headers. De fleste PHP programmører tror at man _kun_ kan bruge den
automatisk form parsing, og kender ikke noget til f.eks. $HTTP_POST_VARS (og
hvad de ellers hedder, bruger ikke PHP til dagligt).


--
Thor Larholm
<URL: http://www.jibbering.com/faq/> FAQ for comp.lang.javascript



Kommentar
Fra : Nyhedsbruger


Dato : 21-12-01 02:01

On Thu, 20 Dec 2001 05:05:21 +0100, "Thor Larholm" <usenet@jscript.dk>
wrote:

>Se, det er netop dette jeg ville pointere - at man godt selv kan parse form
>headers.

.... men retter du ikke alligevel http://jscript.dk/faq/php.asp til?
Der er ingen grund til at sprede mere forvirring til på det punkt.

(opsummeret: det afsnit, der quote's på den side, handler om ID- og
NAME-definitionerne i SGML - ikke om hvad, id- og name-attributterne
ved diverse html-elementer må indeholder af tegn)

Som sagt er jeg ikke uenig i at det er uhensigtsmæssige navne, såfremt
man forsøger at lege med JavaScript - og ikke gider bruge den noget
mere sexede getElementById() - men der er ingen grund til at kalde det
ugyldig HTML, når det ikke er det.

--
- Peter Brodersen
24 Days of Crashmas - julekalender:
http://jul.bums.dk/

Kommentar
Fra : Nyhedsbruger


Dato : 21-12-01 08:21

"Peter Brodersen" <professionel@nerd.dk> wrote in message
news:hQvU7.1311$Zm5.190205@news000.worldonline.dk...
> On Thu, 20 Dec 2001 05:05:21 +0100, "Thor Larholm" <usenet@jscript.dk>
> wrote:
>
> >Se, det er netop dette jeg ville pointere - at man godt selv kan parse
form
> >headers.
>
> ... men retter du ikke alligevel http://jscript.dk/faq/php.asp til?

Jeg retter den til senere i dag når jeg kommer på arbejde.

> Der er ingen grund til at sprede mere forvirring til på det punkt.
>
> (opsummeret: det afsnit, der quote's på den side, handler om ID- og
> NAME-definitionerne i SGML - ikke om hvad, id- og name-attributterne
> ved diverse html-elementer må indeholder af tegn)

Som nævnt før, så er det ulovligt i HTML4 - jeg retter siden til så det
fremgår at dette er tilladt i XHTML (nok en god idé, CLJ FAQ'en linker til
den og vi vil jo ikke forvirre folk).

> Som sagt er jeg ikke uenig i at det er uhensigtsmæssige navne, såfremt
> man forsøger at lege med JavaScript - og ikke gider bruge den noget
> mere sexede getElementById() - men der er ingen grund til at kalde det
> ugyldig HTML, når det ikke er det.

Man kan nu sagtens referere til elementet med DOM0 og dermed understøtte
NS2+/IE3+:

document.forms["formNavn"].elements["phpelement[][][][]][[][]"].value;

--
Thor Larholm
<URL: http://www.jibbering.com/faq/> FAQ for comp.lang.javascript



Kommentar
Fra : leifnel


Dato : 21-12-01 19:37

"Thor Larholm" skrev d. 21-12-01 08:21 dette indlæg :
> "Peter Brodersen" <professionel@nerd.dk> wrote in message
> news:hQvU7.1311$Zm5.190205@news000.worldonline.dk...
> > On Thu, 20 Dec 2001 05:05:21 +0100, "Thor Larholm" <usenet@jscript.dk>
> > wrote:
> >
> > >Se, det er netop dette jeg ville pointere - at man godt selv kan parse
> form
> > >headers.
> >
> > ... men retter du ikke alligevel http://jscript.dk/faq/php.asp til?
>
> Jeg retter den til senere i dag når jeg kommer på arbejde.
>
<citat src=http://jscript.dk/faq/php.asp>
Solution ? Give your form elements legal names, MySelect instead of MySelect[],
and learn to parse form headers, dammit! (hint: read the manual about expand)
</citat>

<citat src=http://www.php.net/search.php>
2 documents match your search for 'expand' in the PHP Web site:
... the manual (tar.gz, tar.bz2 and zip) don't contain any directories, so all of the files will be dumped into your current working directory when you expand the archive unless the tool you use does otherwise.
</citat>

Hvad vil du foreslå man læser?

Leif

Kommentar
Fra : Nyhedsbruger


Dato : 22-12-01 02:30

On Fri, 21 Dec 2001 08:20:39 +0100, "Thor Larholm" <usenet@jscript.dk>
wrote:

>Som nævnt før, så er det ulovligt i HTML4

Modbevis:

http://stock.ter.dk/html4.php
http://validator.w3.org/check?uri=http%3A%2F%2Fstock.ter.dk%2Fhtml4.php&charset=%28detect+automatically%29&doctype=Inline
http://www.htmlhelp.com/cgi-bin/validate.cgi?url=http://stock.ter.dk/html4.php&input=yes

Det er ikke ulovligt. Og det virker stadigvæk ikke som om, du har
forstået forskellen på SGML-navnene, og så element-navne, hvilket -
med al respekt - bekymrer mig lidt.


name-definition:

http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.4

<!ATTLIST INPUT
[..]
name CDATA #IMPLIED -- submit as part of form --
[..]
>

name er af typen "CDATA". Ikke af typen "NAME" eller "ID".

--
- Peter Brodersen
24 Days of Crashmas - julekalender:
http://jul.bums.dk/

Kommentar
Fra : Nyhedsbruger


Dato : 22-12-01 11:46

"leifnel" <leifnel.news@kandu.dk> wrote in message
news:McLU7.1622$aS.249903@news010.worldonline.dk...
> "Thor Larholm" skrev d. 21-12-01 08:21 dette indlæg :
> > Jeg retter den til senere i dag når jeg kommer på arbejde.
> >
> <citat src=http://jscript.dk/faq/php.asp>
> Solution ? Give your form elements legal names, MySelect instead of
> MySelect[],
> and learn to parse form headers, dammit! (hint: read the manual about
> expand)
> </citat>
>
> <citat src=http://www.php.net/search.php>
> 2 documents match your search for 'expand' in the PHP Web site:
> .. the manual (tar.gz, tar.bz2 and zip) don't contain any directories,
> so all of the files will be dumped into your current working directory
> when you expand the archive unless the tool you use does otherwise.
> </citat>
>
> Hvad vil du foreslå man læser?

Jeg vil foreslå at man læser expand og $HTTP_GET_VARS, $HTTP_POST_VARS.

Det ovenstående var skrevet på 2 minutter, efter at 40 forskellige personer
på under 24 timer havde spurgt på #Javascript (EFNet) hvordan de skulle
referere deres sjove form-elementer. Det eneste de havde at sige på #PHP var
"expand $HTTP_GET_VARS", efter at resten havde brugt en halv time på at
påstå at man ikke kunne parse form headers selv i PHP og at man blev nødt
til at bruge den automatiske parsing (*suk*).

Så ja, tonen er måske lidt hård i php.asp, men jeg var lettere irriteret på
"those PHP-people".


--
Thor Larholm
<URL: http://www.jibbering.com/faq/> FAQ for comp.lang.javascript



Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177415
Tips : 31962
Nyheder : 719565
Indlæg : 6407849
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste