login  Naam:   Wachtwoord: 
Registreer je!
 Forum

php xml (Opgelost)

Offline TekRequest - 09/06/2009 16:05 (laatste wijziging 09/06/2009 16:07)
Avatar van TekRequestNieuw lid Hello,
ik probeer via sql > php > xml out te putten, dat lukt me aardig toch 1 probleempje

Mijn tabel ziet er zo uit :

id pad titel width categorie_id
23 Image_9391_LR.jpg 0 2
24 Image_9399_LR.jpg 0 5
25 Image_9406_LR.jpg 0 5
26 Image_9421_LR.jpg 0 5

Er moet gestart worden met het openen van een categorie

Zolang mijn categorie_id hetzelfde blijft mag enkel dit regeltje toegevoegd worden :

  1. $xml_output .= "\t\t<foto pad='$pad' titel='$titel' width='$width' />\n";


anders moet een node <category> aangemaakt worden met </category>

  1. <?php
  2. header("Content-type: text/xml");
  3.  
  4. $host = "";
  5. $user = "";
  6. $pass = "";
  7. $database = "";
  8.  
  9. $linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host.");
  10. mysql_select_db($database, $linkID) or die("Could not find database.");
  11.  
  12. $query = "SELECT * FROM categorie INNER JOIN foto ON categorie.id = foto.categorie_id ORDER BY foto.categorie_id ASC";
  13. $resultID = mysql_query($query, $linkID) or die("Data not found.");
  14.  
  15. $xml_output = "<?xml version=\"1.0\"?>\n";
  16. $xml_output .= "<gallery>\n";
  17.  
  18.  
  19. $vorige_categorie = 0;
  20. $huidige_categorie = 0;
  21.  
  22. for($i = 0 ; $i < mysql_num_rows($resultID) ; $i++)
  23. {
  24.  
  25. $row = mysql_fetch_assoc($resultID);
  26.  
  27. $pad = $row['pad'];
  28. $titel = $row['titel'];
  29. $width = $row['width'];
  30. $name = $row['naam'];
  31.  
  32. $huidige_categorie = $row['categorie_id'];
  33.  
  34. // echo $categorie_id;
  35.  
  36. // ALS CATEGORIE VERANDERT , NIEUWE CATEGORIE OPSTARTEN
  37. if ($huidige_categorie == $vorige_categorie) {
  38.  
  39. $xml_output .= "\t\t<foto pad='$pad' titel='$titel' width='$width' />\n";
  40. // Escaping illegal characters
  41. $row['titel'] = str_replace("&", "&", $row['titel']);
  42. $row['titel'] = str_replace("<", "<", $row['titel']);
  43. $row['titel'] = str_replace(">", "&gt;", $row['titel']);
  44. $row['titel'] = str_replace("\"", "&quot;", $row['titel']);
  45.  
  46. } else if ($huidige_categorie != $vorige_categorie) {
  47.  
  48.  
  49. $xml_output .= "\t<category name='$name'>\n";
  50.  
  51. $xml_output .= "\t\t<foto pad='$pad' titel='$titel' width='$width' />\n";
  52. // Escaping illegal characters
  53. $row['titel'] = str_replace("&", "&", $row['titel']);
  54. $row['titel'] = str_replace("<", "<", $row['titel']);
  55. $row['titel'] = str_replace(">", "&gt;", $row['titel']);
  56. $row['titel'] = str_replace("\"", "&quot;", $row['titel']);
  57.  
  58. $xml_output .= "\t</category>\n";
  59.  
  60. }
  61.  
  62. $vorige_categorie = $huidige_categorie;
  63. }
  64.  
  65. $xml_output .= "</gallery>";
  66.  
  67. echo $xml_output;
  68.  
  69. /*
  70. $file= fopen("myFile.xml", "w");
  71. fwrite($file, $xml_output);
  72. fclose($file);
  73.  
  74. print "<meta http-equiv=\"refresh\"content=\"0;URL=update_ok.php\">";
  75. exit();
  76. */
  77.  
  78. ?>


Met deze code krijg ik een xml zoals dit :

  1. <?xml version="1.0" ?>
  2. <gallery>
  3. <category name="interieur">
  4. <foto pad="Image_9391_LR.jpg" titel="" width="0" />
  5. </category>
  6. <category name="interieur2">
  7. <foto pad="Image_9406_LR.jpg" titel="" width="0" />
  8. </category>
  9. <foto pad="Image_9399_LR.jpg" titel="" width="0" />
  10. <foto pad="Image_9421_LR.jpg" titel="" width="0" />
  11. </gallery>



