Zeilenumbrüche gehen verloren

ahykes

Erfahrenes Mitglied
Hallo Zusammen!

Folgendes Script gibt mir im Modus 'READ' den Inhalt der angegebenen Datei in eine Textarea aus. Dann wird etwas in die Textarea eingegeben und dann auf Speichern gedrückt. Damit wird das Script im Modus 'WRITE' aufgerufen. Eigentlich gibt es diese Art von Fällen hier im Forum ja zu hauf. Eines ist jedoch neu: Die Zeilenumbrüche gehen verloren. Achja: Das Script wird per Ajax ausgeführt.
PHP:
<?

	if($_SESSION['$SYSTEM_PASSED'] === false){
		header("location: index.php");
		exit;
	};
	header('Content-type: text/html; charset=ISO-8859-1');
  	switch($_GET['MODE']){
	case 'WRITE':
		$FILECONTENT = html_entity_decode(stripslashes($_GET['CONTENT']), ENT_QUOTES);
		$FILEHANDLE = fopen($_GET['FILE'], "w");
		fwrite($FILEHANDLE, $FILECONTENT);
		fclose($FILEHANDLE);
	
	break;
	
	case 'READ':
		$FP_ARRAY = file_get_contents ($_GET['FILE']);
		echo $FP_ARRAY;
	break;
	
	}
?>
Habt ihr Rat?
 
Hast du mal in der Datei nachgeschaut, ob sie dort vorhanden sind?


Noch drei Tipps: Schreibe Variablennamen lieber klein oder in der Camel-Case-Schreibweise; Großschreibung wird eher bei Konstanten verwendet. Außerdem sehe ich durch die direkte Angabe der zu schreibenden Datei mittel $_GET['FILE'] ein gravierendes Sicherheitsrisiko. Zudem solltest du die Daten vor der Ausgabe durch htmlspecialchars() schicken.
 
Ja, in der Datei fehlen die Umbrüche auch. Damit wäre dann ausgeschlossen, dass sie durch AJAX verloren gehen.
 
Dann geh’ noch einen Schritt weiter zurück: lass dir vor der XMLHttpRequest-Anfrage die Werte ausgeben.
 
Code:
function editFile(){

	var lastDir = document.directoryEntries.curdir.value;
	var curDir = curSelection;

	var queryFile = 'read_write_File.php?&MODE=READ&FILE=' + curSelection;
	document.getElementById('editWindow').style.display = 'block';
	document.getElementById('filecontent').value= 'Lade Daten ...';
	AJAXREQ('GET','READ', 'modules/' + queryFile);
}
function writeFile(){

	var lastDir = document.directoryEntries.curdir.value;
	var curDir = curSelection;
	var newCONTENT = document.getElementById('filecontent').value;
	alert(newCONTENT);
	var queryFile = 'read_write_File.php?&MODE=WRITE&FILE=' + curSelection + '&CONTENT=' + newCONTENT;
	AJAXREQ('GET','WRITE', 'modules/' + queryFile);
	
}
Aus AJAXREQ werden dann je nach MODE verschiedene Funktionen gestartet:
Code:
function fillEditWindow(sourcecode){ //MODE= READ
	document.getElementById('filecontent').value = sourcecode;
}
function closeEditWindow(sourcecode){//MODE= WRITE
	document.getElementById('editWindow').style.display = 'none';
}
Code:
			switch(req.readyState) {                            
				case 4:                            
				if(req.status!=200) {                                
					alert("Fehler:"+req.status);                             
				}else{    
					if(MODE == 'READ') fillEditWindow(req.responseText);
					if(MODE == 'WRITE')  { closeEditWindow(); alert(req.responseText); }
				}
				break;                                                
				
				default:                                
					return false;                            
				break;                             
			}
War es das was Du sehen wolltest?
 
Schick die Daten mal vorher durch dir encodeURIComponent()-Funktion. Übrigens solltest du Anfragen, die Daten auf der Serverseite verändern, nur als POST-Anfragen senden.
 
Zurück