Toon posts:

MySQl->PHP->XML->Flash

Pagina: 1
Acties:
  • 535 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Als ik een XML bestand in Flash laad, dan werkt alles goed.
Zodra ik een XML bestand genereer met PHP en dan inlaad, dan werkt het niet meer :?

In de browser zijn beide bestanden precies hetzelfde.

Ik heb ook nog geprobeerd om van
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="ISO-8859-1" ?>
te maken.

En de volgende header in PHP te gebruiken:
Header('Content-type: text/xml');

Maar niks werkt??
Wat doe ik verkeerd...

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

Hmm. Heb je dit probleem altijd? Want ik heb momenteel wel dat als je een xml file inlaad, dat hij het niet altijd leest om een of andere gekke redenen. Zelf gebruik ik het volgende en afgezien van het probleem hierboven perfect:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//
// @project   annie lennox cms/xml
// @date       24 april 2003
// @notice     all rights are OWNED by BMG Netherlands B.V.
//
include("./db.php");

//
// select all authors and show them...
$break = "\n";              // only for fun <g>

header( "Content-type: text/xml" );

print "<?xml version=\"1.0\" ?>" . $break;

$sql = "SELECT * FROM " . $db_prefix . "News WHERE `IsDeleted` = 'N' ORDER BY `ShowDate` DESC LIMIT 0, 5";
$db_result = mysql_query ( $sql ) or killMsg( "MySQL Error: " . mysql_error() );

$currdate = time();
print "<news>" . $break;
while ( $dbrecord = mysql_fetch_object( $db_result ) ) {
    $reldate = date( "j.m.Y", $dbrecord->ShowDate );
    $createdate = date( "j.m.Y", $dbrecord->CreateDate );
        
        print "<newsitem releasedate=\"" . $reldate ."\" creationdate=\"" . $createdate ."\" showlink=\"false\">" . $break;
        print "<header>" . StripInvalidXML( stripslashes($dbrecord->Name) ) . "</header>" . $break;
        print "<link>" . StripInvalidXML( stripslashes($dbrecord->SourceURL) )  . "</link>" . $break;
        print "<body>" . $break;
        print "<![CDATA[" . StripInvalidXML( stripslashes($dbrecord->Contents) ) . "]]>";
        print "</body>" . $break;
        print "</newsitem>". $break;
}
print "</news>" . $break;

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 08-07 11:19

Yo-han

nope.

/zeikmodus:

waarom gebruik je
PHP:
1
$sql = "SELECT * FROM " .....
Stuk netter :
PHP:
1
$sql = "SELECT Name,SourceURL, .. ,... FROM ".....

  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 27-06 10:54
dayoman schreef op 09 juli 2003 @ 13:59:
/zeikmodus:

waarom gebruik je
PHP:
1
$sql = "SELECT * FROM " .....
Stuk netter :
PHP:
1
$sql = "SELECT Name,SourceURL, .. ,... FROM ".....
Vind je? * is erg overzichtelijk :)


Anyway.. ik had zo'n beetje het omgekeerde probleem:
In Internet explorer maakte hij van de met PH gegenereerde XML een webpage die gewoon leeg was... en met m'n gewone bestand was het wel gewoon XML..
Maar verdere programma's enzo hadden geen moeite met de PHP->XML file. dus heb me er verder niet in verdiept..

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


  • Yo-han
  • Registratie: December 2001
  • Laatst online: 08-07 11:19

Yo-han

nope.

OxiMoron schreef op 09 July 2003 @ 14:03:
[...]

Vind je? * is erg overzichtelijk :)
En een stuk langzamer... ;)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

* is inderdaad alleen interessant als je ook werkelijk alle velden NODIG hebt. Zo niet dan ben je behoorlijk wat nutteloze DB-I/O aan het genereren. En overzichtelijk? Tja.. ik ZIE liever welke velden ik selecteer.. dan weet ik een jaar later, of iemand anders die de code ziet OOK direct welke velden geselecteerd/gebruikt worden ;)

