Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: XML-tiedoston muokkaus PHP:llä

Danae [02.04.2008 18:03:36]

#

Tällainen homma tällä kertaa, että pitäisi saada tekstikentistä arvot tallennettua xml-muotoiseen tiedostoon. Joku kuitenkin takkuaa, sillä DOMin replaceChild kieltäytyy toimimasta. Myös appendChildia kokonaan uuteen tiedostoon on kokeiltu, mutta sekään ei toiminut. XML-tiedosto ei sisällä skandinaavisia kirjaimia.

Alla koko muokkaa.php sivun koodi. Olisi hienoa, jos joku pystyisi hieman tönimään eteenpäin.

<?php

$dom = new DomDocument();
$dom->load("ergonomia.xml");

if (isset($_POST["valivaihe"])) {
	$vaihe = $_POST["valivaihe"];
} else {
	$vaihe = 1;
}


switch ($vaihe) {
	case 1:
		//Tulostetaan pääotsikko
		print("<input type='text' name='paaotsikko' value='$paaotsikko' size='60' /><br/><br/>");

		//Tulostetaan sivun sisältö muokattaviin kenttiin
		//väliotsikot on $votaulu :ssa
		//kappaleet on $ktaulu :ssa
		//ensin ekan tekstin kappaleet, sitten väliotsikko, sitten tokat tekstit jne.
		print("<form method='post' action='$_SERVER[PHP_SELF]'>");
		for ($i = 0; $i < count($ktaulu); $i++) {
			print("<textarea cols='40' rows='8' name='teksti[]'>");
			for ($j = 0; $j < count($ktaulu[$i]); $j++) {
				print(trim($ktaulu[$i][$j]) . "\n\n");
			}
			print("</textarea><br/><br/>");
			if (strlen($votaulu[$i]) > 0) {
				print("<input type='text' name='valiotsikko[]' value='" . $votaulu[$i] . "' size='30' />");
			}
		}
		print("<input type='hidden' name='valivaihe' value='2' />");
		print("<input type='hidden' name='sivu' value='$sivu' />");
		print("<input type='submit' name='tallenna' value='Tallenna' />");
		print("</form>");
		break;

	case 2:
		$msivu = $_POST["sivu"];

		//Käsitellään otsikko
		$mpaaotsikko = $_POST["paaotsikko"];
		$korvattava = $dom->getElementsByTagName($msivu)->item(0)->getElementsByTagName("paaotsikko")->item(0);
		$dom->documentElement->replaceChild($mpaaotsikko, $korvattava);

		//Käsitellään tekstit ja väliotsikot
		$mtekstit = $_POST["teksti"];
		$mvotsikko = $_POST["valiotsikko"];
		for ($i = 0; $i < count($mtekstit); $i++) {
			if ($mvotsikko[$i] != null) {
				$otsikkoteksti = $mvotsikko[$i];
				$mvo = $dom->createElement("valiotsikko");
				$mvoteksti = $dom->createTextNode($otsikkoteksti);
				$mvo->appendChild($mvoteksti);

				$korvattava = $dom->getElementsByTagName($msivu)->item(0)->getElementsByTagName("valiotsikko")->item($i);
				$dom->documentElement->replaceChild($mvo,$korvattava);
			}


			$mteksti = $mtekstit[$i];
			$tok = strtok($mteksti, "\n");
			while ($tok) {
				$mkappale[] = $tok;
				$tok = strtok("\n");
			}

			$mteksti = $dom->createElement("teksti");
			for ($j = 0; $j < count($mkappale); $j++) {
				$mkplteksti = $mkappale[$j];
				$msisalto = $dom->createTextNode($mkplteksti);

				$mkpl = $dom->createElement("kappale");
				$mkpl->appendChild($msisalto);

				$mteksti->appendChild($mkpl);
			}
			$korvattava = $dom->getElementsByTagName($msivu)->item(0)->getElementsByTagName("teksti")->item($i);
			//Tähän asti tekee ^
			$dom->documentElement->replaceChild($mteksti,$korvattava);
			//Tätä ei enää tulosta ^
			print("Korvattu<br/>");
		}
		$dom->save("ergonomia.xml");
		print("Muokattu!");
		break;
}

include("loppu.php");
?>

tsuriga [03.04.2008 03:30:33]

#

Hankala testailla ilman tuota XML-tiedostoa, mutta seuraavia huomioita:

<?php
$korvattava = $dom->getElementsByTagName($msivu)->item(0)->getElementsByTagName("valiotsikko")->item($i);
$dom->documentElement->replaceChild($mvo,$korvattava);

