[PHP/XML]

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi, ik heb geprobeerd een xml file te laden in een textarea(form) in een php file. Om deze vervolgens te editten. Maar waneer de data wordt weggeschreven klopt de opzet van de xml file niet meer. De php code was ook bedoelt voor txt files.

de xml file is als volgt opgebouwd :
<?xml version="1.0" encoding="UTF-8"?>
<player showDisplay="yes" showPlaylist="no" autoStart="yes">
<song path="files/filename.mp3" title="titel - titel" />
</player>
Wat ik doen is hetvolgende : Alle (mp3) files uit de dir ../files worden weggeschreven in de xml file. Op deze manier kan ik mp3's uploaden en functie (knop) in de php file de xml file 'opnieuw laten opzetten'.

Maar is er een speciale techniek om dit te doen in PHP ?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Hoe is de opzet na het bewerken dan? En hoe zou je het dan willen? Wellicht moet je htmlentities() gebruiken bij het printen van de XML content in de textarea. Mischien dat je nog moet strippen met stripslashes() na het submitten? Geef anders een beetje code, dan kan ik beter zien wat er mis gaat.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hey michali

Hiermee laad ik die xml file :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?PHP
$yourFile = "playlist.xml";
if(!$_POST['submit']) {
$fs = fopen($yourFile, "r");
while(!feof($fs)) {
$fileData = fread($fs, 1024);
}
}else{
$fs = fopen($yourFile, "w");
fwrite($fs, $_POST['fileData']);
}
fclose($fs);
?>


de textarea:
PHP:
1
<textarea name="fileData" rows=5 cols=40><?PHP print $fileData; ?></textarea>


Hij Laad de text goed in ..maar wanneer er wordt opgeslagen krijgt de xml file deze structuur :
PHP:
1
2
3
4
5
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<player showDisplay=\"yes\" showPlaylist=\"no\" autoStart=\"yes\">
    <song path=\"files/meisje.mp3\" title=\"Spacekees - Ik wil een meisje\" />
    <song path=\"files/watskeburt.mp3\" title=\"Baksteen - Watskeburt1\" />
</player>


Waardoor de xml file onleesbaar wordt voor de player .

kan je me helpen denk je?

Acties:
  • 0 Henk 'm!

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Om dat tegen te gaan moet je de stripslashes functie gebruiken.

Edit: waarschijnlijk heb je magic_quotes_gpc aanstaan. Hou er rekening mee dat dat niet bij alle hosts zo is. Dat kan ervoor zorgen dat als je een string hebt waarin effectief \" moet staan (voor PHP dus \\""), je deze bij een extra stripslashes() ook wegknipt. Het beste kan je met de functie get_magic_quotes_gpc controleren of deze aanstaat en zoja, al je variables meteen stripslashen. Zo kan je ervan uit gaan in je verdere code dat je al je strings moet controleren op slashes.

[ Voor 75% gewijzigd door dingstje op 08-08-2005 13:56 ]

If you can't beat them, try harder


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
En je moet htmlentities gebruiken bij <?PHP print $fileData; ?>. Stel dat je een </textarea> tag in je XML hebt staan, dan gaat het dus fout. Wel belangrijk dus.

[ Voor 24% gewijzigd door Michali op 08-08-2005 14:09 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb er toch enige hulp bij nodig zie ik nou. Ik kreeg de waarde '1' waneer ik controleerde op magic_quotes_gpc. Dus deze staat aan.

Nou heb ik de code zo opgesteld :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?PHP
$yourFile = "mp3player.xml";
if(!$_POST['submit']) {
$fs = fopen($yourFile, "r");
while(!feof($fs)) {
$fileData = fread($fs, 1024);
}
}else{
$fs = fopen($yourFile, "w");
$new = htmlspecialchars(stripslashes($_POST['fileData']));
fwrite($fs, $new);
}
fclose($fs);
?>


Maar ik krijg toch de slashes bij de " tekens staan wanneer ik de data opsla.
De functie stripslaches werkt wel .. want als ik de data van de textarea laad met deze functie erbij dan worden er geen slaches voor de " afgebeeld. (maar ze zijn er in feite wel in de xml)..

wat moet ik doen? magic_quotes_gpc uitzetten? is er geen andere weg.. ?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Bekijk even exact wat de code doet, wat de stripslashes functie doet (zie php.net) en wat htmlspecialchars doet (weer php.net). Lees vervolgens nog even aandachtig je code door om exact te zien waar wat gebeurt.

magic_quotes_gpc houdt verder in dat over ale variabelen in de $_GET $_POST en $_COOKIE een addslashes() gehaald is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey Janoz

Bedankt voor de aanmoedigende woorden . Nou werkt het .
Maaarrr ik wil verder nu ;). Om het geheel wat gebruikersvriendelijker te maken.

Ten eerste heb ik een knop gemaakt die te text van de textarea verwijderd en er
het eerste deel van de xml file in plakt :
<?xml version="1.0" encoding="UTF-8"?>
<player showDisplay="yes" showPlaylist="no" autoStart="yes">
In dezelfde php file zit ook een upload script. Deze geeft een lijst weer van de ge-uploade files. Achter elke file staat een url gebruik. Wanneer hierop wordt geklikt wilde ik graag dat hetvolgende in de text area wordt toegevoegd
<song path="$upload_dir$file" title="titel">
$upload_dir$file: zijn variabele gebruik door het upload script zelf
titel: een variabele die zelf kan worden ingevult doormiddel van een javascript var= promt functie.

Je zou bijna zeggen .. hoe kan dit nog fout gaan.. Maar ik krijg de $upload_dir$file niet correct in de text area.

Dit is de code voor het oproepen van de filelist :
PHP:
1
2
3
4
5
6
7
8
9
10
$handle=opendir($upload_dir);
$filelist = "";
while ($file = readdir($handle)) {
   if(!is_dir($file) && !is_link($file)) {
      $filelist .= "<br><a href='$upload_dir$file'>".$file."</a>";
      $filelist .= "    <a href='?del=$upload_dir$file' title='delete'>[delete]</a>";
      $filelist .= "    <a href='javascript: void(0);' title='gebruik' onclick='addsong();'>[gebruik]</a>";

   }
}


Mijn vraag is, en ik heb er zelf al wat mee zitten te experimenten, Hoe kan ik de filename meegeven wanneer ik op [gebruiken] klik. (want de directorie blijft toch hetzelfde). Zodat de pagina niet opnieuw hoeft te laden.


Alvast bedankt. Ik ga zelf ook nog even experimenteren. :9


Nog enkele codes

text toevoegen aan de textarea :
<script language="javascript" type="text/javascript">
function addbegin() {
document.playlist.fileData.value = '';
document.playlist.fileData.value += '<?php echo $line1; ?>';
document.playlist.fileData.value += '<?php echo $line2; ?>';
}

function addsong() {
var titel = prompt('De gewenste titel:', '');
document.playlist.fileData.value += '<?php echo $line4; ?>';
document.playlist.fileData.value += '<?php echo $line5; ?>'; // De Filename :(
document.playlist.fileData.value += '<?php echo $line6; ?>';
document.playlist.fileData.value += titel;
document.playlist.fileData.value += '<?php echo $line7; ?>';
}

function addend() {
document.playlist.fileData.value += '<?php echo $line3; ?>';
}
</script>
Pagina: 1