22. september 2006 - 10:33Der er
32 kommentarer og 1 løsning
Fra MySQL til Flash
Hej Mester :)
Var lidt i tvivl om jeg skulle poste her, eller i PHP kategorien, men jeg gjorde mit valg. Jeg har en database med en masse tekster ... Siden skal være på flere sprog og den er i Flash.
Jeg ville høre hvordan du mener det bedst laves, med hensyn til at skifte sprog. Altså bare have dansk på engelsk på .dk domænet, og engelsk på .com eller lave en eller smart funktion på en måde, så man kun skal lave sitet 1 gang.
Og så vil jeg også høre hvordan man henter teksten ud fra databasen, og få smidt det ind i flash'en i et dynamisk textfelt eller lignende?
============================================================================ <?PHP //Først starter vi vores seesion og etablere herefter vores initierende variabler session_start(); $db_user = 'input-dit-eget'; $db_pass = 'input-dit-eget'; $brugernavn = $_POST['bruger']; //Denne lagrer brugernavnet, men fordi den bliver ændret senere, gemmes brugernavnet også i $nick $nick = $_POST['bruger']; //Dette er IKKE en fejl, vi bruger denne variabel til at gemme brugerens oprindelige brugernavn/nick $kodeord = $_POST['kode']; $email = $_POST['email']; $mail = $_POST['email']; //beregnet til at store den oprindelige mail
//Skaber forbindelse til vores database $connection = mysql_connect('localhost', $db_user, $db_pass); mysql_select_db('tribalroots_org', $connection);
while($dbstuff=mysql_fetch_array($result)){ $dbbruger = $dbstuff['brugernavn']; $dbmail = $dbstuff['email']; //Vi konvertere her vores strenge til upper case letters. På denne måde undgår vi at 2 brugere skaber profiler som basicly har samme //brugernavn. Eks: "jonas" og "JONAS" vil ikke kunne forkomme $dbbruger = strtoupper($dbbruger); $brugernavn = strtoupper($brugernavn); $dbmail = strtoupper($dbmail); $email = strtoupper($email); } //Nu tester vi først om brugernavnet er taget, derefter om emailen er taget. Er ingen af dem registreret, oprettes brugeren if ($dbbruger == $brugernavn){ $added=0; } else if ($dbmail == $email) { $added=1; } else { $query = "INSERT INTO heffer_users (id , brugernavn, kodeord, email) VALUES ('', '$nick', '$kodeord', '$mail')"; mysql_query($query); $added=2; } echo "&added=$added&";
Der er garenteret massere af fejl som du bør ændre, bruger ikke selv denne model mere, men har ikke lige umiddelbart nogen anden skabelon liggende, så håber denne "dutter"!
Jeg tænkte egentlig på, hvorfor skal der bruges SESSION i PHP filen?
Og hvis man bare skal hente en tekst fra en database ind i Flash, kan man så bare skrive i AS;
TextIn = new LoadVars(); TextIn.load("clever_content.php", TextIn, "POST")
Og så i PHP filen, hente det ud af DB og gemme det i en variabel som hedder TextIn, og så skulle den være hjemme? Eller er det mig som ikke helt har gennemskuet systemet endnu?
Ok, du mangler nogle få ting, i flashen skal du skabe reference PHP'en til dit tekstfelt. For neden har jeg lavet de 2 koder, som du kan se henter vi alt vores data fra PHP'en via "lvIn". I PHP'en skal du også huske at echo/print den data du ønsker sendt til flash. For at flash fatter at det er en variabel bruger vi &-tegnet (ampersand). Prøv med disse 2 og se om det ikke skulle virke nu. BTW, du har ret, der er reelt ikke noget behov for at starte en session i PHP'en! ;-)
==============AS================= lvOut = new LoadVars(); lvIn = new LoadVars(); lvOut.sendAndLoad("clever_content.php", lvIn, "POST");
Oh, forøvrigt, du kan sagtens nøjes med at bruge lvIn.load, som du havde gjort foroven. Det er bare mig der sidder her og koger i ordenlig omgang influenza, er ikke superskarp! :)
Sådan det hjalp sku en del :) Men, dog ikke helt. Det virker nu, når jeg kører det offline i Flash MX. Men lige så snart jeg smider det online på nettet, og går ind på .swf filen, så virker det ikke? Hmm.. Så er textfeltet bare blankt.
Hmmmm, dobbelttjek evt. sti til db, navn på "Nyheder" og "tekst". Husk også at se om du skulle ha brugt store bogstaver istedet for små og omvendt! (eks: "nyheder" istedet for "Nyheder").
Sådan, nu virker det :) Jeg ved ikke lige hvad fejlen var. Har umiddelbart ikke lige rettet i noget. Men pyt med det, som sagt virker det :)
Jeg tænkte dog lige på, hvordan får jeg Flash til at vise æ, ø og å? Lige så snart den støder på et af de bogstaver, stopper den med at printe resten af stringen ud.
Stort set, self. ikke lige midt inde i en funktion eller lign. Men prøv at smide den i førset frame, som den øverste linie actionscript! Hvis det ikke virker, så prøv at smide den i starten af den kodeblok vi er kommet frem til herinde, altså:
System.useCodepage=true; lvOut = new LoadVars(); lvIn = new LoadVars(); lvOut.sendAndLoad("clever_content.php", lvIn, "POST");
$db_database = "webster_diverse"; include ("include/mysql_connect.php");
$result = mysql_query("SELECT besked FROM guestbook") or die (mysql_error());
while ($data = mysql_fetch_array($result)) { $TextIn = $data["besked"];
$TextIn = utf8_encode($TextIn);
}
echo "&flashtext=$TextIn&";
?>
Kan ikke lige se fejlen.
Men faktum er at nu kan jeg slet ikke få det til at virke. Heller ikke på den anden måde, hvor det virkede halvt. Nu er textfeltet bare blankt. Hmm.. ;S
hmmm, ok, når du henter fra besked, så er det i et array! Hvis du skal sende en bestemt besked tilbage til flashen skal du først skrive hvilken en, eksempelvis:
echo "&flashtext=$TextIn[0]&";
Som du kan se foroven, jeg har tilføjet "[0]" for at indikere at det er den første besked du ønsker at sende!
Det virkede da ellers fint nok før, uden id angivelsen. Når man har sin echo uden for while sætningen, henter/printer den kun den nyeste besked ud fra DB. Nå men jeg prøver lige det som du foreslår.
Skulle det stadig ikke virke, så prøv med følgende koder, de virker for mig:
=============================FLASH================================== System.useCodepage = true; lvIn = new LoadVars(); lvIn.onLoad = function(success) { if (success) { _root.TextIn.text = lvIn.flashtext; } else { _root.TextIn.text = "fejl"; } }; // vi benytter uniq til at mindske chancen for at IE // ikke bare hiver tidl. data fra cachen! lvIn.load("clever_content.php?uniq"+random(99999)); stop();
==================================================================== Den ovenstående flashkode skal placeres i den frame hvori du ønsker at loade din data ind.
Tak for bug-searching. Det var self. den forkerte variabel som gjorde udslaget. Nu har jeg igen input i feltet :) Jeg havde dog stadig det samme problem med æ, ø og å. Men det har jeg nu løst ved at lave et array som erstatter aelig med æ og så videre.. Nu virker det helt fint :)
Mange tak for din hjælp :D Smid et svar, så du kan få dine point :D
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.