Als je XML wilt genereren met PHP of een andere taal zul je ook vaak het mime-type aan de webserver toe moeten voegen. Hij zal de extensie .php als xml moeten kunnen herkennen.

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 21-08 10:46
Bosmonster schreef op 09 July 2003 @ 14:10:
Als je XML wilt genereren met PHP of een andere taal zul je ook vaak het mime-type aan de webserver toe moeten voegen. Hij zal de extensie .php als xml moeten kunnen herkennen.
Dat vang je toch af met een Content-Type header? :)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

McVirusS schreef op 09 July 2003 @ 14:28:
[...]


Dat vang je toch af met een Content-Type header? :)
Ook.. maar dat is niet altijd voldoende is mijn ervaring. Gister nog op mijn Windows bak Apache opnieuw geinstalleerd.. en mijn .php xml bestanden werkten pas toen ik zowel de juiste header had toegevoegd EN php als text/xml had opgegeven in mijn mime.types.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

wilde gok: doe je iets met de referrer in je PHP script?

Intentionally left blank


  • Yo-han
  • Registratie: December 2001
  • Laatst online: 08-07 11:19

Yo-han

nope.

Laat anders even het stuk code zien waarmee je de XML genereerd...

Verwijderd

Offtopic:
Wat ook een nadeel is van *:
Stel dat je een kolom tussenvoegd in je SQL database, dan kloppen de kolommen mogelijk niet meer en kan je op veel plekken in je source rij-waarden aanpassen

Verwijderd

Topicstarter
Sorry, ik moest ff weg.
Ik laat zo meer van me weten :)

Verwijderd

Topicstarter
@ alienfruit
Ik zie niks anders, alleen dat je geen encoding in je XML element gebruikt.
Als ik het weg haal doet die het nog niet ;)
Maar bedankt!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Verwijderd schreef op 09 July 2003 @ 14:47:
Offtopic:
Wat ook een nadeel is van *:
Stel dat je een kolom tussenvoegd in je SQL database, dan kloppen de kolommen mogelijk niet meer en kan je op veel plekken in je source rij-waarden aanpassen
Neuh.. want mysql_fetch_array is net zo fout als * in dit geval ;) Daar ziet een andere programmeur of ikzelf een jaar later ook niks meer in.

Gebruik gewoon mysql_fetch_assoc en gebruik de veldnamen.. wel zo duidelijk en niet gevoelig voor wijzigingen in je database of je query.

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

flash controleert niet de inhoud wat je over je xml object inlaadt...dus totnutoe alleen nog maar nutteloze replies imo. define 'werkt niet meer' en post aub wat meer (actionscript) code

"You're only as good, as what you did last week."


Verwijderd

Topicstarter
@ Bosmonster.
Als ik het XML bestand, dat wel werkt, opsla als een PHP bestand, dan werkt het wel...
Dan zal het toch niet aan de webserver liggen?

Verwijderd

Topicstarter
Ok de code.
Ik heb er inmiddels al in zitten wroeten, dus het een en ander kan een beetje verkracht zijn.

Ik laat zoveel mogelijk originele code zien. Hierin maak ik ook gebruik van een template. Ik heb alles uiteindelijk geprobeerd zonder template, maar dat werkte ook niet.

Actionscript:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
score = new XML();
score.ignoreWhite = true;
score.load("score.php");
score.onLoad = verwerkData;

function verwerkData(gelukt)
{
    if(gelukt)
    {
        trace("data verwerkt");
        
        testNieuwElement = new XML();
        testNieuwElement = score.firstChild.childNodes[0];      
        
        for (i=0; i<testNieuwElement.childNodes.length; i++)
        {
            trace(testNieuwElement.childNodes[i].attributes.naam)
        }
    }
    else
    {
        trace("xml dat heeft een probleempje.");
    }
}


score.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
include("inc_scripts/stekker.inc.php");
require("inc_scripts/yapter-v211.php");

$query = "SELECT id, naam, punten, idteam, idsponsor FROM spelers ORDER BY punten DESC";
$MQ = mysql_query($query) or die (error($query, $HTTP_SERVER_VARS['PHP_SELF']));

$tpl = new Template("score.tpl.xml");

