Avatar billede Slettet bruger
25. august 2004 - 14:32 Der er 6 kommentarer og
1 løsning

problem med header

Nedenstående kode er sakset fra nettet. Det skal bruges til at hive data ud  af en MySql-db og omdanne dem til XML. Det virker bare ikke. Jeg bliver ved at få fejl på linie 1:

XML Parsing Error: syntax error
Location: http://localhost/PhpMappe/dbtoxml.php
Line Number 1, Column 1:

-------------kode-----------------------
<?php
header ("Content-type: text/xml");
    $host = "localhost";
    $user = "root";
    $pass = "";
    $database = "lykke";
   
    $linkID = mysql_connect($host, $user, $pass) or die("Could not connect to
    mysql_select_db");
   
    $query = "SELECT * FROM lykketabel ORDER BY id";
    $resultID = mysql_query($query, $linkID) or die    ("Data not found, stupid.");
   
    $xml_output = "<?xml version=\"1.0\"?>\n";
    $xml_output = "<entries>\n";
   
    for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){
        $row = mysql_fetch_assoc($resultID);
        $xml_output .= "\t<entry>\n";
        $xml_output .= "\t\t<id>" . $row['id'] . "</id>\n";
        // Escaping illegal characters
        $row['navn'] = str_replace("&", "&", $row['navn']);
            $row['navn'] = str_replace("<", "<", $row['navn']);
            $row['navn'] = str_replace(">", "&gt;", $row['navn']);
            $row['navn'] = str_replace("\"", "&quot;", $row['navn']);
        $xml_output .= "\t\t<navn>" . $row['navn'] . "</navn>\n";
        $xml_output .= "\t</entry>\n";
    }   
    $xml_output .= "</entries>\n";
   
    echo $xml_output;
   
?>

Er der nogen der kan se hvad der er galt?

Alternativt, hvis nogen har en anden kode der kan foretage samme transformation, og som virker, vil jeg gerne se den.

Jeg bruger Red Hat og PHP version 4.2.2
Avatar billede chries Nybegynder
25. august 2004 - 14:37 #1
Jeg tror dit problem er at koden der outputtes ikke er xml valid. prøv at fjerne header ("Content-type: text/xml"); og tjeck om der er ok.

desuden mangler der:
    $xml_output = "<?xml version=\"1.0\"?>\n";
    $xml_output = "<entries>\n";
->
    $xml_output = "<?xml version=\"1.0\"?>\n";
    $xml_output .= "<entries>\n";
Avatar billede jpvj Nybegynder
25. august 2004 - 14:37 #2
Det ser ud som om du prøver at køre din PHP fil igennem en XML parser.

Fejlen
XML Parsing Error: syntax error
Location: http://localhost/PhpMappe/dbtoxml.php
Line Number 1, Column 1:

angiver at der er en XML parser fejl i din PHP fil.

Er meningen ikke, at PHP filen skal lave noget XML output, som så skal parses??
Avatar billede jpvj Nybegynder
25. august 2004 - 14:38 #3
Hmm... der dummede jeg mig vist - glem mit svar!
Avatar billede Slettet bruger
25. august 2004 - 14:54 #4
Min kode  ser nu således ud( mindre rettelser):

<?php
header ("Content-type: text/xml");
    $host = "localhost";
    $user = "root";
    $pass = "";
    $database = "lykke";
   
    $linkID = mysql_connect($host, $user, $pass) or die("Could not connect to
    mysql_select_db");
   
    $query = "SELECT * FROM lykketabel ORDER BY id";
    $resultID = mysql_query($query, $linkID) or die    ("Data not found, stupid.");
   
    $xml_output = "<?xml version=\"1.0\"?>\n";
    $xml_output = "<entries>\n";
   
    for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){
        $row = mysql_fetch_assoc($resultID);
        $xml_output .= "\t<entry>\n";
        $xml_output .= "\t\t<id>" . $row['id'] . "</id>\n";
        // Escaping illegal characters
        $row['navn'] = str_replace("&", "&", $row['navn']);
            $row['navn'] = str_replace("<", "<", $row['navn']);
            $row['navn'] = str_replace(">", "&gt;", $row['navn']);
            $row['navn'] = str_replace("\"", "&quot;", $row['navn']);
    $xml_output .= "\t\t<navn>" . $row['navn'] . "</navn>\n";
    $xml_output .= "\t</entry>\n";
    }   
   
    $xml_output .= "</entries>";
   
    echo $xml_output;

---------------
>-- chries: hvad mener du med:
desuden mangler der:
    $xml_output = "<?xml version=\"1.0\"?>\n";
    $xml_output = "<entries>\n";
->
    $xml_output = "<?xml version=\"1.0\"?>\n";
    $xml_output .= "<entries>\n";

Hvis du mener det skal sættes ind i min kode, hvor er det så?

Det hjælper ikke at fjerne headeren.

Hvordan kan jeg gøre det til valid XML? jeg kender XML, men har ikke brugt det sammen med php.
Avatar billede Slettet bruger
25. august 2004 - 20:58 #5
Jeg har nu rettet en smule i koden, og det har hjulpet lidt.

Koden ser nu sådan ud:
---------------------
<?php
header ("Content-Type: text/xml");
exit;

    $host = "localhost";
    $user = "root";
    $pass = "";
    $database = "lykke";
   
    $linkID = mysql_connect($host, $user, $pass) or die("Could not connect to
    mysql_select_db");
   
    $query = "SELECT * FROM lykketabel ORDER BY id";
    $resultID = mysql_query($query, $linkID) or die    ("Data not found, stupid.");
   
    $xml_output = "<?xml version=\"1.0\"?>\n";
    $xml_output .= "<entries>\n";
   
    for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){
        $row = mysql_fetch_assoc($resultID);
        $xml_output .= "\t<entry>\n";
        $xml_output .= "\t\t<id>" . $row['id'] . "</id>\n";
        // Escaping illegal characters
        $row['navn'] = str_replace("&", "&", $row['navn']);
            $row['navn'] = str_replace("<", "<", $row['navn']);
            $row['navn'] = str_replace(">", "&gt;", $row['navn']);
            $row['navn'] = str_replace("\"", "&quot;", $row['navn']);
    $xml_output .= "\t\t<navn>" . $row['navn'] . "</navn>\n";
    $xml_output .= "\t</entry>\n";
    }   
   
    $xml_output .= "</entries>";
   
    echo $xml_output;
   
   
  ?>
-----------------------
Forbedringen består i, at jeg ikke længere får en fejlmelding. Til gengæld får jeg følgende:

-<html>
  <body/>
</html>

Dvs. jeg ikke får vist databasens indhold i træet. De html-tags der vises i stedet kommer ikke fra min kode. Men hvor kommer de så fra, og hvorfor bliver de vist, og ikke den xml jeg gerne vil have frem?
Avatar billede Slettet bruger
26. august 2004 - 19:51 #6
Nu afbryder du dit script i linie 3. Fjern exit;

Derudover er det smartest at vente med at sende headeren til du har passeret de linier, der kan outputte fejlbeskeder, hvis databasekaldene går galt.
Avatar billede Slettet bruger
26. august 2004 - 22:47 #7
Takker og lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester