Xml / php

Status
Niet open voor verdere reacties.

Mugaru

Gebruiker
Lid geworden
10 mei 2011
Berichten
84
Hallo Helpmij-ers,

Ik had niet gedacht dat ik zelf een vraagje zou stellen in het PHP forum :$.. maar het is blijkbaar toch echt nodig.

Ik ben bezig met een systeem waar mensen geluiden kunnen uploaden, en die vervolgens in een playlist komen te staan.

Ik zit alleen met een probleem in de XML file namelijk het volgende:

Code:
<playlist> 
<trackList> 

<track>
<title></ title>
<location> </location/>
</track>

<track>
<title></ title>
<location> </location/>
</track>

</trackList>
</playlist>

Zoals jullie zien, staan hier alle tracks tussen <tracklist> </trackList> en <playlist> </playlist>
Nu moet dit via de PHP (direct met de Upload) goed worden gezet, dus de nieuwe track, moet er bij worden gevoegt..

Code:
<playlist> 
<trackList> 

<track>
<title></ title>
<location> </location/>
</track>

<track>
<title></ title>
<location> </location/>
</track>

<<<<< >>>>>>>    -- hier moet de nieuwe track worden toegevoegt.

</trackList>
</playlist>

Ik weet alleen niet hoe ik via PHP en XML kan aangeven dat hij het tussen die 2 tags moet zetten, en niet een nieuwe <tracklist> opent.

Ik krijg hem namelijk wel netjes tussen de playlist tags in, maar ik ben niet verder gekomen dan dat hij een hele nieuwe tracklist opent.

Iemand die mij hiermee kan helpen?


Mug
 
Laatst bewerkt:
SimpleXML lukt het me helemaal niet mee,
Ik gebruik nu DOM XML en komt niet verder als het volgende:

Code:
<?xml version="1.0"?>
<playlist>
<trackList> 

<track>
<title/>
<location/>
</track>

<track>
<title/>
<location/>
</track>

<track>
<title/>
<location/>
</track>


</trackList><trackList/><trackList><track><title>testje.mp3</title><location>uploads/383626_2970819000518_1563033227_32851748_542679072_n.jpg</location></track></trackList></playlist>

Hier klopt het weer niet met die tracklist nodes.

Overigens is dit het stukje code in mijn PHP:
Code:
$dom = new DOMDocument();
$dom->load('playlist.xml');


//tracklistnode aanmaken
$tracklistNode = $dom->createElement('trackList');

// tracknode aanmaken
$trackNode = $dom->createElement('track');
$tracklistNode->appendChild($trackNode);

//titel erin zetten
$titleNode = $dom->createElement('title');
$titleTextNode = $dom->createTextNode($uploadedfile);
$titleNode->appendChild($titleTextNode);
$trackNode->appendChild($titleNode);

//location erin zetten
$locationNode = $dom->createElement('location');
$locationTextNode = $dom->createTextNode($target);
$locationNode->appendChild($locationTextNode);
$trackNode->appendChild($locationNode);
 
Laatst bewerkt:
Wellicht handig om je PHP-code er ook bij te plaatsen ;)
 
Code:
<?php 
// require_once('connection/config.php');
 $target = "uploads/"; 
 $target = $target . basename( $_FILES['uploaded']['name']) ; 
 $uploadedfile =  basename( $_FILES['uploaded']['name']) ; 
// $url = "http://127.0.0.1/";
 $ok=1; 
// $query = mysql_query("INSERT INTO muziek VALUES ('1', 1234t, '1')");
 //This is our size condition 
 if ($uploaded_size > 350000) 
 { 
 echo "Your file is too large.<br>"; 
 $ok=0; 
 } 
 
 //This is our limit file type condition 
 if ($uploaded_type =="text/php") 
 { 
 echo "No PHP files<br>"; 
 $ok=0; 
 } 
 
 //Here we check that $ok was not set to 0 by an error 
 if ($ok==0) 
 { 
 Echo "Sorry, het geluidje is niet geupload"; 
 } 
 
 // als alles goed is
 else 
 { 
 if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) 

 { 
 // mysql_query("INSERT INTO muziek VALUES ('', '$target', '1234')");
 echo "Het bestand ". $uploadedfile ." is geupload, toegevoegt aan de database, en word binnen enkele ogenblikken toegevoegt aan het soundboard"; 
 echo "<br />";
 echo "<br />";
 echo "Controleer of je file is geupload doormiddel van de onderstaande link: "; 
 echo"<a href=\" ";
 echo "".$target."";
 echo "\">Linkje</a>";

 
// <location>mp3/test1.mp3</location>
  //        <title>Johny</title>
 

 // --->> upload

 //XML file word geopend
$dom = new DOMDocument();
$dom->load('playlist.xml');


//tracklistnode aanmaken
$tracklistNode = $dom->createElement('trackList');

// tracknode aanmaken
$trackNode = $dom->createElement('track');
$tracklistNode->appendChild($trackNode);

//titel erin zetten
$titleNode = $dom->createElement('title');
$titleTextNode = $dom->createTextNode($uploadedfile);
$titleNode->appendChild($titleTextNode);
$trackNode->appendChild($titleNode);

//location erin zetten
$locationNode = $dom->createElement('location');
$locationTextNode = $dom->createTextNode($target);
$locationNode->appendChild($locationTextNode);
$trackNode->appendChild($locationNode);


 $trackNode = $dom->documentElement->getElementsByTagName("track");
// plaatst een nieuwe :')
 $trackNode = $dom->documentElement->insertBefore($dom->createElement('trackList'));

//re-save
$dom->save("playlist.xml");
 //--->>> Upload
 
 
 } 
 else 
 { 
 echo "Sorry, probleem tijdens het uploaden van je bestand."; 
 } 
 } 
 ?> 
 </div> <!-- #players -->

	</div> <!-- #content -->

