Volledige versie bekijken : php => xml => flash
davyvh
%Europe/Berlin %941 %2005, 23:36
Hoy,
Ik probeer een MySQL database in te laden in flash en alle gegevens om te zetten naar een aantal array's om later gemakkelijk te gebruiken.
Hierbij maak ik gebruik van php die ik omzet naar een xml zodat het inladen in flash wat overzichtelijker gaat.
De bedoeling is dus om de sql in xml vorm weer te geven.
klik hier voor de php pagina (http://street-racers.rsdd.nl/auto.php)
Zoals jullie zien, lijkt dit niet echt op een zuivere xml vorm...
Als ik dan met volgend as de childnodes probeer te tellen, geeft de trace 0 aan...
var xml = "http://street-racers.rsdd.nl/auto.php";
showroom = new XML();
showroom.ignoreWhite = true;
showroom.load(xml);
showroom.onLoad = function(){
root = this.firstChild;
trace(root.childNodes.length);
}
Hieronder de php:
<?
include("server.php");
$query = mysql_query("SELECT * FROM sr_auto order by id ASC") or die (mysql_error());
$showroom .= "<showroom>";
while ($record = mysql_fetch_object($query)) {
$showroom .= "<carId id=".$record->id.">";
$showroom .= "\n";
$showroom .= "<carName>".$record->naam."</carName>";
$showroom .= "\n";
$showroom .= "<carPrijs>".$record->prijs."</carPrijs>";
$showroom .= "\n";
$showroom .= "<carVermogen>".$record->vermogen."</carVermogen>";
$showroom .= "\n";
$showroom .= "<carAcceleratie>".$record->acceleratie."</carAcceleratie>";
$showroom .= "\n";
$showroom .= "<carSnelheid>".$record->snelheid."</carSnelheid>";
$showroom .= "\n";
$showroom .= "</carId>";
}
$showroom .= "</showroom>";
echo $showroom;
?>
Wat doe ik verkeerd? en hoe komt het dat de trace 0 aangeeft en ik geen variabelen kan zien in flash?
Groeten,
Davy
Dauntless
%Europe/Berlin %954 %2005, 23:53
Je doet niets verkeerd; het werkt perfect, en ik krijg een mooie 16 in m'n output scherm :).
Ps: Tip: SEPY heeft een XML lezer voor flash zodat je maar je node moet aanklikken en hij geeft je het pad :).
Hm, dat is dus als ik hem lokaal test... Als ik jouw file test klopt het idd niet :). Da's natuurlijk wat anders... 'k zal nog even verder zoeken en dan hier posten :).
Roenes
%Europe/Berlin %980 %2005, 00:31
Maak eens van je onLoad dit:
showroom.onLoad = function(success){
if(success)
{
root = this.firstChild;
trace(root.childNodes.length);
}
else trace("Fout in het laden");
}
Aangezien je moet checken of je data goed binnenkomt. Al kan ik me niet voorstellen dat het hieraan ligt. Kan het misschien te maken hebben met het moeten escapen van characters? (gokje hoor) :)
davyvh
%Europe/Berlin %982 %2005, 00:34
Bedankt Roenes,
Kheb het ondertussen al met Dauntless opgelost...
$showroom .= "<carId id=".$record->id.">"; deze regel is verwijderd en kheb er een gewone childnode van gemaakt ( <auto> ... </auto>) id heb ik dan appart geplaatst binnen <auto></auto>.
Flash kon vanaf dan ineens wel de lengte berekenen...
Ik begrijp alleen niet waarom het wel gaat zonder argumenten en niet met...
Weet iemand dit?
Dauntless
%Europe/Berlin %987 %2005, 00:42
Z'n XML file was corrupt, z'n AS is in orde. En je moet geen if(success) of zo gebruiken, maar het is natuurlijk wel aan te raden :). 's Al leuk dat SEPY me verteld dat de xml corrupt is, nu moet hij nog de fout leren te vinden :p.
Roenes
%Europe/Berlin %993 %2005, 00:50
Z'n XML file was corrupt, z'n AS is in orde.Als ik in de bron van z'n php bestand keek en die zooi kopieerde in een leeg bestandje en dat opsloeg als xml bestand dan werd die gewoon geparsed in IE zonder foutmelding :eek:
En je moet geen if(success) of zo gebruiken, maar het is natuurlijk wel aan te raden :).Klopt het moet niet maar is wel zo makkelijk. Anders weet je alleen dat je respons binnenkrijgt van de server maar niet of je de data ook binnenkrijgt. In dit geval zou het dus kunnen zijn dat je wel een respons krijgt maar geen data waardoor je trace niet klopt... :)
//Edit
Kan het niet zijn dat de regel met attributen niet werkt omdat er geen "" staan om de waarde van het attribuut? (of hoeft dat niet perse, net zoals bij html?)
Dauntless
%Europe/Berlin %996 %2005, 00:54
//Edit
Kan het niet zijn dat de regel met attributen niet werkt omdat er geen "" staan om de waarde van het attribuut? (of hoeft dat niet perse, net zoals bij html?)
Weer goed gedacht! (grr, moet ik het wéér toegeven :D).
Quote Styles, "female" or 'female'?
Attribute values must always be enclosed in quotes, but either single or double quotes can be used. For a person's sex, the person tag can be written like this:
En met sepy kan ik rechtstreeks een url openen waardoor sepy hem dus bekijkt zoals flash hem zou bekijken, en die zei dat de xml niet juist was.
Roenes
%Europe/Berlin %998 %2005, 00:58
Weer goed gedacht! (grr, moet ik het wéér toegeven :D).Blijft toch leuk om te horen :p
latino
%Europe/Berlin %500 %2005, 13:00
wat is SEPY?
#davyvh : kun je je goede php eens laten zien; dus hoe je het opgelost hebt?
Roenes
%Europe/Berlin %502 %2005, 13:03
wat is SEPY?Een externe editor voor onder andere AS. Ik heb em zelf ook maar gebruik em de laatste tijd erg weinig omdat ik zelf nooit meer met AS bezig ben. Maar een externe editor is zeker aan te raden als je veel met AS gaat doen/doet. :)
davyvh
%Europe/Berlin %510 %2005, 13:14
@ Latino: Hier is hij
Ik heb dus gewoon $showroom .= "<carId id=".$record->id.">"; opgesplitst in een gewone Node die ik <auto> heb genoemd, en kheb nog een apparte childnode er in geplaatst met de ID er in.
<?
include("server.php");
$query = mysql_query("SELECT * FROM sr_auto order by id ASC") or die (mysql_error());
$showroom = "<showroom>";
while ($record = mysql_fetch_object($query)) {
$showroom .= "<auto>";
$showroom .="<carId>".$record->id."</carId>";
$showroom .= "\n";
$showroom .= "<carName>".$record->naam."</carName>";
$showroom .= "\n";
$showroom .= "<carPrijs>".$record->prijs."</carPrijs>";
$showroom .= "\n";
$showroom .= "<carVermogen>".$record->vermogen."</carVermogen>";
$showroom .= "\n";
$showroom .= "<carAcceleratie>".$record->acceleratie."</carAcceleratie>";
$showroom .= "\n";
$showroom .= "<carSnelheid>".$record->snelheid."</carSnelheid>";
$showroom .= "\n";
$showroom .= "</auto>";
}
$showroom .= "</showroom>";
echo $showroom;
?>
latino
%Europe/Berlin %522 %2005, 13:32
ahh..ok vet thanks..enne lukt het ook als je auto weglaat? of showroom? volgens mj moe tdat ook lukken?
davyvh
%Europe/Berlin %527 %2005, 13:39
enne lukt het ook als je auto weglaat? of showroom? volgens mj moe tdat ook lukken?
dan klopt de xml structuur toch niet meer?
Zo is de structuur nu:
<showroom>
<auto>
<id>1</id>
</auto>
<auto>
<id>2</id>
</auto>
</showroom>
en jij wil er dit van maken?:
<showroom>
<id>1</id>
<id>2</id>
</showroom>
latino
%Europe/Berlin %553 %2005, 14:16
hehe ik vat hem, maar ik dacht hoe weet die dan welke auto hij moet hebebn dus ik dacht dan moe tje <auto id=$iets> doen
davyvh
%Europe/Berlin %560 %2005, 14:26
hehe, dat wordt dus m'n volgend probleem... ik ga niet weten hoe ik een bepaalde auto moet hebben...
$showroom .= "<carId id=".$record->id.">"; dit had ik eerst gedaan, en daar zat de fout dus in...
latino
%Europe/Berlin %563 %2005, 14:31
misshien beide? dus zowel in de auto al in de child?
zoiets
$showroom = "<showroom>";
while ($record = mysql_fetch_object($query)) {
$showroom .= "<auto id=".$record->id." />";
$showroom .="<carId>".$record->id."</carId>";
//etc
$showroom .= "</auto>";
}
$showroom .= "</showroom>";
davyvh
%Europe/Berlin %568 %2005, 14:38
ja! nu hebbek de fout echt gevonden...
$showroom .= "<auto id=\".$record->id.\">";
Door het plaatsen van de backslashes is alles in orde gekomen en kan flash wel de childnodes terug tellen. Ook kan ik nu door <auto> door het id uniek te maken 1 bepaalde auto oproepen...
latino
%Europe/Berlin %573 %2005, 14:46
Ook kan ik nu door <auto> door het id uniek te maken 1 bepaalde auto oproepen...
----
?
wat is nu je php en xml script?
davyvh
%Europe/Berlin %581 %2005, 14:57
de id is dus in de node auto geplaatst. De manier die ik daar eerst voor gebruikte is dus fout
$showroom .= "<carId id=".$record->id.">"; wordt
$showroom .= "<auto id=\"$record->id\">";
in deze (http://street-racers.rsdd.nl/auto.php) source vindt je de xml
<?
include("server.php");
$query = mysql_query("SELECT * FROM sr_auto order by id ASC") or die (mysql_error());
$showroom = "<showroom>";
while ($record = mysql_fetch_object($query)) {
$showroom .= "<auto id=\"$record->id\">";
$showroom .="<carId>".$record->id."</carId>";
$showroom .= "\n";
$showroom .= "<carName>".$record->naam."</carName>";
$showroom .= "\n";
$showroom .= "<carPrijs>".$record->prijs."</carPrijs>";
$showroom .= "\n";
$showroom .= "<carVermogen>".$record->vermogen."</carVermogen>";
$showroom .= "\n";
$showroom .= "<carAcceleratie>".$record->acceleratie."</carAcceleratie>";
$showroom .= "\n";
$showroom .= "<carSnelheid>".$record->snelheid."</carSnelheid>";
$showroom .= "\n";
$showroom .= "</auto>";
}
$showroom .= "</showroom>";
echo $showroom;
?>
latino
%Europe/Berlin %592 %2005, 15:13
gelukkig maar :)
Roenes
%Europe/Berlin %613 %2005, 15:43
ja! nu hebbek de fout echt gevonden...
$showroom .= "<auto id=\".$record->id.\">";
Door het plaatsen van de backslashes is alles in orde gekomen en kan flash wel de childnodes terug tellen.En dat was wat ik hier zei:
//Edit
Kan het niet zijn dat de regel met attributen niet werkt omdat er geen "" staan om de waarde van het attribuut? (of hoeft dat niet perse, net zoals bij html?):)
Maar nog iets anders: je hebt nu dit
$showroom .= "<auto id=\"$record->id\">";
$showroom .="<carId>".$record->id."</carId>";die carId node kan er nu dus tussenuit want anders heb je 2x dezelfde info staan. Dat is een beetje overbodig :)
Dauntless
%Europe/Berlin %620 %2005, 15:53
En dat was wat ik hier zei:
Ja, het was nadat ik jouw tip had gelezen dat ik hem gezegd had dat hij die " kon escapen met de backslash :). Dus alle eer komt jou toe ;)
davyvh
%Europe/Berlin %877 %2005, 22:03
En dat was wat ik hier zei:
Excuses Roenes, maar ik spreek (nog) geen vaktaal :p
die id regel is inderdaad overbodig... maar die moest ik nog aanpassen...
Als ik die direct weg had gedaan, dan klopte m'n arrays niet meer omdat de childNodes dan allemaal op zouden schuiven.
dioneo
%Europe/Berlin %576 %2005, 14:50
overigens mis ik de XML declaratie bovenaan.
<?xml version="1.0" ?>
Het zou zonder ook wel werken, maar eigenlijk zou je die header (en de
header("content-type:text/xml");
fileheader) moeten toevoegen. Of had je die ff niet meegepost?
davyvh
%Europe/Berlin %590 %2005, 15:09
Als ik die xml version="1.0" ertussen gooi, dan geeft hij een syntax error :s
Maar die content-type, maakt het geheel echt heel wat overzichtelijker;
Kijk hier maar: http://street-racers.rsdd.nl/auto.php
Bedankt hiervoor!
Groeten,
Davy
dioneo
%Europe/Berlin %597 %2005, 15:20
ook hier moet je de aanhalingstekens escapen, hetzij door de te printen string in enkele aanhalingstekens te vatten, danwel door een backslash te gebruiken bij je dubbele aanhalingsteken
echo '<?xml version="1.0" ?>'; // of dit
echo "<?xml version=\"1.0\" ?>"; // of dit
Let wel dat je deze regel ook echt in php moet printen, als je die buiten je php wilt zetten denk je webserver dat t om php code gaat vanwege de <?
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.