MAAR MIJN UITEINDELIJKE OUTPUT ZOU DIT MOETEN KUNNEN WORDEN ;

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <gallery>
  3.  
  4. <category name="PROJECT 1 //">
  5. <foto pad="images/5/Image_9391_LR.jpg" titel="Image_9399_LR" width="750" />
  6. </category>
  7.  
  8. <category name="PROJECT 2 //">
  9. <foto pad="images/5/Image_9399_LR.jpg" titel="Image_9399_LR" width="750" />
  10. <foto pad="images/5/Image_9406_LR.jpg" titel="Image_9399_LR" width="750" />
  11. <foto pad="images/5/Image_9421_LR.jpg" titel="Image_9399_LR" width="750" />
  12. </category>
  13.  
  14.  
  15. </gallery>



Hoe los ik dit op ?

12 antwoorden

Gesponsorde links
Offline ibmos2warp - 09/06/2009 16:10
Avatar van ibmos2warp PHP interesse Gebruik PHP.net: dom of PHP.net: simplexml. Zelf kloten met xml levert vaak problemen op.
Offline TekRequest - 09/06/2009 16:41 (laatste wijziging 09/06/2009 16:42)
Avatar van TekRequest Nieuw lid en waarom zou ik dat doen? Ik zit nu al zo ver ...

enkel de logica ontbreekt me een beetje in dit gedeelte :

  1. for($i = 0 ; $i < mysql_num_rows($resultID) ; $i++)
  2. {
  3.  
  4. $row = mysql_fetch_assoc($resultID);
  5.  
  6. $pad = $row['pad'];
  7. $titel = $row['titel'];
  8. $width = $row['width'];
  9. $name = $row['naam'];
  10.  
  11. $huidige_categorie = $row['categorie_id'];
  12.  
  13. // echo $categorie_id;
  14.  
  15. // ALS CATEGORIE VERANDERT , NIEUWE CATEGORIE OPSTARTEN
  16. if ($huidige_categorie == $vorige_categorie) {
  17.  
  18. $xml_output .= "\t\t<foto pad='$pad' titel='$titel' width='$width' />\n";
  19. // Escaping illegal characters
  20. $row['titel'] = str_replace("&", "&", $row['titel']);
  21. $row['titel'] = str_replace("<", "<", $row['titel']);
  22. $row['titel'] = str_replace(">", "&gt;", $row['titel']);
  23. $row['titel'] = str_replace("\"", "&quot;", $row['titel']);
  24.  
  25. } else if ($huidige_categorie != $vorige_categorie) {
  26.  
  27.  
  28. $xml_output .= "\t<category name='$name'>\n";
  29.  
  30. $xml_output .= "\t\t<foto pad='$pad' titel='$titel' width='$width' />\n";
  31. // Escaping illegal characters
  32. $row['titel'] = str_replace("&", "&", $row['titel']);
  33. $row['titel'] = str_replace("<", "<", $row['titel']);
  34. $row['titel'] = str_replace(">", "&gt;", $row['titel']);
  35. $row['titel'] = str_replace("\"", "&quot;", $row['titel']);
  36.  
  37. $xml_output .= "\t</category>\n";
  38.  
  39. }
  40.  
  41. $vorige_categorie = $huidige_categorie;
  42. }
  43.  
  44. $xml_output .= "</gallery>";


iemand die hier een suggestie op kan doen ?
Offline ibmos2warp - 09/06/2009 16:46
Avatar van ibmos2warp PHP interesse
TekRequest schreef:
en waarom zou ik dat doen? Ik zit nu al zo ver ...

Omdat je rotzooi krijgt die niet klopt.
Offline Flex1986 - 09/06/2009 18:37 (laatste wijziging 09/06/2009 18:38)
Avatar van Flex1986 Gouden medaille

Senior Member
TekRequest schreef:
en waarom zou ik dat doen? Ik zit nu al zo ver ...


Als je ook maar een beetje research had gedaan dan was je al gelijk op PHP.net: simplexml uitgekomen. Een zoekactie naar xml op php.net geeft al simplexml als resultaat.

Het voordeel van simplexml is dat het makkelijker uit te breiden is en als je het goed toepast is het ook nog een valid XML wat bij jouw script nog maar de vraag is.
Offline TekRequest - 10/06/2009 10:05
Avatar van TekRequest Nieuw lid Ok bedankt voor de suggesties, ik probeer het eens met simple xml .
Offline WouterPSV - 10/06/2009 12:43
Avatar van WouterPSV Lid Ik heb laatst ook gegevens uit mij database gehaald en omgezet naar XML. Ik heb dit toegepast op het simpleviewer fotoalbum.

Mijn topic

Misschien heb je er iets aan.
Suc6
Offline TekRequest - 12/06/2009 11:14
Avatar van TekRequest Nieuw lid Ok heb het nu geprobeerd via simple xml, maar werkt nog niet helemaal , waarom wordt hier men category gesloten voor hij wordt opgevuld ?

xml Output :

  1. <?xml version="1.0"?>
  2. <gallery>
  3.  
  4. <category name="test"/>
  5. <foto pad="Image_9391_LR.jpg" titel="titel 1" width="0"/>
  6. <foto pad="Image_9399_LR.jpg" titel="titel 3" width="0"/>
  7. <foto pad="Image_9406_LR.jpg" titel="titel 2" width="0"/>
  8.  
  9. <category name="test2"/>
  10. <foto pad="Image_9421_LR.jpg" titel="" width="0"/>
  11.  
  12. </gallery>



php Output :
  1. if ($huidige_categorie == $vorige_categorie) {
  2.  
  3. $make = $xml->addChild('foto');
  4. $make->addAttribute('pad', htmlspecialchars(utf8_encode($pad)));
  5. $make->addAttribute('titel', htmlspecialchars(utf8_encode($titel)));
  6. $make->addAttribute('width', htmlspecialchars(utf8_encode($width)));
  7.  
  8.  
  9. } else if ($huidige_categorie != $vorige_categorie) {
  10.  
  11. $make = $xml->addChild('category');
  12. $make->addAttribute('name', htmlspecialchars(utf8_encode($name)));
  13.  
  14. $make = $xml->addChild('foto');
  15. $make->addAttribute('pad', htmlspecialchars(utf8_encode($pad)));
  16. $make->addAttribute('titel', htmlspecialchars(utf8_encode($titel)));
  17. $make->addAttribute('width', htmlspecialchars(utf8_encode($width)));
  18.  
  19. }
Offline Flex1986 - 12/06/2009 11:34 (laatste wijziging 12/06/2009 11:35)
Avatar van Flex1986 Gouden medaille

Senior Member
Ik weet niet of het er mee te maken heeft maar je XML is totaal niet valid. Je kan niet zomaar zelf attributen gaan verzinnen en toevoegen.

  1. <foto>
  2. <pad></pad>
  3. <titel></titel>
  4. <width></width>
  5. </foto>


Zo zou je je XML op moeten bouwen.

Op de code volgens mij gaat die in je else fout. Je moet namelijk je foto child toevoegen aan je $make variabele.
Offline TekRequest - 12/06/2009 13:22
Avatar van TekRequest Nieuw lid Haaj Flex,

Als ik er een eigen DTD voor zou schrijven, zou dit wel valid zijn, dat is het momenteel nog niet, dat klopt, maar dat heeft niks te maken met het feit dat de output nog niet is zoals wat ik ervan verwacht.

Wat bedoel je met : "Je moet namelijk je foto child toevoegen aan je $make variabele"

Kan je me verder op weg helpen pls? zou vriendelijk zijn ! thanks

Offline Flex1986 - 12/06/2009 13:38
Avatar van Flex1986 Gouden medaille

Senior Member
  1. if ($huidige_categorie == $vorige_categorie) {
  2.  
  3. $foto = $xml->addChild('foto');
  4. $foto->addAttribute('pad', htmlspecialchars(utf8_encode($pad)));
  5. $foto->addAttribute('titel', htmlspecialchars(utf8_encode($titel)));
  6. $foto->addAttribute('width', htmlspecialchars(utf8_encode($width)));
  7.  
  8.  
  9. } else if ($huidige_categorie != $vorige_categorie) {
  10.  
  11. $make = $xml->addChild('category');
  12. $make->addAttribute('name', htmlspecialchars(utf8_encode($name)));
  13.  
  14. $foto = $make->addChild('foto'); //$make aanroepen in plaats van $xml anders beland hij niet in de categorie.
  15. $foto->addAttribute('pad', htmlspecialchars(utf8_encode($pad)));
  16. $foto->addAttribute('titel', htmlspecialchars(utf8_encode($titel)));
  17. $foto->addAttribute('width', htmlspecialchars(utf8_encode($width)));
  18.  
  19. }


Na de else wat aanpassingen gemaakt. Staat commentaar in en om het duidelijker te maken heb ik de variabele verandert in de naam van het element waarmee je bezig bent.
Offline Ontani - 12/06/2009 15:01
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Ik denk da hier 2 man hun cursus xml best nog eens boven haalt.
Offline TekRequest - 15/06/2009 09:28
Avatar van TekRequest Nieuw lid haaj,

heb even de test gedaan flex, en nu geeft ie dit als output :

  1. <gallery>
  2. <category name="test">
  3. <foto pad="Image_9391_LR.jpg" titel="titel 1" width="0"/>
  4. </category>
  5.  
  6. <foto pad="Image_9399_LR.jpg" titel="titel 3" width="0"/>
  7. <foto pad="Image_9406_LR.jpg" titel="titel 2" width="0"/>
  8.  
  9. <category name="test2">
  10. <foto pad="Image_9421_LR.jpg" titel="" width="0"/>
  11. </category><foto pad="Image_9445_LR.jpg" titel="" width="0"/>
  12.  
  13. </gallery>


Dus nog altijd ergens iets verkeerd aangezien hij 2 foto's buiten de eerste category zet, pfft



ik kom er zot af   ligt het dan mssn toch niet ergens aan buiten de if structuur ? mssn moet ik die for lus veranderen ?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.239s