Permalänk
Medlem

Nybörjarfrågor om XML

Hoppas på bra och användbara svar härifrån ännu en gång.

Har börjat titta lite på XML eftersom jag vill visa en adresslista som ska gå att uppdatera via nåt webbgränssnitt. Uppdateringen bekymrar jag mig om senare, just nu försöker jag få ordning på själva visningen av listan och har ett par funderingar:

1) Säkerheten. Sidan som visar adresserna kräver inlogg, men väl där är det lätt att se vad xml-filen heter (står ju i källkoden, bara javascript) och vet man namnet går den ju att komma åt utan vidare för vem som helst. Synpunkter på detta?

2) Layout i HTML. Jag har tittat på olika sätt att visa XML-datan snyggt i en tabell. Mitt problem är att alla "poster" inte är likadana. Vissa noder har fler barn än andra. Mer konkret så har vissa personer ett enda telefonnummer medan andra har två eller tre. Jag har tittat på olika exempel på W3Schools, men de verkar alla bygga på mallar som är relativt hårdkodade utifrån hur XML-filen är uppbyggd. Jag vill kunna lägga till fler telefonnummer i XML-filen utan att behöva ändra i javascriptet som plockar fram informationen.

3) Jättedum fråga säkert men när använder man XML DOM och när använder man XPath?

Skulle bli väldigt tacksam för några fingervisningar!

Permalänk
Medlem

1. Säkerheten har egentligen ingenting med din XML-fil att göra. Saker som lösenord och liknande skall sparas på ett från utsidan oåtkomligt ställe, exempelvis en databas eller i en katalogstruktur som inte går att accessa externt. XML-filen skall enbart användas för att specifiera publik data, åtminstone så länge den måste vara direkt åtkombar av ett klientsystem (t ex om du bygger en AJAX-lösning).

2. Detta är också ett logiskt programmeringsproblem. Om du har en solid XML-struktur så ska det vara upp till ditt program att presentera den på lämpligt vis. Vill du att din applikation ska visa flera av de telefonnummer som hör en nod till så får du se till att javascriptet är kompatibelt med ett eller flera telefonnummer helt enkelt; hur du väljer att strukturera eller namnge noder i XML-filen är oviktigt (så länge du gör rätt rent syntaktiskt naturligtvis )

3. Jag är lite vilsen på detta plan men har för mig att XPath används för att göra kriteriebaserade sökningar på nodnamn. XML DOM används väl för att bygga eller förändra själva XML-dokumentet.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Teknocide
1. Säkerheten har egentligen ingenting med din XML-fil att göra. Saker som lösenord och liknande skall sparas på ett från utsidan oåtkomligt ställe, exempelvis en databas eller i en katalogstruktur som inte går att accessa externt. XML-filen skall enbart användas för att specifiera publik data, åtminstone så länge den måste vara direkt åtkombar av ett klientsystem (t ex om du bygger en AJAX-lösning).

2. Detta är också ett logiskt programmeringsproblem. Om du har en solid XML-struktur så ska det vara upp till ditt program att presentera den på lämpligt vis. Vill du att din applikation ska visa flera av de telefonnummer som hör en nod till så får du se till att javascriptet är kompatibelt med ett eller flera telefonnummer helt enkelt; hur du väljer att strukturera eller namnge noder i XML-filen är oviktigt (så länge du gör rätt rent syntaktiskt naturligtvis )

3. Jag är lite vilsen på detta plan men har för mig att XPath används för att göra kriteriebaserade sökningar på nodnamn. XML DOM används väl för att bygga eller förändra själva XML-dokumentet.

1) Jag tänker mig att informationen är halvhemlig; alla med lösen ska kunna se den men inga andra. I det här fallet kan vem som helst komma åt den om de (mot förmodan) får reda på vad filen heter. Är det bättre med en databas då? Jag är inte så sugen på databas eftersom XML-strukturen passar data så bra. Helst skulle jag vilja sätta filrättigheterna så att andra filer kan öppna och läsa men utan att det går att accessa XML-filen direkt, men det går inte va?

2) Okej, min första tanke med rekursiva funktioner kanske inte var så galen då. Jag tenderar att tycka att alla W3Schools exempel är långt bättre än det jag tänker ut själv men det är väl för mycket begärt att de ska ta hänsyn till vad jag håller på med

3) Tack, då ska jag koncentrera mig på DOM när jag kommer till uppdateringsfunktionerna!

Bonusfråga: Hur skriver jag kod snyggt här i forumet? Ska det inte finnas nån knapp..?

Stort tack!

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Meat
Bonusfråga: Hur skriver jag kod snyggt här i forumet? Ska det inte finnas nån knapp..?

[ code] Din kod här [ /code]

Självklart utan mellanslag i taggarna.

Vill du annars ha lite färgglatt kan du använda [php]-taggen.

Visa signatur

Är du lycklig nu?

