06. januar 2009 - 14:07Der er
22 kommentarer og 2 løsninger
SQL-udtræk og AJAX
Hej.
Jeg har et script, der sender bud(?) efter en fil indeholdende en SQL-forespørgsel. Forespørgslen sorteres så ved hjælp af noget lignende $GET_['sortBy'], så der altså i URLen kommer til at stå, hvilket felt, der skal sorteres efter.
Er der nogen sikkerhedsrisiko, ved direkte at fortælle, hvilke felter jeg har i databasen, eller er det ligemeget? Og er der eventuelt en smartere måde at lave et AJAX-udtræk (hvis det hedder det) på?
Aah ja. Det kan jeg godt se. Det ville ikke være godt. Noget af min php/sql-barnelærdom må være gået tabt der - er det en php-funktion du har skrevet? sql()? Som validerer en sql-sætning?
Du kunne jo give felterne dæknavne eller lignende, måske bare numre, og så køre igennem at hvis sortBy=1 skal sortby variablen (I stedet for at bruge _GET direkte) være "username".
sql-funktionen er bare pseudokode ... et eksempel.
Én eller anden form for identifier skal jo sendes med til klienten, så denne ved, hvad den skal stille op med de forskellige data, der hentes. Til det bruges meget ofte feltnavnene - f.eks:
Nja...er det ikke lidt at give en falsk tryghedsfølelse. Men selvfølgelig løser det problemet med at oplyse feltnavne, jeg tænkte bare, der må være en mere sikker løsning. Det er nok det med at validere inpunt, jeg skal arbejde på.
Så er vi ude i noget xml eller hvad - som AJAX vel også er lavet til, men jeg requester en php-fil, der sender html tilbage til mig, som så bare skal vises i et eller andet element. Altså er det bare nogle data, der skal vises. Er det forkert?
Okay :) Ja, jeg har faktisk lige siddet og læst det. Og forsøgt mig med noget appendChild og replaceChild - og createTextNode(men den laver jo bare tekst). Så nu ved jeg ikke rigtig, hvad jeg skal gøre, hvis jeg ikke må bruge innerHTML:)
Det er altså absolut heller ikke min stærke side. Som jeg har forstået kan man gribe det sådan an, at data overføres som JSON og man herefter opbygger et DOM-træ baseret herpå. Hertil kan oprettes et element for en tabalrække som klones og fyldes med data.
createElement og cloneNode er ret anvendelige DOM-metoder - f.eks:
var oContainer = document.getElementById("minContainer"); var oElm = document.createElement("div"); var oTxt = document.createTextNode("blabla"); oContainer.appendChild(oElm); oElm.appendChild(oTxt);
At udskrive HTML på serveren tager i _bedste_ fald 4-5 gange så lang tid som at udskrive JSON, så det bør slet ikke falde nogen ind! ;o)
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.