Jump to content
php.lv forumi

SadDemon

Reģistrētie lietotāji
  • Posts

    52
  • Joined

  • Last visited

Everything posted by SadDemon

  1. ..tad nu atgriežamies pie Dom metodes; esmu ticis galā ar ksort(); metodi.. *.php saturs: <?php $doc = new DOMDocument; $doc -> load('../xml/depot.xml'); $content = array(); $products = $doc -> getElementsByTagName('product'); foreach ($products as $product) { $id = $product -> getAttribute('id'); $amount = $product -> getAttribute('amount'); $name = $product -> getAttribute('name'); $color = $product -> getAttribute('color'); $article = $product -> getAttribute('article'); $category = $product -> getAttribute('category'); $status = $product -> getAttribute('status'); $row = "<"."product id=\"".$id."\" amount=\"".$amount."\" name=\"".$name."\" color=\"".$color."\" article=\"".$article."\" category=\"".$category."\" status=\"".$status."\" />"."<br>"; $content[$id] = $row; } ksort($content); foreach ($content as $output) { echo $output; } ?> ..un jautājums ir, kā jaunos (sakārtotos) datus varētu ierakstīt *.xml failā? Iepriekš izmantoju šādu skriptu: <?php // .. postētās variables $myXML = "../xml/depot.xml"; $ending = "</Noliktava>"; $content = file_get_contents($myXML); $content = substr($content, 0, strpos($content, $ending)-1); $newData = " <product id=\"".$id."\" amount=\"".$amount."\" name=\"".$name."\" color=\"".$color."\" article=\"".$article."\" category=\"".$category."\" status=\"".$status."\" /> ".$ending; $content.=$newData; $fHandle = fopen($myXML, "w+"); fwrite($fHandle, $content); fclose($fHandle); ?> Kurā parsējamā skripta daļā būtu jāievieto šis?.. tobiš, kad noteikt failu, kad atvērt, rakstīt.. un kad aizvērt failu? (..dēļ tā "foreach" ir neskaidrības..) ..paldies!
  2. ..nu principā noskaidroju, ka (..galējā variantā tiks hostēts uz serveris.lv) ..ir iespēja pieprasīt Dom funkcijas atbalstu.. tākā atgriežos pie Dom metodes izpētes un apgūšanas.. Topiks uz dzēšanu.. (atvainojos par piesārņošanu)
  3. Njā.. būs kāda kļūda tā šķiet, ja padomā - pats īsti nezinu, jo izrāvu kādu gabalu no viena piemēra.. un $attributes ir "undefined"
  4. Ir nepieciešams veikt meklējumu parsējamā failā, piemēram.. nosakam, ka meklējamais ir "id" attribūts ar lielumu "5".. un atrodot attiecīgo rindiņu, tā tiek aizvietota ar citu, ieprikš noteiktu rindiņu.. (nezinu, kurā koda daļā tas būtu jāveic.. un kā) Lūdzu palīdzēt.. tagadējais *.php fails outputā izmet k-ko līdzīgu *.xml faila struktūrai.. *.php faila saturs ir: <?php $file = "depot.xml"; function startElement($parser, $name, $attributes) { echo "<font color=" . "\"" . "#000099" . "\"" . ">" . "<" . "$name" . " " . "</font>"; if (sizeof($attributes)) { while (list($object, $value) = each($attributes)) { echo "<font color=" . "\"" . "#000099" . "\"" . ">" . "$object" . "=" . "</font>" . "<font color=" . "\"" . "#006600" . "\"" . ">" . "\"" . "$value" . "\"" . "</font>" . " "; } } echo "<font color=" . "\"" . "#000099" . "\"" . ">" . ">" . "</font>"; } function endElement($parser, $name) { echo "<font color=" . "\"" . "#000099" . "\"" . ">" . "</" . "$name" . ">" . "</font>"; } function characterData($parser, $data) { echo "$data"; } function new_xml_parser($file) { global $parser_file; $xml_parser = xml_parser_create(); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if (!($fp = @fopen($file, "r"))) { return false; } if (!is_array($parser_file)) { settype($parser_file, "array"); } $parser_file[$xml_parser] = $file; return array($xml_parser, $fp); } if (!(list($xml_parser, $fp) = new_xml_parser($file))) { die("Could not open xml input"); } echo "<pre>"; while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("Xml error: %s at line %d" . "\n", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); ?> output: <Noliktava produkcijai="----" > <product id="1" amount="51" name="basketbola bumba" color="oranža" article="-" category="citi" status="ir" ></product> <product id="2" amount="7" name="vizītkaršu etvija" color="metāls" article="50042" category="birojam" status="ir" ></product> <product id="3" amount="25" name="vizītkaršu etvija" color="metāls" article="ap802301" category="birojam" status="ir" ></product> <product id="4" amount="27" name="vizītkaršu etvija" color="metāls" article="1602270" category="birojam" status="ir" ></product> </Noliktava>
  5. ..un skatamies serveris.lv phpInfo - pēc vārda "dom" neko neatrod.. un pēc vārda "xml" atrodam, ka xml support - active; Vai tas nozīmē, ka dom funkcijas nedarbosies?
  6. Vai ir kāda iespēja k-ko labot, mainīt vai pievienot servera uzstādījumos? Vai arī man jāatsakās no Dom metodes?
  7. Sakarā ar php 5 versijas dom funkcijas pārveidošanu par php 4 domxml.. Uz hostinga, kur testējuir php versija 4.4.1 (phpInfo); *.php saturs ir: $doc = domxml_new_doc('1.0'); $doc -> domxml_open_file('../xml/depot.xml'); $el = $doc -> get_elements_by_tag_name('product'); foreach($el as $element) { if($element -> get_attribute('id') == $id) { $element -> parent_node -> remove_child($element); break; } } $doc -> dump_file("../xml/depot.xml", false, false); Esmu pētījis php manuāli.. bet tik un tā ir kļūda - "Fatal error: Call to undefined function: domxml_new_doc() .... on line 5"; Vai kļūdos?.. vadoties pēc php manuāļa ir jādarbojas.. vai problēma ir php konfigurācijā uz hostinga, jo nemanu tur DomXml?
  8. ..nav nedz kļūdas paziņojuma, nedz rezultāta.. output ir tukšs..
  9. ..lūdzu pālīdziet, pielabojiet skriptu.. *.xml saturs: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Noliktava produkcijai="----"> <product id="4" amount="27" name="vizītkaršu etvija" color="metāls" article="1602270" category="birojam" status="ir"/> <product id="1" amount="51" name="basketbola bumba" color="oranža" article="-" category="citi" status="ir"/> <product id="5" amount="3" name="vizītkaršu etvija" color="metāls" article="54756889" category="birojam" status="ir"/> <product id="20" amount="125" name="kalkulators" color="melna" article="melco" category="birojam" status="ir"/> <product id="25" amount="72" name="krūze" color="zila" article="-" category="krūzes" status="ir"/> </Noliktava> *.php, kas nedarbijas: <?php $doc = new DOMDocument; $doc -> load('../xml/depot.xml'); $mass = array(); $length = $doc -> getElementsByTagName('product'); for ($i = 0; $i < $length -> length; $i++) { $product = $doc -> getElementsByTagName('product') -> item($i); $attributeNode = $product->getAttributeNode('id'); $id = $attributeNode; $node = $product; $mass['$id'] = $node; } ksort($mass); foreach ($mass['$id'] as $output) { echo $output."<br>"; } ?>
  10. Saprotu jau, ka Tev tas šķiet pietiekami izsmeļoši.. bet tomēr tādam muļķim kā es tas vēl neko neizsaka.. Kā jau visu laiku atkārtoju.. cenšos iemācīties php, bet ne viss padodas tik vienkārši (diemžēl).. Paldies tik un tā.. (ceru arī uz izsmeļošāku paraugu)
  11. ..nesapratu par to "asociatīvo masīvu".. varētu lūdzu paskaidrot sīkāk vai kādu piemēru, kā "attributeNode -> value" dabūt iekš array(); vai kā? Esmu pavisam apjucis un samurgojis k-ko galīgi garām, bet nu dabūnu ārā "id".. *.php saturs: <?php $doc = new DOMDocument; $doc -> load('../xml/depot.xml'); $count = 0; for ($i = 0; $i <= 500; $i++) { $el = $doc -> getElementsByTagName('product'); foreach($el as $element) { if($element -> getAttribute('id') == $i) { $attributeNode = $el -> item($count++) -> getAttributeNode('id'); echo $attributeNode -> value."\n"; break; } } } ?> iepriekš paldies..
  12. ..un tomēr lūgšu palīdzēt - kā varētu dabūt produktu "id" augošā secībā.. itkā lai meklē produktu ar "id - 1", ja atrod, tad echo "Ir"; .. ja neatrod, tad "$i++", tobiš - atgriezjas funkcijas augšgalā un meklē produktu ar "id - 2".. u.t.t. Doma ir gala rezultāta dabūt *.php, kas pārkārtotu produktus (meklētu pa vienam, ja atrastu.. ierakstītu citā *.xml failā, tādā veidā veidotos augoša secība; kad funkcija izsīkusi, pārkopētu sakārtoto *.xml failu pa virsu oriģinālam un iztukšotu sevi).. Tākā manas php zināšanas ir ļoti aprobežotas, iespējams stipri kļūdos.. tad vēlētos uzzināt kādu metodi, kā sakārtot *.xml failu..
  13. Ir jautājums - kā lai no *.xml faila nolasa datus augošā sēcībā.. ja *.xml failā dati ir haosā.. piemēram.. *.xml saturs: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Noliktava produkcijai="----"> <product id="4" amount="27" name="vizītkaršu etvija" color="metāls" article="1602270" category="birojam" status="ir"/> <product id="1" amount="51" name="basketbola bumba" color="oranža" article="-" category="citi" status="ir"/> <product id="5" amount="3" name="vizītkaršu etvija" color="metāls" article="54756889" category="birojam" status="ir"/> <product id="20" amount="125" name="kalkulators" color="melna" article="melco" category="birojam" status="ir"/> <product id="25" amount="72" name="krūze" color="zila" article="-" category="krūzes" status="ir"/> </Noliktava> ..tikai cenšos iemācīties php.. palīdziet.. (skripts jau pavisam garām, citādi nemācēju, tāpēc jau jautāju pēc palīdzības) un *.php saturs: <?php $id = 1; $count = 500; $doc = new DOMDocument; $doc -> load('../xml/depot.xml'); while ($id <= $count) { $product = $doc->getElementsByTagName('product') -> item($id++); $attributeNode = $product->getAttributeNode('id'); echo $attributeNode->value."\n"; } ?> ..outputs šim ir 1 5 20 25; ..bet kur pazūd elements ar id attribūtu "4", kas ir pirmajā rindiņā? ..lūdzu pamāciet, palīdziet!!!
  14. - > localhero ..nav jau problēmu ar atribūtiem, ..viss darbojas bez problēmām (vajag izlasīt par ko ir runa)..
  15. ..nu Opera rāda kļūdas arī bez tā error_reporting(E_ALL); Jautājums, ja atkārtoju funkciju ar "while" un atkārtojumu skaits ir.. nu piemēram līdz 500.. $el = $doc -> getElementsByTagName('product'); while ($id <= $count) { foreach($el as $element) { if($element -> getAttribute('id') == $id) { $element -> parentNode -> removeChild($element); break; } } $id++; } ..vai pastāv k-kādi servera puses ierobežojumi, intervāli.. vienuvārd sakot - pastāv vai nepastāv iespēja, ka viss varētu nokārties vai kā tamlīdzīgi? ..iepriekš - paldies!
  16. Kā varētu nodzēst visu *.xml faila saturu, tobiš produktus? (..iepriekš dzēsu konkrētu produktu pēc "id") *.xml faila saturs: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Noliktava produkcijai="----"> <product id="8" amount="24" name="šķiltavas" color="metāls" article="topico" category="šķiltavas" status="ir"/> <product id="10" amount="10" name="pulkstenis" color="sudraba" article="0401040" category="pulksteņi" status="ir"/> </Noliktava> un *.php faila saturs: <?php $id = $_POST['id']; $doc = new DOMDocument; $doc -> load('../xml/depot.xml'); $el = $doc -> getElementsByTagName('product'); foreach($el as $element) { if($element -> getAttribute('id') == $id) { $element -> parentNode -> removeChild($element); break; } } // u.t.t. ..palīdziet, pamāciet nelaimīgu cilvēku, kas cenšas k-ko iemācīties.. Paldies arī par iepriekšējo norādījumu, kā kļūdas apskatīt (tagad visi gudrie smejas); jautājums - kam vajadzīgs tas error_reporting(E_ALL); ini_set('display_errors', 1); ..? (Lietoju Opera browser, kļūdas tāpat arī rāda, ja tādas ir);
  17. Lūdzu palīdziet ar xml dom metodi php 4 versijai.. esmu visādi izmēģinājis, bet k-kur ir kļūda.. palīdziet tak! <?php $id_old = $_POST['id_old']; $id = $_POST['id']; $amount = $_POST['amount']; $name = $_POST['name']; $color = $_POST['color']; $article = $_POST['article']; $category = $_POST['category']; $status = $_POST['status']; $doc = domxml_new_doc("1.0"); $doc -> domxml_open_file("../xml/depot.xml"); $el = $doc -> get_elements_by_tag_name('product'); foreach($el as $element) { if($element -> get_attribute('id') == $id_old) { $element -> parent_node -> remove_child($element); break; } } $doc -> dump_file("../xml/depot.xml", false, true); $myXML = "../xml/depot.xml"; $content = file_get_contents($myXML); $content = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $content); $ending = "</Noliktava>"; $content = substr($content, 0, strpos($content,$ending)-1); $newData = " <product id=\"".$id."\" amount=\"".$amount."\" name=\"".$name."\" color=\"".$color."\" article=\"".$article."\" category=\"".$category."\" status=\"".$status."\"/> ".$ending; $content.=$newData; $fHandle = fopen($myXML, "w+"); fwrite($fHandle, $content); fclose($fHandle); ?>
  18. Vai priekš php 4 versijas būs pareizi? - <?php $id = $_POST['id']; $doc = new DOMDocument; $doc -> load('depot.xml'); $el = $doc -> get_elements_by_tag_name('product'); foreach($el as $element) { if($element -> get_attribute('id') == $id) { $element -> parent_node -> remove_child($element); break; } } $doc -> save("depot.xml"); ?> Neesmu necik zinošs iekš php, tāpēc lūdzu pielabojiet, paīdziet pārveidot.. lai darbotos uz php 4 versijas.. Jau iepriekš pateicos..
  19. ..tākā neesmu necik ļoti zinošs šajās lietās, atbildēshu - nezinu.. bija nepieciešams tikai, lai smuki saglabātu *.xml struktūru.. jo failā ikdienas tiks dzēsta un labota informācija.. un gadījumā, ja kādu reizi jālien tur skatīties - nebūtu milzums tukšuma, bet lai ir pārskatāmi.. Ir vēl jautājums - vai šī darbība, dzēšot datus - varētu nedarboties uz vecākas php vai msql bāzes.. jo testējot localhostā, kur man jaunākās mysql un php versijas - viss darbojas, bet augšuplādēts uz awardspace.com, kur ir ceturtās versijas - nedarbojas.. Vai uz php 5.0.4 ir Dom dokumenta funkcijas, ja kāds zin.. uz tāda tiks hostota lapa.. ak' es muļķis, tik tālu nebiju aizdomājies..
  20. Paldies! Viss kārtībā.. *.php tagad izskatās šādi: <?php $id = $_POST['id']; $doc = new DOMDocument; $doc -> load('depot.xml'); $el = $doc -> getElementsByTagName('product'); foreach($el as $element) { if($element -> getAttribute('id') == $id) { $element -> parentNode -> removeChild($element); break; } } $doc -> save("depot.xml"); ?> Par tukšu līniju pamēģināšu vēl.. paldies! (izglābi)
  21. Liels, liels paldies v3rb0 .. tagad viss darbojas, kā vēlējos.. tikai viens - paliek tukša līnija, kā no tā atbrīvoties? Vēlreiz paldies!
  22. Principā jau der jebkāda metode, kuras rezultātā tiktu nodzēsta konkrētā rindiņa *.xml failā.. nez' *.php k-kāds search and replace.. Piemēram, kā šeit.. ja tā ir iespējams..
  23. Paldies par ievirzīšanu sliedēs.. lieta tik viena - laiks iet un tāpēc tā steidzos un lūdzu.. *.xml encoding ir.. un jautājums - kāpēc "id" nevar sākties ar ciparu? (šajā gadījuma tas arī tiek izmantots iekš flash datagrid komponentā kā cipars)
×
×
  • Create New...