Frågor och funderingar angående modereringen tas med mail, inte genom forumet. dennizpop@sweclockers.com

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Meat
1) Jag tänker mig att informationen är halvhemlig; alla med lösen ska kunna se den men inga andra. I det här fallet kan vem som helst komma åt den om de (mot förmodan) får reda på vad filen heter. Är det bättre med en databas då? Jag är inte så sugen på databas eftersom XML-strukturen passar data så bra. Helst skulle jag vilja sätta filrättigheterna så att andra filer kan öppna och läsa men utan att det går att accessa XML-filen direkt, men det går inte va?

Det borde faktiskt inte vara omöjligt. Du skulle t ex kunna ha ett PHP-system som kontrollerar ifall en användare är inloggad och automatiskt skickar vidare användaren. Det kan vara så enkelt som att du har en katalogstruktur där du lägger en .htaccess-fil med access deny tillsammans med XML-filen. XML-filen kan sedan kommas åt genom serveranrop i PHP.

Citat:

Ursprungligen inskrivet av Meat
2) Okej, min första tanke med rekursiva funktioner kanske inte var så galen då. Jag tenderar att tycka att alla W3Schools exempel är långt bättre än det jag tänker ut själv men det är väl för mycket begärt att de ska ta hänsyn till vad jag håller på med

Visst skulle en rekursiv funktion fungera här, fast det är inget krav. Du skulle kunna parsa XML-filen till en stor Array och helt enkelt iterera över den från start till slut. Gör det som känns bäst

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Tack Denniz!

Teknocide: Jag har PHP-inlogg i övrigt men är det okej att skriva PHP i XML-filen? Jag trodde att den bara skulle innehålla XML-trädet. Men det är klart, kan jag lägga in sessionskoden är problemet löst antar jag. Ska prova med det.

edit: tar tillbaka detta underbegåvade förslag, kan såklart inte ha php-kod i ett .xml-dokument.

Egentligen skulle jag föredra att använda PHP med XML-et men alla exempel är i javascript och jag tänkte se om jag inte kunde få kläm på lite grundläggande AJAX också. Man verkar behöva göra XMLHttpRequesten i js.

Permalänk
Medlem

XML-filen ska precis som du tror enbart innehålla XML. Vad jag menade var att ett PHP-skript kan "hämta" datafilen ur en från webben oåtkomlig katalog och skicka den till klienten.
Om du inte är beroende av en AJAX-lösning med allt vad det innebär så tycker jag definitivt att du ska lösa problemet i PHP. Då hade du även kunnat ha känslig data i din XML-fil utan större problem, iom att din PHP-kod avgör vad som skickas till klienten.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Kan rekommendera SimpleXML om du vill lösa det hela med php.

Visa signatur

i7 920 | 12GB DDR3 | GTX 480 | GA-X58A-UD7 | 160GB SSD X25-M G2 | 1TB F3 HD103SJ | W7 64-bit | Mac Mini
Webb: bluekitestudios.com

Permalänk
Medlem

Teknocide: Nu är jag noob igen; hur löser man detta praktiskt? Ett sätt är förstås att lägga katalogen utanför själva webbkatalogen men det kan man inte på webbhotellet i fråga tyvärr. Finns det andra sätt? Kanske kan trolla ihop nåt med .htaccess...

save: Jag har inte tittat så mycket på andra klasser till PHP, kan man installera sånt på sitt webbhotell? Om man kan det ser det väldigt intressant ut. Jag har antagit att det inte går, lite förhastat kanske.

Permalänk
Testpilot

Det som skickas till klienten ska enbart innehålla XML men på serversidan kan du mycket väl ha PHP-kod i den.

Antingen döper du om dina XMP-filer till PHP så att webservern kör dom via PHP eller så säger du åt webservern att XML-filer också ska köras genom PHP.

Kör XML-filer genom att skapa en .htaccess-fil för Apache

AddType application/x-httpd-php .xml

Stoppa in lite PHP-kod i XML-filen (övrig text från Sweclockers RSS)