-Hae $dom->getElementsByTagName($msivu)->item(0)->getElementsByTagName("valiotsikko") jo ennen for-silmukkaa - näin vältyt hakemasta sitä silmukassa toistuvasti. Lisäät silmukassa vain perään tuon item( $i ).
-DOMDocument perii luokan DOMNode, jonka metodi tuo replaceChild on. Siispä:

<?php
$mpaaotsikko = $_POST[ 'paaotsikko' ];

$dom->documentElement->replaceChild($mpaaotsikko, $korvattava);
// -->
$mpo = $dom->createElement( 'paaotsikko' );
//...
$dom->replaceChild( $mpo, $korvattava );
?>

Sama $dom->documentElement-virhe toistuu for-silmukassa alempana.

Danae [04.04.2008 10:26:18]

#

Korjasin nuo virheet, mutta ohjelma ei silti toimi. Tässä tuo xml-tiedosto, niin pääset halutessasi kokeilemaan.

<?xml version="1.0" encoding="utf-8"?>
<tekstisisalto>
	<etusivu>
		<paaotsikko>Tervetuloa!</paaotsikko>
		<teksti>
			<kappale>
				Nämä sivut esittelevät ergonomiaa ja ergonomista työtapaa. Ohessa on myös jumppaohjeita jäykkien lihasten vetreyttämiseksi.
			</kappale>
			<kappale>
				xxx
			</kappale>
		</teksti>
	</etusivu>

	<ergonomia>
		<paaotsikko>Ergonomia</paaotsikko>
		<teksti>
			<kappale>
				Ergonomian tutkiminen sai alkunsa toisessa maailmansodassa. Tutkimuksen käynnisti huomio siitä, että taistelukoneiden lentäjien suoritukset paranivat, jos ohjaamo oli vähemmän epämukava. Ergonomia tutkiikin ihmisen ja järjestelmän välistä vuorovaikutusta, eli pyrkii poistamaan kitkan työn ja tekijän väliltä. Järjestelmänä tässä tarkoitetaan tehtäviä, työtä, tuotteita ja ympäristöä, joiden parissa ihmiset työskentelevät. Ammattialana ergonomia soveltaa teoriaa ja periaatteita ihmisen hyvinvoinnin ja järjestelmän suorituskyvyn optimoinnin suunnitteluun.
			</kappale>
		</teksti>
		<valiotsikko>Ergonomian osa-alueet</valiotsikko>
		<teksti>
			<kappale>
				Ergonomisia periaatteita voi nykyään soveltaa kaikkiin asioihin, mitä ihmiset tekevät. Ergonomiaa on sovellettu niin fyysiseen, kognitiiviseen, sosiaaliseen kuin organisatoriseenkin toimintaan. Kansainvälinen ergonomiajärjestö on jakanut ergonomian kolmeen isoon osa-alueeseen:
			</kappale>
			<kappale>
				1) Fyysinen ergonomia käsittää ihmisen anatomian sekä fysiologiset ja biologiset muuttujat fyysisessä toiminnassa. Tähän ryhmään kuuluu työasentojen, toistuvien tai staattisten liikkeiden, työympäristön sekä turvallisuuden ja terveyden tutkiminen.
			</kappale>
			<kappale>
				2) Kognitiivinen ergonomia tutkii älyllisten prosessien, kuten muistin, havaitsemisen ja tarkkaavaisuuden vuorovaikutusta ihmisen ja järjestelmän välillä. Tutkimuksen kohteena ovat myös henkinen työkyky, päätöksenteko, ihmisen ja tietokoneen välinen vuorovaikutus sekä stressi.
			</kappale>
			<kappale>
				3) Organisatorinen ergonomia optimoi sosioteknisiä järjestelmiä. Tähän kuuluvat organisatoriset rakenteet, käytännöt ja prosessit. Myös kommunikaatio, henkilöstöresurssien hallinta, työaikojen suunnittelu, tiimi- ja yhteistyö sekä etätyöskentely kuuluvat tämän osa-alueen tutkimuskohtiin.
			</kappale>
		</teksti>
	</ergonomia>
</tekstisisalto>

Muuttuja $msivu saa arvokseen joko etusivu tai ergonomia.

tsuriga [04.04.2008 14:46:31]

#

Aika hankala tuohon on sukeltaa äkkiseltään, replaceChild heitti "Not Found" kun sähläsin muuttujiin ilmeisesti vähän mitä sattuu. Mihin tuo "kieltäytyy toimimasta" viittasi? Pistä virheilmoitukset tulkista päälle ja kattele mistä se valittaa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta