tekstbestanden (XML) samenvoegen via keuzemenu in PHP
Hoe pak ik dit aan? Wie kan mij op weg helpen?
De code die ik nu heb bevat slechts het keuzemenu waarmee verder nog niets gebeurt:
Code (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
34
35
36
37
38
39
40
41
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
37
38
39
40
41
<form action="bundels.php" method="get">
<table><td>
<input type="checkbox" name="bundel" value="awn">Alles wordt nieuw<br>
<input type="checkbox" name="bundel" value="bs">Berijmde Schriftgedeelten - in gebruik in de Christelijke Gereformeerde Kerken in Nederland<br>
<input type="checkbox" name="bundel" value="marnix">Bundel van Marnix van Sint Aldegonde<br>
<input type="checkbox" name="bundel" value="bouma">Bundels van Hans Bouma - Liefde (101-140); Zingende (201-259); Zolang (301-327)<br>
<input type="checkbox" name="bundel" value="jongerius">bundels van Henk Jongerius<br>
<input type="checkbox" name="bundel" value="plas">Bundels van Michel van der Plas<br>
<input type="checkbox" name="bundel" value="dnp">De Nieuwe Psalmberijming<br>
<input type="checkbox" name="bundel" value="datheen">De Psalmberijming van Petrus Datheen<br>
<input type="checkbox" name="bundel" value="eg1933">Enige gezangen - 1933<br>
<input type="checkbox" name="bundel" value="el">Evangelische Liedbundel<br>
<input type="checkbox" name="bundel" value="eva">Eva's lied<br>
<input type="checkbox" name="bundel" value="gk-gez">Gereformeerd Kerkboek - Gezangen<br>
<input type="checkbox" name="bundel" value="gk-ps">Gereformeerd Kerkboek - Psalmen<br>
<input type="checkbox" name="bundel" value="geroepen">Geroepen om te zingen<br>
<input type="checkbox" name="bundel" value="gvl">Gezangen voor de liturgie<br>
<input type="checkbox" name="bundel" value="hoop">Hoop van alle volken<br>
<input type="checkbox" name="bundel" value="iona">Iona<br>
<td>
<input type="checkbox" name="bundel" value="jdh">Johannes de Heer<br>
<input type="checkbox" name="bundel" value="levensliederen">Levensliederen (David Heek en Ren Barkema)<br>
<input type="checkbox" name="bundel" value="liedboek">Liedboek - zingen en bidden in huis en kerk (<i>in bewerking</i>)<br>
<input type="checkbox" name="bundel" value="lvdk">Liedboek voor de Kerken<br>
<input type="checkbox" name="bundel" value="lit-leusden">Liturgie-onderdelen Leusden<br>
<input type="checkbox" name="bundel" value="opw">Opwekking<br>
<input type="checkbox" name="bundel" value="ohb">Oude Hervormde Bundel<br>
<input type="checkbox" name="bundel" value="praise">Praiseliederen<br>
<input type="checkbox" name="bundel" value="psalmen-1773">Psalmberijming 1773<br>
<input type="checkbox" name="bundel" value="pvn">Psalmen voor Nu<br>
<input type="checkbox" name="bundel" value="randstad">Randstadbundel<br>
<input type="checkbox" name="bundel" value="dienstboek">Teksten uit het Dienstboek<br>
<input type="checkbox" name="bundel" value="wesley">wesley hymns<br>
<input type="checkbox" name="bundel" value="wzm">Wie Zingt Mee<br>
<input type="checkbox" name="bundel" value="zad">Zing alle dagen<br>
<input type="checkbox" name="bundel" value="zgz">Zingende gezegend<br>
<input type="checkbox" name="bundel" value="zj">Zingt jubilate<br>
<input type="checkbox" name="bundel" value="zolang">Zolang er mensen zijn<br>
</table>
<input type="submit" value="Submit">
</form>
<table><td>
<input type="checkbox" name="bundel" value="awn">Alles wordt nieuw<br>
<input type="checkbox" name="bundel" value="bs">Berijmde Schriftgedeelten - in gebruik in de Christelijke Gereformeerde Kerken in Nederland<br>
<input type="checkbox" name="bundel" value="marnix">Bundel van Marnix van Sint Aldegonde<br>
<input type="checkbox" name="bundel" value="bouma">Bundels van Hans Bouma - Liefde (101-140); Zingende (201-259); Zolang (301-327)<br>
<input type="checkbox" name="bundel" value="jongerius">bundels van Henk Jongerius<br>
<input type="checkbox" name="bundel" value="plas">Bundels van Michel van der Plas<br>
<input type="checkbox" name="bundel" value="dnp">De Nieuwe Psalmberijming<br>
<input type="checkbox" name="bundel" value="datheen">De Psalmberijming van Petrus Datheen<br>
<input type="checkbox" name="bundel" value="eg1933">Enige gezangen - 1933<br>
<input type="checkbox" name="bundel" value="el">Evangelische Liedbundel<br>
<input type="checkbox" name="bundel" value="eva">Eva's lied<br>
<input type="checkbox" name="bundel" value="gk-gez">Gereformeerd Kerkboek - Gezangen<br>
<input type="checkbox" name="bundel" value="gk-ps">Gereformeerd Kerkboek - Psalmen<br>
<input type="checkbox" name="bundel" value="geroepen">Geroepen om te zingen<br>
<input type="checkbox" name="bundel" value="gvl">Gezangen voor de liturgie<br>
<input type="checkbox" name="bundel" value="hoop">Hoop van alle volken<br>
<input type="checkbox" name="bundel" value="iona">Iona<br>
<td>
<input type="checkbox" name="bundel" value="jdh">Johannes de Heer<br>
<input type="checkbox" name="bundel" value="levensliederen">Levensliederen (David Heek en Ren Barkema)<br>
<input type="checkbox" name="bundel" value="liedboek">Liedboek - zingen en bidden in huis en kerk (<i>in bewerking</i>)<br>
<input type="checkbox" name="bundel" value="lvdk">Liedboek voor de Kerken<br>
<input type="checkbox" name="bundel" value="lit-leusden">Liturgie-onderdelen Leusden<br>
<input type="checkbox" name="bundel" value="opw">Opwekking<br>
<input type="checkbox" name="bundel" value="ohb">Oude Hervormde Bundel<br>
<input type="checkbox" name="bundel" value="praise">Praiseliederen<br>
<input type="checkbox" name="bundel" value="psalmen-1773">Psalmberijming 1773<br>
<input type="checkbox" name="bundel" value="pvn">Psalmen voor Nu<br>
<input type="checkbox" name="bundel" value="randstad">Randstadbundel<br>
<input type="checkbox" name="bundel" value="dienstboek">Teksten uit het Dienstboek<br>
<input type="checkbox" name="bundel" value="wesley">wesley hymns<br>
<input type="checkbox" name="bundel" value="wzm">Wie Zingt Mee<br>
<input type="checkbox" name="bundel" value="zad">Zing alle dagen<br>
<input type="checkbox" name="bundel" value="zgz">Zingende gezegend<br>
<input type="checkbox" name="bundel" value="zj">Zingt jubilate<br>
<input type="checkbox" name="bundel" value="zolang">Zolang er mensen zijn<br>
</table>
<input type="submit" value="Submit">
</form>
Ik ga er dan van uit dat xml_map/zgz.xml het bestand is voor Zingende Gezegende.
Code (php)
Ps, veel typewerk gehad?
Welke website is/wordt dit? Kan ik dan wel goed gebruiken namelijk ;)
De samen te stellen XML-file bevat in mijn geval een "header" (laat ik het maar zo noemen):
Code (php)
1
2
3
2
3
<?xml version="1.0" encoding="utf-8"?>
<PresentationsBundles xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Bundles>
<PresentationsBundles xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Bundles>
Dat dacht ik in bovenstaande code van Eddy (regel 8/9) te "vertalen" naar:
Code (php)
1
<?xml version="1.0" encoding="utf-8"?>\n<PresentationsBundles xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n <Bundles>\n
Verder moet het totale bestand dan eindigen met:
Ik neem aan dat ik dat ook in een echo-regel kan zetten op regel 11?
Kortom, nog best wel wat vragen hoe ik zo'n XML-bestand dan moet opbouwen.
Hoe pak ik dit verder aan?
Vriendelijke groet,
Guido
Gewijzigd op 22/11/2015 19:13:35 door Guido van Harten
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
foreach($_POST['bundel'] as $selected)
{
$xml[] = file_get_contents("xml_map/".$selected.".xml");
}
// maak dit bestand een xml-bestand voor de browser + opslaan als.. ==> iets.xml
header("Content-type: text/xml");
// maak bestand XML-codering voor verwerken van browser
echo '<?xml version="1.0" encoding="utf-8"?>
<PresentationsBundles xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Bundles>';
// hier geimporteerde spul
echo implode(PHP_EOL, $xml);
echo ' </Bundles>
</PresentationsBundles>';
?>
foreach($_POST['bundel'] as $selected)
{
$xml[] = file_get_contents("xml_map/".$selected.".xml");
}
// maak dit bestand een xml-bestand voor de browser + opslaan als.. ==> iets.xml
header("Content-type: text/xml");
// maak bestand XML-codering voor verwerken van browser
echo '<?xml version="1.0" encoding="utf-8"?>
<PresentationsBundles xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Bundles>';
// hier geimporteerde spul
echo implode(PHP_EOL, $xml);
echo ' </Bundles>
</PresentationsBundles>';
?>
Met Simplexml heb je meer grip op de opbouw van een XML-bestand.
Eddy E op 22/11/2015 19:16:27:
Zoiets:
...
...
Eddy, het is me niet duidelijk wat je bedoelt met de opmerkingen in je scriptje op de regels 7, 10 en 15.
Wat ik nu heb, staat online op http://phphulp.vanharten.net/bundels1.php.
De codes:
bundels1.php
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<form action="bundels2.xml" method="get">
<table><td>
<input type="checkbox" name="bundel" value="dnp">De Nieuwe Psalmberijming<br>
<input type="checkbox" name="bundel" value="lit-leusden">Liturgie-onderdelen Leusden<br>
<input type="checkbox" name="bundel" value="psalmen-1773">Psalmberijming 1773<br>
</table>
<input type="submit" value="Submit">
</form>
<table><td>
<input type="checkbox" name="bundel" value="dnp">De Nieuwe Psalmberijming<br>
<input type="checkbox" name="bundel" value="lit-leusden">Liturgie-onderdelen Leusden<br>
<input type="checkbox" name="bundel" value="psalmen-1773">Psalmberijming 1773<br>
</table>
<input type="submit" value="Submit">
</form>
bundels2.xml:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
foreach($_POST['bundel'] as $selected)
{
$xml[] = file_get_contents($selected.".xml");
}
// maak dit bestand een xml-bestand voor de browser + opslaan als.. ==> iets.xml
header("Content-type: text/xml");
// maak bestand XML-codering voor verwerken van browser
echo '<?xml version="1.0" encoding="utf-8"?>
<PresentationsBundles xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Bundles>';
// hier geimporteerde spul
echo implode(PHP_EOL, $xml);
echo ' </Bundles>
</PresentationsBundles>';
?>
foreach($_POST['bundel'] as $selected)
{
$xml[] = file_get_contents($selected.".xml");
}
// maak dit bestand een xml-bestand voor de browser + opslaan als.. ==> iets.xml
header("Content-type: text/xml");
// maak bestand XML-codering voor verwerken van browser
echo '<?xml version="1.0" encoding="utf-8"?>
<PresentationsBundles xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Bundles>';
// hier geimporteerde spul
echo implode(PHP_EOL, $xml);
echo ' </Bundles>
</PresentationsBundles>';
?>
Vriendelijke groet,
Guido
Eddy E op 22/11/2015 19:16:27:
Zoiets:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
foreach($_POST['bundel'] as $selected)
{
$xml[] = file_get_contents("xml_map/".$selected.".xml");
}
?>
foreach($_POST['bundel'] as $selected)
{
$xml[] = file_get_contents("xml_map/".$selected.".xml");
}
?>
Kijk nog even goed naar situaties waarbij dit wordt meegestuurd als bundel: ../.htaccess\0
Gewijzigd op 22/11/2015 22:35:36 door Martin -
Vriendelijke groet,
Guido
Bijvoorbeeld een htaccess file, script of systeem bestand.
met name zou je kunnen controleren of $selected niets anders dan letters of cijfers bevat.
of evt. of er geen / in de string staat.
Om het mezelf niet al te moeilijk te maken (het hoeft geen waterdicht programma te worden, als het maar functioneel is), denk ik dat ik de "-" uit de values verwijder (zie eerste posting, regels, 14, 15, 25 en 29).
Vriendelijke groet,
Guido
Belangrijker is dat het niet mogelijk is om een bestand in een andere map op te vragen.
Ofwel omdat je controleert of er geen / of . of andere rariteit in je $selected zit
Ofwel omdat je eerst een lijst ophaalt van de bestanden die je hebt (met glob()) en dan alleen de text toevoegt aan je xml als de betreffende file jou bekend is.