<item> <title><![CDATA[Fractal Desing Define R2]]></title> <link><![CDATA[http://www.sweclockers.com/forum/showthread.php?threadid=8827...]]></link> <pubDate><?=date()?></pubDate> <description>Chassin och nätaggregat</description> </item>

Du kan alltså högst upp i dina XML-filer kolla så att användaren är inloggad.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

Men gör inte det för guds skull. Då kan du lika gärna trycka in datan i en statisk array och strunta i allt vad XML heter.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Tack för alla tips, jag är snart redo att börja men har en sista fråga. Det är et här med XMLHttpRequest.

Jag har som sagt utgått ifrån W3Schools och de börjar alltid XML-andet med att skapa ett XMLHttpRequest-objekt som de sen läser in allt i. Så här: http://www.w3schools.com/xml/xml_http.asp

Är detta standard och något som det alltid är vettigt att göra, eller är det bara något som W3Schools gillar?
Jag tycker det ser användbart ut men skulle som sagt gärna undvika javascript just här.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Meat
Tack för alla tips, jag är snart redo att börja men har en sista fråga. Det är et här med XMLHttpRequest.

Jag har som sagt utgått ifrån W3Schools och de börjar alltid XML-andet med att skapa ett XMLHttpRequest-objekt som de sen läser in allt i. Så här: http://www.w3schools.com/xml/xml_http.asp

Är detta standard och något som det alltid är vettigt att göra, eller är det bara något som W3Schools gillar?
Jag tycker det ser användbart ut men skulle som sagt gärna undvika javascript just här.

Det är väldigt viktigt att förtydliga skillnaderna mellan dynamiskt genererade sidor (exempelvis PHP, JSP/Servlets, CGI) och av användaren dynamiskt efterfrågad data (AJAX). AJAX == Asynchronous Javascript And XML.
När en användare surfar in på en hemsida så skickas flera förfrågningar (HTTP-REQUESTs) till deras webserver för att ladda bland annat HTML och bilder. När användaren sedan klickar på en länk på sidan så repeteras processen.

Låt oss, för att ta ett fånigt exempel, säga att vi har en site med dikter där varje sida representerar ett verk. Skillnaden mellan RosorArRoda.html och KattenMusen10000.html är väldigt liten; menyer och grafiska element är identiska, det enda som skiljer dem åt är själva textinnehållet. Ändå måste flera nya förfrågningar göras mot webservern vid klicket på länken. Det är här AJAX kommer in i bilden.
Med AJAX är det möjligt att låta klienten efterfråga en specifik bit information på servern: När användaren klickar på länken så körs ett javascript. Scriptet gör en XMLHttpRequest mot ett PHP-script som returnerar en paragraf innehållande poesistycket. Javascriptet för sedan in denna information på rätt plats i den redan existerande hemsidestrukturen. Ett bra exempel är siten prisjakt.nu där AJAX används för att dynamiskt visa förslag medan användaren skriver i sökfältet. Läs mer här om du är nyfiken: http://sv.wikipedia.org/wiki/XMLHttpRequest

AJAX kommer med vissa brasklappar och är inte en nödvändighet. Om du exempelvis "bara" vill bearbeta XML-data och visa upp resultatet för en användare så gör du det server side. Detta innebär även som tidigare sagts att du kan gömma ditt XML-dokument från användaren eftersom denna aldrig kommer i direkt kontakt med det; dokumentet laddas överhuvudtaget inte ner; faktum är att du lika gärna kan ha en databas eller ren textfil som datakälla utan att användaren på något sätt märker skillnad.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Tack, det redde ut en massa som jag bara nästan fattat!

Då så, då är det bara att börja då nu när jag vet vilka tåtar jag ska dra i först.

Tack igen!

Permalänk
Medlem

Jag fortsätter fråga här i min gamla tråd eftersom det handla rom ungefär samma sak.

Det är det här med katalogen. Sen i höstas har jag fått snurr på XML åtminstone delvis och jag använder det med PHP (synd bara att alla exempel på w3schools använder javascript, finns det nån annan bra?) vilket känns rätt säkert. Jag lagrar filer i en katalog som jag htaccessat så att den är forbidden att browsa. Om man vet urlen till en fil i katalogen kan man komma åt den, men eftersom filnamnen är slumpmässiga har jag bestämt att risken att det ska hända är liten. Annars kan man se filerna om man är inloggad på sidan, då tar php-scriptet fram dem. Men nu tänkte jag lägga upp lite filer som har intuitiva namn och alltså går att gissa (om nån mot förmodan skulle bry sig).

Min fråga blir alltså i korthet: Hur göra så att phpscriptet kan ta fram filen, men inte en oinloggad surfare som råkar känna till filnamnet?

Permalänk
Medlem
Skrivet av Meat:

Min fråga blir alltså i korthet: Hur göra så att phpscriptet kan ta fram filen, men inte en oinloggad surfare som råkar känna till filnamnet?

Är man olidligt lat kan man ju döpa filen till något i stil med "Xsfdshgfsdkjhfgfdyu311414786fgf.kld" och se det so ett relativt säkert lösenord. Och sen aldrig exponera det filnamnet utåt utan alltid skicka XML-datan via auth-PHP-scriptet. Någon säger sägert att det är security by obscurity men så länge filnamnets säkerhet överstiger det krav som ställs för inloggningens säkerhet så ser jag inget problem i det annat än att det inte är en snygg lösning.

Permalänk
Medlem

Iofs... Men vore kul att veta hur man löser det snyggt

Permalänk
Testpilot

Som jag fattat det så ska ingen av filerna i katalogen läsas av någon besökare utan enbart av ett PHP-script (via exempelvis include)? du ska inte heller skicka vidare någon användare direkt till de filerna?

I din htaccess-fil kan du istället för att förbjuda browsande istället förbjuda hela katalogen genom att skriva detta:

deny from all

Även filer i den katalogen kommer då att vara oåtkomliga.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

Intressant! Ska kolla på det och se vad som händer i de olika hemliga mapparna. Tack!