Zeilenumbruch als unbekanntes Zeichen

g-zus

Erfahrenes Mitglied
Hi leute,

ich habe hier im Forum ein Script zur Erstellung von Dumps gefunden und wollte das Ergebnis das das Script ausspuckt in eine File speichern.

leider kommt es dann vor, dass wenn ich die Datei mit dem Texteditor öffne, statt Zeilenumbrüchen nicht nur eine neue Zeile begonnen wird, sondern im Texteditor auch noch dieses rechtecki9ge schwarz ausgefüllte Symbol erscheint, dass angezeigt wird wenn ein unbekanntes Symbol/Zeichen angegeben wurde (oder wofür das auch immer steht!).

ich hoffe ihr versteht was ich meine.

Kann mir jemand helfen und sagen wie ich das beheben kann?
Wenn ich nämlich dann den dump ausführen will werden fehlermeldungen aufgrund eines falschen syntax angezeigt.

Ich hoffe ihr könnt mir helfen....
 
yo, bevor ich es vergesse, hier dann noch der leicht veränderte Code des Scriptes:

PHP:
<?php
$dbname = '';
$host = '';
$benutzer = '';
$pass = '';

$nl = ""; //<br>
$nl .= chr(13).chr(10);


if (!$link = mysql_connect($host, $benutzer, $pass)) {
	print 'Keine Verbindung zur Datenbank möglich';
	exit;
}

$result = mysql_list_tables($dbname);

if (!$result) {
	print "DB Fehler, Tabellen können nicht angezeigt werden\n";
	print 'MySQL Fehler: ' . mysql_error();
	exit;
}

while ($row = mysql_fetch_row($result)) {
	$tabelen .= $row[0]."%%";
}

mysql_free_result($result);

mysql_select_db($dbname, $link)
	or die("Kann die Datenbank $dbname nicht auswählen");

$tabelen = explode ("%%", $tabelen);

$file = "#####################################################$nl".
	 "## $nl".
	 "## MySQL-Dump$nl".
	 "## createt from http://www.hgwinterthur.ch/ $nl".
	 "## $nl".
	 "## Host: ".$host." Datenbank : $dbname$nl".
	 "## $nl".
	 "#####################################################$nl";


for($q=0;$q<count($tabelen)-1;$q++)
{
	$res = mysql_query("select * from ".$tabelen[$q], $link);

	$nummer = $q+1;
	$nummer = "(".$nummer.") ";

	if($res){
		$file .= "$nl$nl$nl".
			 "##########################################$nl".
			 "#$nl".
			 "# Tabellenstruktur für Tabelle".$nummer.$tabelen[$q]."$nl".
			 "#$nl".
			 "##########################################$nl$nl";

		$file .= "CREATE TABLE ".$tabelen[$q]."($nl";
		
		$result =  mysql_query("SHOW FIELDS FROM ".$tabelen[$q], $link);
		
		while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
			if(!$row['Null'])
				$null[$i] = "NOT NULL";

			if($row['Default']!='')
				$Default[$i] = "DEFAULT '".$row['Default']."'";

			$nam[$q][$i] = "   ".$row['Field']." ".$row['Type']." ".$Default[$i]." ".$null[$i];

			$i++;
		}
		$i=0;

		mysql_free_result($result);
		
		for($r=0; $r<count($nam[$q]); $r++)
		{
			if($nam[$q][$r+1]=='')
				$sw = $nam[$q][$r].$nl;
			elseif($nam[$q][$r])
				$sw= $nam[$q][$r].",".$nl;

			$file .=  $sw;
		}
		$file .=  ");$nl$nl";
	}

	$sql = "select * from ".$tabelen[$q];
	$res = mysql_query($sql,$link);

	$file .=  "#$nl# Daten für Tabelle".$nummer."'".$tabelen[$q]."'$nl#$nl$nl";
	
	while($row = mysql_fetch_array($res, MYSQL_ASSOC)){
		$KEYS = "";
		$VALS = "";

		while(list($k,$v)=each($row)) {
			if($VALS!="") $VALS .= ", ";
			if($KEYS!="") $KEYS .= ", ";
			$KEYS .= $k;
			$VALS .= "'".$v."'";
		}
		$INSERT =  "INSERT INTO ".$tabelen[$q]." VALUES (".$VALS.");$nl";
		$file .=  $INSERT;
	}
}

// file abspeichern und fertig ;)
$backup_file = "backup_tabelle.txt";

if(file_exists($backup_file)){

   $fp = fopen($backup_file, "w");
   fwrite($fp,$file);
   fclose($fp);
   echo "Backup wurde aktualisiert!";

}else{
   
   $fp = fopen($backup_file, "w");
   fwrite($fp,$file);
   fclose($fp);
   echo "Backup wurde erstellt!";

}
?>

Eigentlich habe ich nur ganz unten den echo-Befehl durch das abspeichern der Ergebnise in der Variable $file in eine datei ersetzt.

Leider kommt dann aber das ooben genannte Problem zum vorschein.
 
Das Problem liegt wahrscheinlich hier:
PHP:
$nl .= chr(13).chr(10);
Probier mal mit anderen Werten für $nl rum. Also z.B. "\n", "\n\r", "\r\n"... kommt darauf an, mit welchem OS du arbeitest. Da gibt´s unterschiede in den Newline-Syntax...
 
yo, hab ich vergessen zu sagen:

also bei den Zeilenumbrüchen, die das Script selbst durch dieses $nl erzeugt konnte ich bereits was dagegen machen!

Da habe ich halt einfach

PHP:
$nl = "/n";

gesetzt.
Leider das selbe Problem, weshalb ich dann $nl einfach leer gesetzt habe.
Sah dann unuebersichtlich aus, aber half wenigstens gegen den Großteil der "schwarzen Kästchen"!

Das Problem ist halt, dass unter den Tabellen auch eine Tabelle eines Newsscriptes ist und darin ja auch Zeilenumbrüche vorkommen.
Diese konnte ich noch nicht entfernen.

Hat da wer eine Idee?

Edit:
~~~~

Mir ist gerade die Idee gekommen dass ich bei dem Newsscript beim Abspeichern der News einen Zeilenumbruch, also "/n" durch ein eigenes Symbol, z.B. [br] mit String-Replace ersetze.
Und bei der Ausgabe einfach wieder umwandeln von [br] zu < br >
 
Zuletzt bearbeitet:
wah ja, okok!
hab ich ja richtig in der PHP-File drinnen gehabt.

Ansonsten hätte er ja statt einer neuen Zeile "/n" ausgegeben! :)

Leider hat die Lösung auch nicht funktioniert, da da oben gennante Script irgendwie nicht funktionierende Dumps erzeugt.
Bei PHP selbst zeigt es einen Parse-Fehler und in PHPMYADMIN zeigt es einen möglichen SQL-Parser-Fehler an.

Naja, ich werd mich ein andermal wieder damit beschäftigen! 8)
 
Zurück