</body>
</html>


Hier de hele code, eerst wilde ik het uit een database gaan halen, dus je kan het een en ander aan "commentaar" tegenkomen wat "code" is :p
 
Laatst bewerkt:
en dit werkt ook niet?
PHP:
//XML file word geopend
$se_element 			= simplexml_load_file('test.xml');
$se_tracklist_element	= $se_element->playlist->tracklist;

// Build a new track-element
$se_track_element		= $se_tracklist_element->addChild('track');
$se_track_element->addChild('title', 'nieuwe titel');
$se_track_element->addChild('location', 'nieuwe locatie');

echo $se_element->asXML();
 
Fatal error: Call to a member function addChild() on a non-object in C:\xampp\htdocs\soundboard\upload.php on line 122

Die melding krijg ik zodra ik jouw code gebruik...
 
Deze versie beter?
Ik had $se_element->playlist terwijl dat niet nodig was, en ook tracklist i.p.v. trackList.
PHP:
//Lokale XML-bestand inladen
$se_element             = simplexml_load_file('test.xml');
//Het juiste element pakken waar je iets aan toe wilt voegen
$se_tracklist_element   = $se_element->trackList;
 
// Een nieuw child-element toevoegen
$se_track_element       = $se_tracklist_element->addChild('track');
// Aan het child-element een nieuw child-element toevoegen met een waarde
$se_track_element->addChild('title', 'nieuwe titel');
// Nogmaals aan het child-element een nieuw child-element toevoegen met een waarde
$se_track_element->addChild('location', 'nieuwe locatie');

// Het nieuwe XML-document weergeven
print_r($se_element);
 
Laatst bewerkt:
ik snap er nu niets meer van...krijg alleen maar errors....:shocked:
wat moet ik nou doen?
 
@mcfreak: Ik heb meer commentaar toegevoegd aan het script, wellicht begrijp je nu beter wat het doet
 
ik krijg nu deze errors

Notice: Undefined index: uploaded in K:\8.5\root\uploadding\php.php on line 4

Notice: Undefined index: uploaded in K:\8.5\root\uploadding\php.php on line 5

Notice: Undefined variable: uploaded_size in K:\8.5\root\uploadding\php.php on line 10

Notice: Undefined variable: uploaded_type in K:\8.5\root\uploadding\php.php on line 17

Notice: Undefined index: uploaded in K:\8.5\root\uploadding\php.php on line 32
Sorry, probleem tijdens het uploaden van je bestand.

Deze versie beter?
Ik had $se_element->playlist terwijl dat niet nodig was, en ook tracklist i.p.v. trackList.
PHP:
//Lokale XML-bestand inladen
$se_element             = simplexml_load_file('test.xml');
//Het juiste element pakken waar je iets aan toe wilt voegen
$se_tracklist_element   = $se_element->trackList;
 
// Een nieuw child-element toevoegen
$se_track_element       = $se_tracklist_element->addChild('track');
// Aan het child-element een nieuw child-element toevoegen met een waarde
$se_track_element->addChild('title', 'nieuwe titel');
// Nogmaals aan het child-element een nieuw child-element toevoegen met een waarde
$se_track_element->addChild('location', 'nieuwe locatie');

// Het nieuwe XML-document weergeven
print_r($se_element);

hoe en waar moet je m plaatsen?
 
Laatst bewerkt door een moderator:
Het is de bedoeling dat je hem in een PHP Script zet.
En de test.xml aanpast naar jou XML bestandje.

Zodra je het php bestand oproept.
 
php was php en xml was ook al xml,maar het werkt niet,kan je anders jou versie versturen?(ja ik weet het,ik ben lui ;))

