Tror det her er den rette sektion ![]()
Jeg sidder her og er ved at flikke et questionaire sammen i flash, hvor man bliver stillet et spørgsmål, vælger en radio button, klikker ok og kommer så til det næste spørgsmål.
Jeg er bare kommet i tvivl om hvordan man kan gemme dataen fra svarene. Jeg havde tænkt mig at hvis folk fx svarer "ja", så vil en variabel i et XML dokument bliver forøget med +1. Men husker XML rent faktisk resultatet af variabler? Og kan man hente en variabel fra et XML dokument ind i flash uden at man bliver nødt til at "nulstille" variablen?
Og gør jeg i det hele taget bare det hele sværere for mig end det bør ved at bruge Flash til det her? Findes der et bedre alternativ?
14 kommentarer
Hej C.
Blot for at være sikker på hvad det er du mener, så er her hvad jeg forstå du siger:
Du har et XML dokument som ligger på serveren - denne fil henter hver bruger/client sin egen kopi af, og viser i form af en række spørgsmål (aka old school spørgeskema). Det du så spørger om er, om du kan sætte en variabel direkte i XML'en.
Ja, det kan du godt - men som du måske kan læse af netop nævnte, vil det kun være i den lokale kopi, netop denne bruger har hentet (jeg antager at det du vil er at registerere på serveren, hvor mange der har svaret "ja" til x, og "nej" y etc i "hoved XML filen"). Det du i min bedste overbevisning har brug for er en meget simpel database - du kunne godt lave to linjer kode på serveren (f.eks. i php) der opdatere XML dokumentet MEN hvad hvis to brugere svarer på samme tid? - og begge beder serveren om at skrive deres svar ned i XML dokumentet - så vil det være sidste skrivning der gælder - altså kan du potentielt miste data - hvilket vil gøre resultatet mindre nøjagtigt.
Jeg ved ikke hvor mange brugere du skal have til at svare, men der er her på FlashForum.dk en række tutorials omkring php og mySQL og samsplil med Flash - hvilket er MEGET let at lave - så jeg tror du vil komme længst med en simpel database struktur der lige plusser en enkelt mere til en svarmulighed.
HVIS du nu absolut ikke vil lege med databaser, så kan du, og det er måske ikke den kønneste løsning, vælge at gemme hele dokumnetet ned igen - som et unikt XML dokument - i eksemplet altså tage imod hele brugerens besvarelse som et dokument du gemmer under et unikt f.eks. tids-stemplet navn - så du ender op med en masse strukturelt ens XML dokumenter, der alle indeholder deres unikke kombination af svar. Disse vil du så kunne hente ind i en admin Flash app og samle scoringer på - (i abstrakt forstand vil du have lavet din egen 2 touple database, hvor hver filnavn er et ID og hver XML streng er celleværid)
Anyway giv los, og held og lykke med det.
Cheers
Asger
Tak for svaret. Det er godt der er nogen der har styr på det
Jeg bliver så nok nødt til at grave de tutorials frem. Jeg har aldrig rigtig sat mig ind i PHP (hvilket er en skam i betragtning af at jeg skulle være multimedie designer), men jeg er ikke bange for at lære noget nyt.
Så man må håbe jeg kan hitte ud af noget
*Edit*
Alternativt, kunne jeg så ikke gemme svarene efterhånden som de bliver indtastet i variabler, og så i sidste øjeblik loade XML'en med sine variabler, lægger XML'ens variabler og flashen's variabel værdier sammen, og så gemme XML filen igen? Det burde vel forhindre at der er nogen konflikt mellem brugere, medmindre de trykker i samme sekund.
Desværre ser hele databasen tingen lidt for kompliceret ud til at jeg lige kan sætte mig ind i det, da det lidt er hastearbejde det her. Kan ikke rigtig finde nogen steder der forklarer noget så simpelt som at bare forøge en værdi i en database, så jeg må nok holde mig til den "beskidte" metode.
Hej C.
Udfordringen ændre sig ikke, ved at du venter til sidst.
(jeg forstår at du mener at hente XML op i Flash, beregne, og så sende ned igen - uanset, så kunne stepsne også være holdt overvejende på server siden, med samme problemstilling)
Forestil dig det tager 1 sekund at hente XML'en fra serveren når svarene skal lægges sammen, så bruger Flash 1 sekund på at sammenlægge brugerens svar til de hentede data, og så tager det 1 sekund at sende XML'en tilbage til serveren, som så skal skrive den nye XML ned som den "nye fil" der nu bruger - denne sidste handling tager også et sekund (tiderne er sat til et sekund for eksemplets skyld).
Bruger A er blevet færdig, og starter nu med at hente XML fra serveren - klokken er 00:00:00, et sekund senere er B færdig, hun starter også med at hente XML'en fra serveren - klokken er 00:00:01. Det samme sker for C endnu et sekund senere, her er klokken 00:00:02 - da C's data ankommer fra serveren er klokken 00:00:03, I samme øjeblik er A's XML (lad os kalde det XMLa da det er data der nu er unik for A, da B og C har anden data) ankommet til serveren - A's data skrives til XML filen, som nu har XMLa som "standard" data. I samme øjeblik er B's data ankommet til Serveren; XMLb disse skrives nu ned som den "rigtige" data, samtidig med at XMLc er på vej.
Altså vil der når dette flow er ovre være gået data tabt.
Som nævnt, så ser jeg en af de få muligheder du har, hvis du vil helt uden om database, og nøjes med f.eks. php, at skrive hver besvarelse ned som en fil (XMLa, XMLb, XMLc) og så med et simpelt php script samle alle filerne sammen, enten behandle dem på serveren, eller (hvis du er stærkere på flash siden) sende dem til Flash og lægge det hele sammen til sidst.
Du kan også kigge steder som her, efter simple database eksempler - så selvom det er en hasteopgave, så kommer du nok ikke uden om at skulle lære noget nyt denne gang
http://www.kirupa.com/developer/actionscript/flashphpxml_integration.htm
http://gotoandlearn.com/play?id=20
Held og lykke med projektet.
Cheers
Asger
Jo tak. Jeg er tilbage ved database muligheden igen, men de har ikke ligefrem gjort det nemt for folk at sætte sig ind i det. Prøver at installere både mySQL og phpMyAdmin lige nu, og instruktionerne passer som håret på en svensker.
Jeg ved at min server både kan køre php og mysql, tricket er bare lige at få dem til at forbinde til serveren, og jeg finder dokumentationen til at være meget hård kost at læse.
Okay det går lidt nemmere nu. Har både mySQL og phpMyAdmin oppe og køre. Nu skal jeg bare have fundet en måde at grave variabler ud af flash og data fra mySQL på samme tid, lægge dem sammen og gemme dem igen ved hjælp af PHP scripting.
Godt at høre det går den rigtige vej.
Jeg sidder selv meget sjældent med PHP, men det lyder til at det er få linjer du skal have skrevet - har du set både "Simpelt backend system..." og "amfphp mySQL" vidoerne? Kunne kun forestille mig at du der ville få vist hvordan du får connectet mellem php og mySQL, og hvordan du kan sende data frem og tilbage, samt hente/gemme data i databasen.
Cheers
Asger
Ye jeg har set dem. Backend systemet er ikke så brugbart i mit tilfælde, da det er mere en brugsanvising til et custom program. Har også set en masse af videoerne på gotoandlearn.com, der dog har det problem at en del af dem er så gamle at de er skrevet i as2, hvilket er lidt problematisk for mig der kun kan as3.
Problemet er ikke så meget længere at hente data ind i PHP scriptet fra MySQL databasen, og få variablerne fra flash in i PHP scriptet. Problemet er at finde en måde at kombinere de forskellige værdier med hinanden.
F.eks. vil værdierne der kommer ud af flash være et array med 10 værdier, eller 10 variabler med hver sin værdi, mens mySQL kommer med et table.
Okay, nu har jeg kæmpet med dette lille problem de sidste 2 dage, så jeg håber lidt der er nogen der hvordan man gør det.
Jeg har brug for at vide hvordan man tager en variabel i flash, og eksporterer den til et PHP script, der dernæst læser den variabel ind i en mysql_query der lægger den sammen med en celle i databasen.
Jeg har allerede queryen på plads:
mysql_query("UPDATE DataTest SET Yes = Yes + $Variabel WHERE QuestionID = 1");
Men jeg kan simphelthen ikke finde en metode til at få en simpel variable med værdien "1" eksporteret fra flash til php. Jeg har prøvet med alle mulige $_POST og $_GET metoder, og hvis det endeligt virker, så kræver scriptet at man rent faktisk loader siden med PHP scriptet, for at få det til at execute, men jeg skal have det til at execute uden at jeg behøver at loade siden.
Er der slet ikke nogen der kender noget til PHP og flash her?
...sidder du med det i as1/2 eller as3?
AS3 er det eneste jeg ved. Gør mig lidt handicappet da jeg ikke kan gøre bruge af alle de gamle AS2 tutorials som stadig ligger overalt på nettet.
Så hvis du sender med post, så vil en variabel fra Flash:
...ender sådan her i PHP
Nu har jeg prøvet at bruge din kode, og på trods af den meget simple kode, så får jeg af en eller anden grund hele tiden den her fejlmedelelse:
Error opening URL 'http://www.artbysunesen.com/ExamProject/test3.php'
Error #2044: Unhandled ioError:. text=Error #2032: Stream Error. URL: http://www.artbysunesen.com/ExamProject/test3.php
at DataSendTest2_fla::MainTimeline/frame1()[DataSendTest2_fla.MainTimeline::frame1:8]
*Edit*
Lidt tættere på nu. Lige nu har jeg følgende kode i Flash
Den bruger jeg med følgende kode i PHP
Jeg har uploaded min flash på en HTML side. php koden virker stadig ikke som den skal, den lægger ikke flash variablen sammen med værdien fra "Yes" tabellen.
Men det interessante er at hvis jeg manuelt skriver
$q1value1 = '2';
i mit php script, så virker scriptet fint, og lægger værdien 2 til "yes" i databasen. Og den gør det også når jeg refresher den HTML side hvor min flash fil ligger. Det betyder altså at Flash filen får php scriptet til at execute, men mine variabler fra flash kommer af en eller anden grund ikke ind i php scriptet.
Nu prøver jeg så bare at finde ud af, hvorfor kommer de ikke det?
Okay, nu har jeg endelig løst problemet. Det har tilsyneladene været en kombination af at når flash bruger POST metoden til at sende data, så skal php ligeledes bruge $_POST for at modtage den. Derudover, så forventer flash at få et svar tilbage der indeholder både en variabel og en værdi. Det "echo"'ede jeg ikke, så flash blev tosset på mig.
I alle tilfælde så ser den funktionelle test kode sådan her ud:
og php
puha. Det tog mig så også bare lige 4 dage og flere hundrede sider internet ressourcer at få regnet det problem ud. Nu mangler jeg så bare endelig at få bygget det questionaire
Du skal have mange tak for den tid du postede i at prøve at hjælpe mig FlashGer. Måske man skulle lave en lille tutorial ud af det her en dag, så andre ikke kommer til at sidde med ørerne i maskinen ligesom mig.
Hej Cruiser.
Super skønt at høre at du har fået det hele til at virker - så du kan få afleveret dit eksamensprojekt
Ja, når du sender med POST så ender alle variablerne i php's super-globale POST array (og lige ledes med GET - så du kan ikke hente dem du blandet - men det oplevede du jo)
Flash behøver ikke noget svar tilbage - med mindre du gerne vil aflevere et svar til klienten om at der er gået fint. Jeg tror at hvis du fjerner "echo" helt, vil du opleve at det stadig virker - dog bliver din "complete" nok ikke kaldt.
Der er ikke noget så godt som når man selv har knækket en case, som du har her, så stort tillykke med et!
Cheers
Asger