-
[RESOLVED] Is this because of Incorrect Datatype?
Which datatype should I be using to store xml String into my mySQL database? I tried using TEXT datatype. But my flash is unable to parse it.
I am not sure if this is because of incorrect datatype usage.
I keep getting "Error in Source Data" inside my flash textfield when the xml string is echo'd from php. I was able to trace this echo'd xml string in my output panel. But when I tried testing the same XML code(by copying xml string from the output panel and pasting into a new XML file in my hard disk) and load it through myxml.load() method, it works great...
This is the code I have in Flash(Cs3-As2)
Code:
var xmlLoadVars = new LoadVars();
xmlLoadVars.onLoad = function(suc) {
if (suc) {
if (this.statusmsg == "exists") {
var getBlogString = '<?xml version="1.0" ?>'+newline+this.blogentry;
myxml = new XML(getBlogString);
xmlparser(myxml);
trace("Loaded XML from SQL:\n\n");
} else {
showerrorlog(this.statusmsg);
}
} else {
showerrorlog("Connection Error. Unable to Login");
}
};
xmlLoadVars.uid = blogsource;
xmlLoadVars.sendAndLoad("myPhpFile.php",xmlLoadVars,"POST");
var myxml=new XML();
myxml.ignoreWhite = true;
function xmlparser(theXml) {
if (theXml.firstChild.nodeName == "noteblog_source" && theXml.firstChild.childNodes.length == 2) {
//trace("---------------------------------\n\n"+theXml+"\n\n\n\n---------------------------------");
blogurl.text = "login success!";
} else {
blogurl.text ="Error in Source Data"; //
}
}
This is my php Code:
Code:
<?php
$link3=mysql_connect("host","abcd","passwd");
if($link3){
if(mysql_select_db("mydb",$link3)){
$myquery3=mysql_query("SELECT * FROM mytable WHERE username='$_POST[uid]'");
$check_avail3=false;
while($row = mysql_fetch_array($myquery3)){
$check_avail3=true;
echo "statusmsg=exists";
echo "&blogentry=".$row['blogcontent'];
}
if(!$check_avail3){
echo "statusmsg=Invalid Login ID";
}
}else{
echo "statusmsg=Unable to connect to database, please try later";
}
}else{
echo "statusmsg=Server busy, please try later";
}
?>
Please suggest.
-
Bearded (M|G)od
For one, you're trying to mix XML and string outputs. That's weird. Either do all XML, or all string. And what I mean by that is your output may look something like:
Code:
statusmsg=exists&blogentry=<entry><blah>yay!</blah></entry>
From PHP, you can output raw XML and that's all you should be doing. Something like:
Code:
<?xml version="1.0" ?>
<response>
<status>1</status>
<blog>
<entries>
<entry>Hey, this is my blog!</entry>
<entries>
</blog>
</response>
-
Lovely
Silly me.. I will check that out.
Thank You
-
Not yet..
Hmm...
I changed the flash code to:
Code:
xmlLoadVars.onLoad = function(suc) {
if (suc) {
var getBlogString = '<?xml version="1.0" ?>'+newline+this;
myxml = new XML(getBlogString);
xmlparser(myxml);
trace("Loaded XML from SQL:\n\n");
}else{
trace("failed to load");
}
}
And in my php...
Code:
while($row = mysql_fetch_array($myquery3)){
$check_avail3=true;
echo $row['blogcontent'];
}
My output panel shows:
Code:
<?xml version="1.0" ?>
%3Cnoteblog%5Fsource%3E%0D%0A%3CBlogsettings%20isBlogTextSelectable=%27no%27%20BackgroundMp3Music%3D%27http%3A%2F%2F%2E%2Ecom%2Fam%2F%2Emp3%27%20BackgroundImage%3D%27http%3A%2F%2Fsos%2Enoaa%2Egov%2Fimages%2Ffullsize%2FLand%2FearthAtNight%2Ejpg%27%20ScaleBackgroundImage%3D%27no%27%20ShowBlogBorder%3D%27yes%27%20BlogColor%3D%27333333%27%20BlogTextColor%3D%27FF6666%27%20BlogTitleColor%3D%2733990%27%3E%0D%0A%3CMyProfile%20YourName%3D%27DeCOr%27%20YourEmail%3D%27something%40gmail%27%20ProfileImage%3D%27http%3A%2F%2Fcardboardmonocle%2Ecom%2Fblog%2Ffxsuits%2Fal1%2Ejpg%27%20ProfileColor%3D%27000000%27%20ProfileTextColor%3D%27999999%27%3E%3C%21%5BCDATA%5BHey%20dude%2C%20How%20is%20this%20cool%20profile%2E%3Cbr%2F%3E%3Cbr%2F%3E%3Cbr%2F%3E%3Cbr%2F%3E%0D%0A%3Ca%20href%3D%27http%3A%2F%2Fcardboardmonocle%2Ecom%2Fblog%2Ffxsuits%2Falien1%2Ejpg%27%3EThis%3C%2Fa%3E%20is%20the%20pic%0D%
....
......
.........
(goes on.....)
Last edited by e_tit; 10-09-2009 at 11:11 AM.
-
Bearded (M|G)od
Right, it's urlencoding your XML. That's why you should send back raw XML and not load it with LoadVars. Load it in with the XML class instead. Spit back the entire <?xml version="1.0" ?> string from PHP too, and sent the Content-type header to: text/xml.
-
How do i do that?
Should i include Content-type=text/xml? in php like this?
Code:
while($row = mysql_fetch_array($myquery3)){
$check_avail3=true;
header("Content-type: text/xml");
echo '<?xml version="1.0" encoding="UTF-8" ?>'.$row['blogcontent'];
}
In my Flash:
Code:
xmlLoadVars.onLoad = function(suc) {
if (suc) {
myxml.load(this)
//xmlparser(myxml);
trace("Loaded XML from SQL:\n\n");
}
} else {
showerrorlog("Connection Error. Unable to Login");
}
};
var myxml=new XML();
myxml.ignoreWhite = true;
myxml.onLoad = function(success) {
if (success) {
if (this.status == 0) {
xmlparser(this);
} else {
showerrorlog("Error in Source Data");
}
} else {
showerrorlog("Incorrect path. Please check");
}
};
I get Loaded XML from SQL: in my output panel.
And nothing shows up after that
-
Bearded (M|G)od
echo '<?xml version="1.0" encoding="UTF-8" ?>'.$row['blogcontent'];
That line is inside your loop, so you are having a new xml declaration for each entry. You also have improper XML structure now. You need some more DOM elements.
-
That loops only once. Its just to read blogcontent of one particular user... I even traced the output to confirm
I also tried changing the Collation from Latin to Utf-8 in my sql table
Now my flash code looks like this...
Code:
var getBlogString = this.blogcode;
myxml = new XML(getBlogString);
xmlparser(myxml);
function xmlparser(theXml) {
trace(theXml);
if (theXml.firstChild.nodeName == "noteblog_source" && theXml.firstChild.childNodes.length == 2) {
trace("WORKS");
}else{
trace("NOT WORKING");
}
I added <?xml version='1.0' encoding='UTF-8' ?> in the Original xml string which is in the database.
Php code:
Code:
while($row = mysql_fetch_array($myquery3)){
$check_avail3=true;
echo "blogcode=".$row['blogcontent'];
}
In my output Panel I get the complete xml string traced without any trouble. But I am unable to parse/access the nodes. When I copy paste this traced output into a seperate notepad file and load it through xml.onLoad(), I dont have trouble accessing the nodes
Last edited by e_tit; 10-10-2009 at 04:43 AM.
-
Got it working
Thanks Taco
Code:
var myxml=new XML();
myxml.ignoreWhite = true;
function xmlparser(theXml) {
if (theXml.firstChild.nodeName == "noteblog_source" && theXml.firstChild.childNodes.length == 2) {
blogurl.text = "login success!";
} else {
blogurl.text ="Error in Source Data";
}
}
myxml.onLoad = function(success) {
if (success) {
if (this.status == 0) {
xmlparser(this);
} else {
showerrorlog("Error in Source Data");
}
} else {
showerrorlog("Incorrect path. Please check");
}
};
myxml.load("myPhpFile.php?uid="+blogsource);
But is this the only way I can pass variable(uid) to my php if i am using xml.load() method?
Here "uid" is a variable that holds the username. Php file checks for this user name in database and echos back the blog content of that particular user.
[EDITED] I also have a password variable. Is there a better way to pass this variable to my php so that I get the XML echo'd back to flash all at the same time?
Last edited by e_tit; 10-10-2009 at 12:01 PM.
-
Bearded (M|G)od
You could use sendAndLoad to POST data to your PHP script.
-
yeah, but how do I get the xml string echo'd back to flash if I use LoadVars? It doesn't seem to work when I tried it before
-
Bearded (M|G)od
If you're loading XML, you should be using the appropriate XML classes. But to answer your question, when you're loading through LoadVars and NOT using raw XML, your strings get URL encoded, hence why you're getting all of the %3C & %5F mess. To fix that, Flash has a function unescape().
So if you're doing this:
Code:
var getBlogString = '<?xml version="1.0" ?>'+newline+this.blogentry;
Your new code would be:
Code:
var getBlogString = '<?xml version="1.0" ?>'+newline+unescape(this.blogentry);
-
Bearded (M|G)od
Oh, and incase I wasn't clear about the sendAndLoad: sendAndLoad is also a method of the XML class. http://www.adobe.com/support/flash/a...ionary856.html
-
Worked
Thank you
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|