ow wacht even

ik heb m nu verandert maar ik krijg nu dit:

SimpleXMLElement Object ( [trackList] => Array ( [0] => SimpleXMLElement Object ( [track] => Array ( [0] => SimpleXMLElement Object ( [title] => SimpleXMLElement Object ( ) [location] => SimpleXMLElement Object ( ) ) [1] => SimpleXMLElement Object ( [title] => SimpleXMLElement Object ( ) [location] => SimpleXMLElement Object ( ) ) [2] => SimpleXMLElement Object ( [title] => SimpleXMLElement Object ( ) [location] => SimpleXMLElement Object ( ) ) [3] => SimpleXMLElement Object ( [title] => nieuwe titel [location] => nieuwe locatie ) ) ) [1] => SimpleXMLElement Object ( ) [2] => SimpleXMLElement Object ( [track] => SimpleXMLElement Object ( [title] => upload/music/testje.mp3 [location] => upload/plaatje/plaatje.jpg ) ) ) )
 
Laatst bewerkt door een moderator:
Ok� dat betekent dat je goed op weg bent.

Dan moet je het volgende veranderen:

van:
Code:
print_r($se_element);
naar:
Code:
$se_element->asXML("text.xml");

Dan gaat hij het opslaan ;-)
 
Beste "mcfreak", wanneer je reageert zonder dat er een reactie van iemand anders tussen zit hebben we liever dat je je bericht aanpast zodat het overzicht wat bewaard blijft ;)

Zo te merken zijn jullie allebei geholpen :)
 
Code:
<?php 
// require_once('connection/config.php');
 $target = "uploads/"; 
 $target = $target . basename( $_FILES['uploaded']['name']) ; 
 $uploadedfile =  basename( $_FILES['uploaded']['name']) ; 
// $url = "http://127.0.0.1/";
 $ok=1; 
// $query = mysql_query("INSERT INTO muziek VALUES ('1', 1234t, '1')");
 //This is our size condition 
 if ($uploaded_size > 350000) 
 { 
 echo "Your file is too large.<br>"; 
 $ok=0; 
 } 
 
 //This is our limit file type condition 
 if ($uploaded_type =="text/php") 
 { 
 echo "No PHP files<br>"; 
 $ok=0; 
 } 
 
 //Here we check that $ok was not set to 0 by an error 
 if ($ok==0) 
 { 
 Echo "Sorry, het geluidje is niet geupload"; 
 } 
 
 // als alles goed is
 else 
 { 
 if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) 

 { 
 // mysql_query("INSERT INTO muziek VALUES ('', '$target', '1234')");
 echo "Het bestand ". $uploadedfile ." is geupload, toegevoegt aan de database, en word binnen enkele ogenblikken toegevoegt aan het soundboard"; 
 echo "<br />";
 echo "<br />";
 echo "Controleer of je file is geupload doormiddel van de onderstaande link: "; 
 echo"<a href=\" ";
 echo "".$target."";
 echo "\">Linkje</a>";

 
// <location>mp3/test1.mp3</location>
  //        <title>Johny</title>
 

 // --->> upload

 //XML file word geopend
$dom = new DOMDocument();
$dom->load('playlist.xml');


//tracklistnode aanmaken
$tracklistNode = $dom->createElement('trackList');

// tracknode aanmaken
$trackNode = $dom->createElement('track');
$tracklistNode->appendChild($trackNode);

//titel erin zetten
$titleNode = $dom->createElement('title');
$titleTextNode = $dom->createTextNode($uploadedfile);
$titleNode->appendChild($titleTextNode);
$trackNode->appendChild($titleNode);

//location erin zetten
$locationNode = $dom->createElement('location');
$locationTextNode = $dom->createTextNode($target);
$locationNode->appendChild($locationTextNode);
$trackNode->appendChild($locationNode);


 $trackNode = $dom->documentElement->getElementsByTagName("track");
// plaatst een nieuwe :')
 $trackNode = $dom->documentElement->insertBefore($dom->createElement('trackList'));

//re-save
$dom->save("playlist.xml");
 //--->>> Upload
 
 
 } 
 else 
 { 
 echo "Sorry, probleem tijdens het uploaden van je bestand."; 
 } 
 } 
 ?> 
 </div> <!-- #players -->

	</div> <!-- #content -->

</body>
</html>


Hier de hele code, eerst wilde ik het uit een database gaan halen, dus je kan het een en ander aan "commentaar" tegenkomen wat "code" is :p

hij doet het nog niet,maar moet ik hier iets mee doen?
 
Het principe is hier uitgelegd, als hiermee jouw probleem niet is opgelost stel ik voor dat je een eigen vraag start voor het overzicht.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan