02. oktober 2003 - 17:18Der er
15 kommentarer og 2 løsninger
Validering af Querystring som sender undefined retur
Jeg har to variabler som sendes med i linket. fx filnavn.asp?gender=Mand&order=Age
Gender (køn) skal være "Mand" eller "Kvinde". Intet andet skal accepteres. Og skal være med stort begyndelsesbogstav pga MySql tabellen
Order skal være "Profilename" eller "Age" eller "Location" Intet andet accepteres. Og skal være med stort begyndelsesbogstav pga MySql tabellen
Hvis nogle så piller i URL skal scriptet fange det og erstatte evt. vrøvl med "Kvinde" og "Profilename"
Hvis jeg lader være med at lave nogle variabler i linket, melder Request.Querystring tilbage med en værdi som hedder undefined.
Den har jeg godt nok svært ved at styre :(
Så point gives til et komplet script som sikrer at kun de henholdsvis 2 og 3 værdier tillades og kommer der andet, så skal de sættes til "Kvinde" og "Profilename"
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Linket sendes til en ASP-siden som er lavet med JavaScript. Der undersøges URL for variabler og dernæste sættes de ind i en SQL sætning. For at undgå grimme fejl vil jeg derfor teste for om brugerne piller i URL og dermed danner en ugyldig Sql-sætning. Så jeg vil mene det er den rette gruppe jeg har oprettet i.
og dog.. hvis brugeren downloader siden kan han bypass/forbigå din validering.. så skal på asp siden check hvilken side han kommer fra.. alt det der er på clientsiden (html, javascript osv) kan manipuleres med af brugeren..
okay..for at fjerne enhver tvivl ;) Jeg validerer på serversiden og dit eksempel har jeg ikke overvejet at sikre imod, men du har da ret. Filen kalder sig selv med nogle parametre, som bestemmer hverdan SQL skal sammensættes...Så det som driller allemest er altså JavaScript og så noget stringcompare.
select case lcase(request.querystring("gender")) case "mand" ' valgt: mand case "kvinde" ' valgt: mand case else 'intet eller forkert valg.. set default end select
select case lcase(request.querystring("order")) case "age" ' valgt: age case "profilename" ' valgt: "profilename" case "location" ' valgt: "location" case else 'intet eller forkert valg.. set default end select
Nu var det ikke blot pseudokode, men reel kode jeg var efter ;) Jeg prøver lige i morgen at teste det. Case eller IF er ikke problemet. Det som driller er at "intet eller forkert valg" jo er "tomrum" og det viser en QueryString ved at returnere "undefined". Det er ikke et NULL objekt eller en streng man kan teste på. Tror det jeg har problemer med er alle de måder man kan sammenligne på. Har ikke helt styr på dem 1. == 2. !== 3. != 4. ===
Om man koder ASP med VB eller JS er frit og derfor mente jeg det hørte til her og så slut på den diskussion. ;O)
det skal lige siges at det selvfølgelig skal rettes til.. jeg har jo ikke set nogen kode fra dig, så jeg ved ikke hvordan det skal være.. det her er et eksempel på en opbygning til din kontrol..
-- nu kender jeg ikke de forskelligheder serverside JScript har fra clientside javascript, men hvis logikken ikke har taget skade af at være rent M$-styret, må det blive noget med:
g = 'Kvinde'; o = 'Profilename'; q = dinQueryString.substring(1);//clientside: document.search.substring(1) q = q.split('&'); for(i=0;q.length>i;i++){ if(q[i].indexOf('gender')>-1){ if(q[i].toLowerCase().indexOf('mand')>-1){ g = 'Mand'; } }else{ if(q[i].indexOf('order')>-1){ if(q[i].toLowerCase().indexOf('age')>-1){ o = 'Age'; }else{ if(q[i].toLowerCase().indexOf('location')>-1){ o = 'Location'; } } }
Jeg har måske ikke udtrykt mig klart, men I tager slet ikke højde for det som jeg spurgte om. Hvis der slet ikke bliver skrevet nogle parametre i URL, hvad så? Så melder QueryString tilbage med 'undefined' på alle forespørgsler. DET var mit problem og skal løses på denne måde:
var undefined; // Udefineret variabel, ergo er den undefined qryOrder = Request.QueryString("Order"); if (qryOrder===undefined)qryOrder = "Profilname";
-- den arbejdede nemlig kun hvis der var en querystring, som indeholdt nogle af de 'reserverede' ord ellers returnerede den default-settings ...
Synes godt om
Ny brugerNybegynder
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.