while($row = mysql_fetch_array($MQ))
{
    $tpl->set("id", stripslashes($row[id]));
    $tpl->set("naam", stripslashes($row[naam]));
    $tpl->set("punten", stripslashes($row[punten]));
    $tpl->set("team", stripslashes($row[idteam]));
    $tpl->set("sponsor", stripslashes($row[idsponsor]));

    $tpl->parse("highscore");
}

$tpl->parse();
$tpl->spit();
?>


score.tpl.xml
code:
1
2
3
4
5
6
7
8
 <?xml version="1.0" encoding="UTF-8" ?> 
<score>
    <test>
        [BLOCK highscore]
        <spelers id="{id}" naam="{naam}" punten="{punten}" team="{team}" sponsor="{sponsor}" />
        [END highscore]
    </test>
</score>

Verwijderd

Topicstarter
oh,when? schreef op 09 July 2003 @ 14:56:
flash controleert niet de inhoud wat je over je xml object inlaadt...dus totnutoe alleen nog maar nutteloze replies imo. define 'werkt niet meer' en post aub wat meer (actionscript) code
Wat misschien ook wel handig is om te weten...
Als ik het XML bestand gebruik dan krijg ik de volgende trace:
data verwerkt
mneld
test

mneld en test zijn 2 test namen die in de db staan, dus het werkt.

Als ik het PHP bestand gebruikt traced flash wel dit:
data verwerkt

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

Hmm. Naar mijn weten lijkt die actionscript gewoon goed hoor! Wat je nog wel kunt proberen is om je in actionscript na je parsing code een stop() te plaatsen en in je onLoad-check het script pas door te laten gaan als de xml bestand succesvol is geparsed.

Om in te gaan in de reacties van mijn script, eerder gebruikte ik alle columns als output naar de xml-bestand, maar eindelijk toch veranderd. Maar ik heb het maar veranderd, jullie hebben allen gelijk :)

Verwijderd

Topicstarter
Ik neem aan, misschien helemaal verkeerd, dat het XML bestand pas geladen wordt als deze volledig geparsed is bij de onLoad functie.

Als dit niet gebeurd, wat moet ik dan doen?
Steeds het bestand opnieuw laden, totdat deze goed geparsed binnen komt?

Als er een half geparsed document binnen gehaald wordt, dan zou flash toch ook over zijn nek gaan wegens foute XML code?

Verwijderd

Topicstarter
Uhmm.. ik ben nog nieuw met de XML en FLASH combo en ik heb net de status functie ondekt :)

Nu krijg ik de melding -6:
-6 An XML element was malformed.

Kan iemand hier wat mee?

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

Ja. Dat betekend dat je een niet geldige xml-file hebt gestuurd. Zou je de output van je xml script eens kunnen posten?

Verwijderd

Topicstarter
Uhmm.. Ik ben er nog steeds niet uit :'(

De output van mijn xml file:
code:
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="ISO-8859-1" ?> 
<score>
    <test>
        <spelers id="3" naam="mneld" punten="150" team="0" sponsor="0" />
        <spelers id="2" naam="test" punten="100" team="0" sponsor="0" />
        <spelers id="1" naam="" punten="0" team="0" sponsor="0" />

    </test>
</score>

[ Voor 34% gewijzigd door Verwijderd op 28-07-2003 10:29 ]


Verwijderd

