Toon posts:

[ASP] Array velden als naam

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb aardig wat ervaring in PHP en daar gebruikte ik een array om velden over te sturen. Bijvoorbeeld als een member zich aanmeld moet hij een form invullen. In dat form staan de volgende velden:

- member[username]
- member[name]
- member[surname]
- member[address]
- etc

Als hij dan dit form submit dan roep ik de functie memberAdd( $member ) aan. Hij geeft dan het array member mee. Dit array pluis ik dan in de functie memberAdd weer uit elkaar en weet ik van een bepaald veld uit dat array de naam en de data. Hiervan kan ik handig gebruik maken om de data te inserten in de database. Want ik geef het veld in een array dezelfde naam als het veld in de database.

Hiervoer gebruik ik de volgende functie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
function memberAdd( $members ) {
    $query = "INSERT INTO member(";
    for ( $i = 0; $i < count( $member ); $i++ ) {
        list($key, $value) = each( $member );
        if ( count( $member )-1 == $i ) {
            $value = strip_tags( $value );
            $query .= "$key";
            $query2 .= "'$value'";
        } else {
            $value = strip_tags( $value );
            $query .= "$key, ";    
            $query2 .= "'$value', ";
        }        
    }
    $query .= ") VALUES (".$query2.")";
    $result = $this->Query($query);
    if( !$result )
        $this->log("error in query: '$query' \n \t\t ds reported: ".mysql_errno().' : '.mysql_error(),__FILE__, __LINE__);
}
?>

Nu mijn daadwerkelijk vraag, kan ik in ASP de velden ook een naam geven ipv een getal? Ik kan dit namelijk nergens vinden. Zo niet heeft iemand anders misschien een idee hoe ik het dan slim aan kan pakken zoals hierboven uitgelegd wordt? ( mits je dat slim vind natuurlijk :p )

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 12 februari 2002 09:41 schreef Tranqi het volgende:
Nu mijn daadwerkelijk vraag, kan ik in ASP de velden ook een naam geven ipv een getal? Ik kan dit namelijk nergens vinden. Zo niet heeft iemand anders misschien een idee hoe ik het dan slim aan kan pakken zoals hierboven uitgelegd wordt? ( mits je dat slim vind natuurlijk :p )
Aangezien ASP geen taal is zal je het daar idd niet makkelijk mee vinden ;)

Sterker nog, als je perl gebruikt als taal bij asp kan het iig wel. Of als je php gebruikt als taal.... ;)

Of VB het kan weet ik niet, ik gok van niet.

Verwijderd

Topicstarter
Doh vergeten bij te vermelden inderdaad...ik schrijf in VB...mijn excuses :)

Verwijderd

Je bedoelt waarschijnlijk een dictionary object;
code:
1
2
3
4
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"   ' Add some keys and items.
d.Add "b", "Belgrade"
d.Add "c", "Cairo"

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Je kan dan beter de boel als collection behandelen, en dan met een for each construction werken.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Zo... dat is handig... jij laat de kolomnamen in een query afhangen van de veldnamen die gedefinieerd zijn in een html formulier???

Dat is makkelijk... Heb je in die members tabel toevallig ook nog een veldje staan die aangeeft of iemand een admin is?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Dat is makkelijk... Heb je in die members tabel toevallig ook nog een veldje staan die aangeeft of iemand een admin is?
>:) Beetje flauw, maar je hebt een punt...

Verwijderd

Topicstarter
Segunda@Tweakers & raptorix bedankt voor jullie reacties. Ik ga dit even verder inkijken. Hoop dat er wat uitkomt :)
Dat is makkelijk... Heb je in die members tabel toevallig ook nog een veldje staan die aangeeft of iemand een admin is?
Nee dit wordt in een aparte tabel afgehandeld, maar dat terzijde. In welk opzicht is dit gevaarlijk. Bedoel je dat je dan extra veldnamen kan mee sturen via de URL of iets dergelijks? In hoeverre kan je deze methode beinvloeden? Misschien wat offtopic, maar je bent nooit oud genoeg om te leren van je fouten :)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 17:24

Crazy D

I think we should take a look.

Op dinsdag 12 februari 2002 12:09 schreef Tranqi het volgende:
Bedoel je dat je dan extra veldnamen kan mee sturen via de URL of iets dergelijks? In hoeverre kan je deze methode beinvloeden?
Tjah als je een veldje admin hebt wat default 0 is, kun je stiekum admin=1 meesturen bij het posten, en die neem je dan vervolgens heel fijn mee in je query :)
(in jouw geval zou dat dan niet werken omdat je het in een aparte tabel opslaat, maar je kan denk ik wel meer dingen bedenken die misschien niet helemaal gewenst zijn...)

Als je het graag makkelijk zonder alles hard te coderen wilt maken, zou ik (komt nu ter plekke in me op....) een array vullen in code met de veldnamen, en via die array je form-waardes uitlezen. Dan lees je _nooit_ meer uit dan dat je bedoeling was. Als iemand dan extra velden mee post is dat leuk maar heb jij daar geen last van.

Exact expert nodig?


Verwijderd

Topicstarter
Hmm ik heb het systeem wat ik had wat gecontroleerd en het is inderdaad erg makkelijk om extra velden mee te sturen (mits je de naam er van weet natuurlijk). Hier moet ik maar een validate functie omheen bakken.

Bedankt voor de waarschuwing. Back to the drawing table!

Verwijderd

Topicstarter
Ik heb ondertussen wat lopen prutsen in een dictonary object en heb het zo maar opgelost:
code:
1
2
3
4
Set objProfiel = CreateObject("Scripting.Dictionary")
For i=1 to Request.Form.Count-2
   objProfiel.Add Request.Form.Key(i), Request.Form(i)
Next

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 17:24

Crazy D

I think we should take a look.

Op woensdag 13 februari 2002 15:09 schreef Tranqi het volgende:
Ik heb ondertussen wat lopen prutsen in een dictonary object en heb het zo maar opgelost:
Misschien zie ik iets over het hoofd (na een dag als vandaag ben ik nogal duf...), maar je gebruikt nu nog steeds de items in je form om de collectie te vullen. Dat kan, alleen zou ik dan niet bij het maken van je query de dictionary in een loopje doorlopen, want dan kun je nog steeds admin=1 mee sturen...

Exact expert nodig?


Verwijderd

Topicstarter
Ik dacht dat je met request.form("veld") alleen de waarden uit het form haalde? Volgens mij kan je dan waarden wat je wil toevoegen in de URL, maar zolang je die niet request gebruikt hij ze niet?

Toch?

Tevens stuur ik die dictonary door naar een functie die hem op zijn beurt weer uitpluist. Waarom ik zo doe is omdat het form dynamisch is. De ene keer zitten er 2 velden in en de andere keer 10 velden. (De ene user kan/mag meer invullen als de ander)

Als ik weer dingen over het hoofd zie kan het kloppen, want het is 5 uur en ik ga naar huis :)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 17:24

Crazy D

I think we should take a look.

Op woensdag 13 februari 2002 17:05 schreef Tranqi het volgende:
Ik dacht dat je met request.form("veld") alleen de waarden uit het form haalde? Volgens mij kan je dan waarden wat je wil toevoegen in de URL, maar zolang je die niet request gebruikt hij ze niet?
Zonder extra controles kun je de html met de form saven, extra velden toevoegen, en dan posten.
Als je dan vervolgens in je functie gewoon alles uitleest, kun je er ook velden bij krijgen die je niet wil/behoort te hebben (zoals het admin veldje...). Ik geef toe, het is wat meer hobbyen dus een aantal scriptkiddies schrik je dan wel af, maar het gaat om het principe :P
Ik heb altijd 2 dingen geleerd (nou ja wel iets meer hoor :P) (willekeurige volgorde trouwens)
1. gebruik nooit de echte database-veldnamen voor je formuliertje
2. lees bewust de velden uit, niet via loopjes die alle invoervelden uit de form doorloopt
3. controlleer je data, desnoods 2 keer l)
(oh 2 dingen heb ik niet geleerd.... tellen :P)


Hoe wordt de form opgebouwt dan? Of zijn het verschillende pagina's die allemaal naar die ene asp pagina posten?

Exact expert nodig?


Verwijderd

Topicstarter
Hoe wordt de form opgebouwt dan? Of zijn het verschillende pagina's die allemaal naar die ene asp pagina posten?
Een bepaalde gebruiker logt in. Per gebruiker is ingestelt wat hij van zijn eigen profiel (bank nummer, btw nummer etc) mag zien. Vraag me niet waarom dat is een lang verhaal :)

Dus het form moet dynamisch opgebouwd zijn. De ene user ziet 2 input boxen en de andere 20. Dus ik kijk in de database welke velden hij mag zien en bouw het form aan de hand van die output op.

Als hij het invult store ik dit en stuur dit over naar de functie. Die kijkt welke velden zijn meegestuurt en doet alleen een update over deze velden.

Dat iemand een pagina opslaat op de hardeschijf en zelf bewerkt en weer verstuurd had ik nog niet over na gedacht. Goed...back to the drawing table :)

Ik zal het idee nog eens goed over denken, want veiligheid is toch belangrijker dan wat minder regels code :)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 17:24

Crazy D

I think we should take a look.

Op donderdag 14 februari 2002 08:53 schreef Tranqi het volgende:
Dus het form moet dynamisch opgebouwd zijn. De ene user ziet 2 input boxen en de andere 20. Dus ik kijk in de database welke velden hij mag zien en bouw het form aan de hand van die output op.
My € 0.02
Je moet de db toch queryen om de form op te bouwen. Zet dat "bovenin" je pagina, en stop die veldnamen in een dictionary/array/losse variabelen :P. Dan kun je hiermee je form opbouwen. Bij het uitlezen van je form kun je dan die array/dictionary ook gebruiken. Dan kunnen ze met de form fucken wat ze willen, jij leest nooit meer velden uit dan die velden die de gebruiker moet invoeren. Pas je form-uitlees-functie aan dat ie niet alleen een dictionary van de ingevulde form-waardes krijgt, maar ook een dictionary met de velden die uitgelezen moeten worden, en 't is iig weer een stukje veiliger.

Exact expert nodig?

Pagina: 1