Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
| Autor | Správa |
|---|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
Ahojte, moje akože xml má štruktúru
Kód: <user><name>meno1</name><coordinates>19.6694147222,48.32968</coordinates></user> <user><name>meno2</name><coordinates>17.1030725,48.1488916667</coordinates></user> je so vlastne pre google maps a teto môj súbor potom spracúvam ale ide o to že na zapisovanie, poprípade upravovanie používam niečo takéto Kód: // Generovanie na zápis $texttowrite = "<user><name>".diakritika($username)."</name><coordinates>$dlzka,$sirka</coordinates></user>\n";
// Otvorenie suboru na zistenie typu operacie $handle = fopen("data.xml", 'r'); // Precitanie suboru $datafile = fread($handle, filesize("data.xml")); fclose($handle); //overenie nicku if (strpos($datafile, "<name>".diakritika($username)."</name>")){ $prepiss = fopen("data.xml", 'w'); //nahradenie $textnew = preg_replace("(\<user><name>".diakritika($userdata["username"])."</name><coordinates>(.*?)\</coordinates></user>\n)is", $texttowrite, $datafile); // Zapis echo (fwrite($prepiss, $textnew) ? "<b>Údaje úspešne upravené</b><br><a href='index.php'>Pokračuj</a>" : "<b>Nastala chyba pri zápise dát<br><a href='/index.php'>Pokračuj</a></b>"); fclose($prepiss); } else{ $doplnenie = fopen("data.xml", 'a'); // Zapis echo (fwrite($doplnenie, $texttowrite) ? "<b>Údaje úspešne zapísané</b><br><a href='/index.php'>Pokračuj</a>" : "<b>Nastala chyba pri zápise dát<br><a href='/index.php'>Pokračuj</a></b>"); fclose($doplnenie); } unset($datafile);
a problém tu je v tom že občas, ale podla ma sa to stáva pri pridávanie nie upravovaní mi zmizne dosť veľká časť súboru
neviete prečo?
tuto som sa pýtal že ako to uzamknem ale myslím že to môj problém asi nevyrieši
http://www.pcforum.sk/len-1-moze-vykona ... 68592.html
lebo ono nezmizne tak že by chýbala čast tagu
štruktúra sa zachováva, preto si myslím že to bude spôsobené niečim ale neviem čím
Prosím za vaše názory a rady vopred ďakujem
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
ked pouzivas xml-ko, nechapem, preco s nim pracujes len ako s obycajnym retazcom... skus vyskusat tento skript (ak mas php5):
Kód: <?php $username = 'stenley'; $dlzka = 10; $sirka = 20; $coords = $dlzka.','.$sirka;
$file = 'data.xml';
$dom = new DOMDocument; $dom->formatOutput = TRUE; $dom->preserveWhiteSpace = FALSE; $dom->load($file);
$xpath = new DOMXPath($dom);
$entries = $xpath->query('//user[name = "'.$username.'"]/coordinates'); $node = $entries->item(0); if(is_object($node)) { $node->nodeValue = $coords; } else { $node = $dom->getElementsByTagName('user')->item(0)->cloneNode(TRUE); if(is_object($node)) { $node->childNodes->item(0)->nodeValue = $username; $node->childNodes->item(1)->nodeValue = $coords; $dom->documentElement->appendChild($node); } }
$dom->save($file); ?>
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
a mohol by si mi prosím vysvetliť ako to funguje?
lebo nezdá sa mi že to bude vyhovovať mojim potrebam
lebo v xml mam
<user><name>meno2</name><coordinates>17.1030725,48.1488916667</coordinates></user> ako jeden riadok
a ďalej ide o to že ak zadáš $username také ktoré už v xml je tak prepíše coordinates za nové a ak nieje tak pridá nový riadok
prepáš ale ja s xml moc robit neviem, ja ho viem len čítať nie vytvarať
Ďakujem
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
zdanie niekedy klame  vobec nevadi, ze mas jednotlivych userov na jednom riadku - na formatovani nezalezi, ak pouzijes triedy na pracu s xml... problem by mohol nastat prave v tvojom povodnom kode, ked by sa formatovanie tvojho xml zmenilo - musel by si to zmenit aj v tvojom skripte...
tento skript funguje presne ako tvoj, teda ak zadas existujuci username, tak sa prepisu len jeho coords... ak dany username v xmlku neexistuje, tak sa prida novy... jediny problem, ktory neriesi je, ak je xmlko prazdne, tak nevie pridat noveho usera, ale to by sa dalo jednoducho dorobit...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
Citácia: problem by mohol nastat prave v tvojom povodnom kode, ked by sa formatovanie tvojho xml zmenilo - musel by si to zmenit aj v tvojom skripte...
a co si myslel týmto?
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
ak by si mal formatovane xmlko, napr:
Kód: <user> <name>meno1</name> <coordinates>19.6694147222,48.32968</coordinates> </user> <user> <name>meno2</name> <coordinates>17.1030725,48.1488916667</coordinates> </user>
tak by si to nemohol vyhladavat (preg_replace) ako jeden riadok... alebo sa mylim?
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
no to xml je uložené nejak takto
Kód: <?xml version="1.0" encoding="UTF-8" ?> <data> <user><name>user_1</name><coordinates>19.6694147222,48.32968</coordinates></user> <user><name>user_2</name><coordinates>17.1030725,48.1488916667</coordinates></user> </data>
s tým že to </data> nakonci som pridával pri čítaní, aby to pralo ako xml
ale keď to bude takto, tak to pôjde?
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
nechapem, co ci pojde?
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas | |
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
jasne, ved vyskusaj... ak by to nahodou neslo, co nepredpokladam (ak mas php5), tak daj vediet...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
vyzerá to že to funguje ako má, len mám ešte otázočku, ked to budem čítať používam niečo takéto
Kód: $xml = simplexml_load_file('data.xml'); foreach($xml as $value) { $datas[] = array( "name" => (string)$value->name, "coordinates" => (string)$value->coordinates, ); } malo by to fungovať ale teraz ma zaujíma že ako získam coordinates z riadka kde viem len meno vtedy som mal niečo takéto Kód: $handle = fopen("data.xml", 'r'); $datafile = fread($handle, filesize("data.xml")); fclose($handle);
preg_match("(\<user><name>".diakritika($userdata["username"])."</name><coordinates>(.*?)\</coordinates></user>)", $datafile, $matches);
ako to spravím pomocou xml?
a posledná otázka, pri tom tvojom skripte sa nemôže stať že sa stratí časť súboru?
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
jednoducho, mas to tam aj naznacene:
Kód: $coords = $xpath->query('//user[name = "'.$username.'"]/coordinates')->item(0); if(is_object($coords)) { echo $coords->nodeValue; }
prvy radok z tohto kodu sluzi na vratenie vsetkych <coordinates>, kde <name> obsahuje prave zadany $username... item(0) vracia prvy vysledok... nodeValue vracia text medzi <coodinates></coordinates>
ci sa bude niekedy stracat obsah suboru, tak to ti neviem povedat, treba vyskusat...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
ok zatial to ide
a posledná otázka ako zmažem ten jeden záznam keď poznáme len username?

|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Kód: $entries = $xpath->query('//user[name = "'.$username.'"]'); $node = $entries->item(0); if(is_object($node)) { $dom->documentElement->removeChild($node); }
Viac info na http://sk.php.net/manual/en/class.domdocument.php
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas | |
Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
|