Ik ben nog niet zo`n xml->flash expert.

maar probeer het is om <test> </test> weg te halen,
en gewoon <spelers id="" etc.. ></spelers> te gebruiken..

Verder merkte ik, als je bijvoorbeeld in het stuk <spelers> etc.</spelers> ergens een harde enter in staat dat flash er ook mee kapt.

Verwijderd

Topicstarter
De test elementen heb ik er later aan toegevoegd.
Er staat idd witruimte na de laatste speler, maar dit wordt als het goed is door score.ignoreWhite = true geregeld.

Als ik de xml code 1 op 1 copieer en plak en daarna als score.php opsla, dan werkt het wel??

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Heb je een link naar je PHP file met output? En move die score.load eens helemaal naar onderen....

"You're only as good, as what you did last week."


Verwijderd

Topicstarter
God zij dank,
oh,when? is er eindelijk :P

Ik weet nu ongeveer waar het probleem zit.
Bij mij...

Iemand anders heeft de code getest en het werkt gewoon.
Dus waarschijnlijk ligt het aan mijn computer. Ik ga het ff ergens anders proberen.

Hou aub ff deze topic in de gaten ;)

Verwijderd

Topicstarter
Het ligt dus duidelijk aan mijn computer...

Online werkt het perfect.
Maar offline dus niet.

Weet iemand iets op dit rare probleem???

Ik heb nu de volgende actionscript:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
myXML = new XML(); 
myXML.ignoreWhite = true; 
myXML.onLoad = asloadXML;
myXML.load("score4.php");

function asloadXML(blnFileLoaded) {
    if (blnFileLoaded) {
        if (this.firstChild.nodeName.toUpperCase() == "SCORE") {
            trace("In");
            asLoadScore(this.firstChild);
        }
    }
}

function asLoadScore(xmlNode) {
    scoreNode = xmlNode.firstChild;
    trace("data verwerkt");
    trace(score.status);
    
    while (scoreNode != null) {
        if (scoreNode.nodeName.toUpperCase() == "SPELERS") {
            txtTest.htmlText = "<p><b>id:</b> "+scoreNode.attributes.id+"<br>";
            txtTest.htmlText += "<b>naam:</b> "+scoreNode.attributes.naam+"<br>";
            txtTest.htmlText += "<b>punten:</b> "+scoreNode.attributes.punten+"<br>";
            txtTest.htmlText += "<b>team:</b> "+scoreNode.attributes.team+"<br>";
            txtTest.htmlText += "<b>sponsor:</b> "+scoreNode.attributes.sponsor+"</p>";
            trace("id="+scoreNode.attributes.id);
            trace("naan="+scoreNode.attributes.naan);
            trace("puten="+scoreNode.attributes.punten);
            trace("team="+scoreNode.attributes.team);
            trace("sponsor="+scoreNode.attributes.sponsor);
            trace("----");
        }
        scoreNode = scoreNode.nextSibling;
    }
}


en devolgende php:
PHP:
1
2
3
4
5
6
7
<?php
header ("content-type: text/xml");
echo "<?xml version='1.0' ?>";
echo "<score>";
echo "<spelers id=\"3\" naam=\"Mels\" punten=\"150\" team=\"0\" sponsor=\"0\" />";
echo "</score>";
?>

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

cache waarschijnlijk.

"You're only as good, as what you did last week."


Verwijderd

Topicstarter
Ik ben ook al een paar keer van bestandsnaam veranderd?
Als dit een cache probleem zou zijn, hoe verhelp ik dit dan?

Verwijderd

Er staat idd witruimte na de laatste speler, maar dit wordt als het goed is door score.ignoreWhite = true geregeld.
helaas vind ik dit een errug brakke functtie, doe dat gewoon met php. Heel simpel alle \r\n en \t tjes vervangen met niets

[ Voor 4% gewijzigd door Verwijderd op 28-07-2003 16:14 . Reden: feit omgebogen naar mening ]


Verwijderd

Topicstarter
Het werkt nu wel met mijn virtuele server.
Alleen nog niet in FLash zelf...

Met
myXML.load("http://localhost/Ontwikkeling/Flash+XML/score3.php");
krijg ik deze foutmelding:
Error opening URL "http://localhost/Ontwikkeling/Flash+XML/score3.php"

En met
myXML.load("score3.php");
doet die niks.

Verwijderd

check moock`s xml preloader
http://www.moock.org/asdg/codedepot/

de truc; hij plakt er dan een datum achter;
this.load(url + "?cacheKiller=" + new Date());

edit:
deze opmerking is bedoeld voor de xml-cache bug

[ Voor 22% gewijzigd door Verwijderd op 28-07-2003 16:20 ]


Verwijderd

Topicstarter
Laatste fout ook opgelost.

CacheKiller aangezet.

  • pimlie
  • Registratie: November 2000
  • Laatst online: 18-08 13:15
Een quick workaround voor IE als hij een php bestand niet als xml ophaalt:

http://www.jouwhost.com/xml.php?IE=.xml

Werkt geheid ;)

(en time() er achter is ook een goede jah)
Pagina: 1