MySQL Alle Spaltennamen ersetzen

Joe

Erfahrenes Mitglied
Hallo,

Ich möchte, auf Grund von Rechtschreibfehlern, alle Tabellen durchsuchen und die Spaltennamen ersetzen.
Wäre es möglich noch dazu alle Wörter in den Spalten zu ersetzen?

Würde mich freuen über eine kleine Hilfestellung. Will das kurz und knapp in PHPMyAdmin als Befehl ausführen. So das zb jedes Wort 'Rechtscheibung' mit den Wort 'Rechtschreibung' ersetzt wird (als Spaltenname und als Spaltenwert).

Danke.
 
Ich kenne MySQL nicht besonders, aber das geht da bestimmt nicht 'einfach so'. Im Grunde gibt es 2 Varianten:

1. Schreibe jedes einzelne ALTER und UPDATE statement von Hand
2. Erzeuge eine Tabelle mit allen Tabellenamen und eine mit dem Spaltennamen alt und Spaltenanemn neu. Dann erstelle eine Prozedur mit je einem Cursor auf diese Tabellen und erzeuge nun damit dynamisches SQL für die ALTER und UPDATE statements indem du über die beiden Cursors loopst. Damit du eine Idee bekommst: http://dev.mysql.com/doc/refman/5.0/en/cursors.html
 
  • Gefällt mir
Reaktionen: Joe
Habs geschafft aber lasse es aus Faulheit mal unkommentiert.
Aber WARNUNG man sollte definitiv drauf achten welche Tabellen man parst, denn es ist zb sicher nicht erwünscht die Tabelle User oder PN zu bearbeiten in denen sich zb User mit ähnlichen Namen befinden. Da gibt es etliche Fallen also nochmals bitte nicht übernehmen wenn man nicht weiss was man da tut ;)

Anbei werden auch gleich noch der Inhalt der Dateien verändert:
PHP:
echo "<form action='main.php?section=****' method='post'>";
echo "<span style='color: #CDBE70'>Informationen zum Wort</span></td><td><input type='text' style='border: 1px solid black; background-color: grey;
			color:#FFFFFF; font-face:Verdana; font-weight:bold; font-size:10pt'  size='30' value='$word' name='word' />";
echo "<tr><td><input type='submit' style='font-family: Verdana; font-size: 8pt' name='formaction' value='OK' /></td>
</form>";

if ('POST' == $_SERVER['REQUEST_METHOD']) {
	if (isset($_POST['word']) AND isset($_POST['formaction'])) {
		$getTables4 = "SELECT 
							DISTINCT TABLE_NAME
						FROM 
							INFORMATION_SCHEMA.COLUMNS
						WHERE 
							TABLE_NAME LIKE '%{$word}%'
						AND 
							TABLE_SCHEMA='dbname'";
		$Tables4 = mysql_query($getTables4);
		if (!$Tables4) {
			die ('Etwas stimmte mit dem Query nicht1: '.$Tables4->error);
		}
		if (mysql_errno()) {		
			echo mysql_errno() . ": " . mysql_error(). "\n";
		}
		while ($row = mysql_fetch_assoc($Tables4)) {
			$table4=$row["TABLE_NAME"];
		}
		echo "<h2>Wort {$_POST['word']} im Tabellenname:</h2>";
		for ($i = 0; $i < count($table4); $i++) {
			echo "<p>Tabelle $table4</p>";
		}
		$getTables = "SELECT
						DISTINCT TABLE_NAME,
								COLUMN_NAME,
								CONCAT(
									CAST(COLUMN_NAME AS CHAR),
										' ',
									CAST(COLUMN_TYPE AS CHAR),
									IF(ISNULL(CHARACTER_SET_NAME),
										'',
									CONCAT(' CHARACTER SET ', CHARACTER_SET_NAME)),
									IF(ISNULL(COLLATION_NAME), '', CONCAT(' COLLATE ', COLLATION_NAME)),
										' ',
									IF(IS_NULLABLE = 'NO', 'NOT NULL ', ''),
									IF(IS_NULLABLE = 'NO' AND ISNULL(COLUMN_DEFAULT),
										'',
									CONCAT('DEFAULT ', QUOTE(COLUMN_DEFAULT), ' ')),
									UPPER(extra))
									AS column_definition
						FROM 
							INFORMATION_SCHEMA.COLUMNS
						WHERE
							COLUMN_NAME LIKE '%{$word}%'
						AND 
							TABLE_SCHEMA='dbname'";
		$Tables = mysql_query($getTables);
		if (!$Tables) {
			die ('Etwas stimmte mit dem Query nicht1: '.$Tables->error);
		}
		if (mysql_errno()) {		
			echo mysql_errno() . ": " . mysql_error(). "\n";
		}
		while ($row = mysql_fetch_assoc($Tables)) {
			
			$COLUMNNAME = $row["COLUMN_NAME"];
			$table=$row["TABLE_NAME"];
			$column_definition = $row["column_definition"];
			$defarray = explode(" ",$column_definition,2);
			$column_definition =$defarray[1];
			//echo "<p>$column_definition</p>"; die;
			if ($COLUMNNAME) {
				//$table_name3[$table][]=$COLUMNNAME;
				$table_name3[$table][$COLUMNNAME]=$column_definition;
			}
		}
		echo "<h2>Wort {$_POST['word']} im Spaltenname:</h2>";
		foreach ($table_name3 as $table3 => $collumns3) {
			for ($i = 0; $i < count($collumns3); $i++) {
				echo "<p>Tabelle $table3 Spaltename $collumns3[$i]</p>";
			}
		}
		$getAll = ("SELECT 
						TABLE_NAME,
						DATA_TYPE,
						COLUMN_NAME
					FROM 
						INFORMATION_SCHEMA.COLUMNS
					WHERE 
						TABLE_SCHEMA='dbname'
					AND
						(DATA_TYPE = 'varchar'
							OR
								DATA_TYPE = 'CHAR'
							OR	
								DATA_TYPE = 'TINYTEXT' 
							OR	
								DATA_TYPE = 'TINYBLOB'
							OR	
								DATA_TYPE = 'TEXT, BLOB' 	
							OR	
								DATA_TYPE = 'MEDIUMTEXT' 
							OR	
								DATA_TYPE = 'MEDIUMBLOB'
							OR	
								DATA_TYPE = 'LONGTEXT'
							OR	
								DATA_TYPE = 'LONGBLOB'
							OR	
								DATA_TYPE = 'ENUM'
							OR	
								DATA_TYPE = 'SET')
					AND 
						NOT	
							(TABLE_NAME LIKE '****%'
							OR
								TABLE_NAME LIKE 'phpbb%'
							OR
								TABLE_NAME LIKE '****%'
							OR
								TABLE_NAME LIKE 'chat%'
							OR
								TABLE_NAME LIKE 'PN%'
							OR
								TABLE_NAME LIKE 'USER%'
							OR
								TABLE_NAME LIKE 'Verify%'
							OR
								TABLE_NAME LIKE 'Verkaufslog%'
							OR
								TABLE_NAME LIKE 'Radio%'
							OR
								TABLE_NAME LIKE 'Clans%'
							OR
								TABLE_NAME LIKE 'Online%'
							OR
								TABLE_NAME LIKE 'Strahlung%'
							OR
								TABLE_NAME LIKE 'Aktion%'
							OR
								TABLE_NAME LIKE 'Clanmember%'
							OR
								COLUMN_NAME ='Username'
							OR
								COLUMN_NAME ='Clanname'	)");
		$All = mysql_query($getAll);
		if (mysql_errno()) {		
			echo mysql_errno() . ": " . mysql_error(). "\n";
		}
		$table_name=array();
		$j=-1;
		while ($row = mysql_fetch_assoc($All)) {
			$COLUMN_NAME = $row["COLUMN_NAME"];
			$table_name2 = $row["TABLE_NAME"];
			$i++;
			if ($COLUMN_NAME) {
				$table_name[$table_name2][]=$COLUMN_NAME;
				//echo "<p>$table_name $COLUMN_NAME</p>";
			}
		}
		//var_dump($table_name);
		echo "<h2>Inhalt der Spalten:</h2>";
		echo "<p>$i Spalten wurden überprüft</p>";
		foreach ($table_name as $table1 => $collumns) {
			//echo "<p><u>$table1</u></p>";
			//var_dump($collumns);
			for ($i = 0; $i < count($collumns); $i++) {
				$Col=$collumns[$i];
				//echo "<p>$Col</p>";
				$getAll = "SELECT 
								`$Col` 
							FROM 
								`$table1`";
				$All = mysql_query($getAll);
				if (mysql_errno()) {		
					echo mysql_errno() . ": " . mysql_error(). "\n";
				}
				while ($row = mysql_fetch_assoc($All)) {
					$Texte=$row[$Col];
					//echo "<p>$Texte</p>";
					$Founds=substr_count($Texte, $word);
					if ($Founds) {
						echo "<p>$Founds mal in Tabelle:$table1 Spalte:$Col</p>";
						$Inhaltsdata[$table1][]=$Col;
					}
					if (!is_string($Texte)) {
						$Typ=gettype($Texte);
						echo "<p>Tabelle $table1 mit Spaltenname:$Col hat den Datentyp $Typ</p>";
					}
				}
			}
		}
		$array3= base64_encode(serialize($table_name3));
		$Inhaltsdata2= base64_encode(serialize($Inhaltsdata));
		echo "<form action='main.php?section=****' method='post'>";
		echo "<span style='color: #CDBE70'>Erstzeen mit</span></td><td><input type='text' style='border: 1px solid black; background-color: grey;
					color:#FFFFFF; font-face:Verdana; font-weight:bold; font-size:10pt'  size='30' value='$wordnew' name='Wortneu' />
					<input type='hidden' value='$word' name='Wortalt' />
					<input type='hidden' value='$table4' name='Tabellen' />
					<input type='hidden' value='$array3' name='Spalten' />
					<input type='hidden' value='$Inhaltsdata2' name='Inhalt' />";
		echo "<tr><td><input type='submit' style='font-family: Verdana; font-size: 8pt' name='formaction2' value='Ändern' /></td>
		</form>";
		foreach (new DirectoryIterator('../Backend/templates') as $fileInfo) {
			    if($fileInfo->isDot()) continue;
				echo $fileInfo->getFilename() . "<br>\n";

		}
	}
	if (isset($_POST['formaction2'])) {
		$Wortalt = $_POST['Wortalt'];
		$Wortneu = $_POST['Wortneu'];
		$Tabellen = $_POST['Tabellen'];
		$Spalten = unserialize(base64_decode($_POST['Spalten']));
		$Inhalt = unserialize(base64_decode($_POST['Inhalt']));
		if (isset($Inhalt)){
			foreach ($Inhalt as $Tabelle1 => $Zeile1) {
				for ($i = 0; $i < count($Zeile1); $i++) {
					$col=$Zeile1[$i];
					if ($col!='Gepaeck') {
						$getAll = "UPDATE `$Tabelle1`
										SET 
											`$col` = replace(`$col`, '$Wortalt','$Wortneu')
										WHERE
											`$col` LIKE CONVERT( _utf8 '%{$Wortalt}%' USING latin1 )
										COLLATE latin1_german1_ci";
						$All = mysql_query($getAll);
						if (mysql_errno()) {		
							echo mysql_errno() . ": " . mysql_error(). "\n";
						}
					}
					else {
						$getGepaeck = "SELECT
											Items,
											Username
										FROM
											Gepaeck
										WHERE
											`$col` LIKE CONVERT( _utf8 '%{$Wortalt}%' USING latin1 )
										COLLATE latin1_german1_ci";
						$Gepaeck = mysql_query($getGepaeck);
						if (mysql_errno()) {		
							echo mysql_errno() . ": " . mysql_error(). "\n";
						}
						if (mysql_num_rows($Gepaeck) != 0) {
							while ($row = mysql_fetch_assoc($Gepaeck)) {
								$Items=$row["Items"];
								$Username=$row["Username"];					
								$Items = html_entity_decode($Items, ENT_QUOTES, 'UTF-8');
								$Items = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $Items);
								$getAll = "UPDATE `Gepaeck`
												SET 
													`Items` = '$Items'
												WHERE
													`Username` = '$Username'";
								$All = mysql_query($getAll);
							}
						}
					}
				}
			}
		}
		if (isset($Spalten)){
			foreach ($Spalten as $Tabelle => $Zeile1) {

				foreach ($Zeile1 as $Spalte => $Zinfo) {
					//$newTabelle = str_replace($Wortalt, $Wortneu, $Tabelle);
					$newZeile = str_replace($Wortalt, $Wortneu, $Spalte);
					//echo "<p>$newZeile</p>"; die;
					$getAll = "ALTER TABLE
										$Tabelle
									CHANGE 
										`$Spalte` 
										`$newZeile`
										$Zinfo";
					$All = mysql_query($getAll);
					if (mysql_errno()) {		
						echo mysql_errno() . ": " . mysql_error(). "\n";
					}
				}
			}
		}
		if (isset($Tabellen)){
			for ($i = 0; $i < count($Tabellen); $i++) {
				$oldTable =$Tabellen[$i];
				$newTabelle = str_replace($Wortalt, $Wortneu, $Tabellen[$i]);
				$getAll = "RENAME TABLE 
								`$oldTable` 
							TO 
								`$newTabelle`";
				$All = mysql_query($getAll);
				if (mysql_errno()) {		
				echo mysql_errno() . ": " . mysql_error(). "\n";
				}
			}
		}
		foreach (new DirectoryIterator('../Backend/templates') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
		}
		foreach (new DirectoryIterator('../Backend/includes') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
		}
		foreach (new DirectoryIterator('../Backend') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
		}
		foreach (new DirectoryIterator('../Backend/css') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
		}
		foreach (new DirectoryIterator('../Backend/pages') as $fileInfo) {
			    if($fileInfo->isDot()) continue;
				//echo $fileInfo->getFilename() . "<br>\n";
				$file=$fileInfo->getRealPath();
				
				//echo "<p>$file</p>"; 
			$proof=file_get_contents($file);
			//die;
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
				//echo $fileInfo->getFilename() . "<br>\n";
			}
		}
	}
}

Tja alles in allen bei mir klappts. Noch ne Anmerkung bei serialisierten Feldern muss man aufpassen weil sonst die Zahl der Strings nicht stimmt. Habe dazu aber ein fix mit eingebaut. Diejenigen die die Serialize() Funktion kennen/brauchen wissen was ich meine.

Naja vielleicht hilfts den einem oder andren. Ansonsten wäre auch nen Feedback sehr interessant, da es sicher noch einiges zu verbessern gibt.
 
Zuletzt bearbeitet:
Hab das Script nochmals überarbeitet und paar Fehler korrigiert.
Kommentare hinzugefügt.

Script ersetzt Wortfalsch mit Wortneu in
- MYSQL Spalteninhalt
- Spaltenname
- Tabellenname

- Pfadname
- Dateiinhalt

VORSICHT bei Tabellen die nicht bearbeitet werden sollten siehe Script.
PHP:
//// Formular Datenbankabfrage ob Wort in Tabellenname, Spaltenname oder im Inhalt der Spalten vorhanden ist.
echo "<form action='main.php?section=***' method='post'>";
echo "<span style='color: #CDBE70'>Informationen zum Wort</span></td><td><input type='text' style='border: 1px solid black; background-color: grey;
			color:#FFFFFF; font-face:Verdana; font-weight:bold; font-size:10pt'  size='30' value='$word' name='word' />";
echo "<tr><td><input type='submit' style='font-family: Verdana; font-size: 8pt' name='formaction' value='OK' /></td>
</form>";

if ('POST' == $_SERVER['REQUEST_METHOD']) {
	if (isset($_POST['word']) AND isset($_POST['formaction'])) {
		//// Alle Tabellennamen nach dem gesuchten Wort abfragen
		$getTables4 = "SELECT 
							TABLE_NAME
						FROM 
							INFORMATION_SCHEMA.COLUMNS
						WHERE 
							TABLE_NAME LIKE '%{$word}%'
						AND 
							TABLE_SCHEMA='dbname'";
		$Tables4 = mysql_query($getTables4);
		if (!$Tables4) {
			die ('Etwas stimmte mit dem Query nicht1: '.$Tables4->error);
		}
		if (mysql_errno()) {		
			echo mysql_errno() . ": " . mysql_error(). "\n";
		}
		while ($row = mysql_fetch_assoc($Tables4)) {
			$table4[]=$row["TABLE_NAME"];
		}
		echo "<h2>Wort {$_POST['word']} im Tabellenname:</h2>";
		for ($i = 0; $i < count($table4); $i++) {
			echo "<p>Tabelle $table4[$i]</p>";
		}
		//// Alle Spaltennamen nach dem gesuchten Wort abfragen. column-definition wird für den Alter befehl benötigt.
		$getTables = "SELECT
						DISTINCT TABLE_NAME,
								COLUMN_NAME,
								CONCAT(
									CAST(COLUMN_NAME AS CHAR),
										' ',
									CAST(COLUMN_TYPE AS CHAR),
									IF(ISNULL(CHARACTER_SET_NAME),
										'',
									CONCAT(' CHARACTER SET ', CHARACTER_SET_NAME)),
									IF(ISNULL(COLLATION_NAME), '', CONCAT(' COLLATE ', COLLATION_NAME)),
										' ',
									IF(IS_NULLABLE = 'NO', 'NOT NULL ', ''),
									IF(IS_NULLABLE = 'NO' AND ISNULL(COLUMN_DEFAULT),
										'',
									CONCAT('DEFAULT ', QUOTE(COLUMN_DEFAULT), ' ')),
									UPPER(extra))
									AS column_definition
						FROM 
							INFORMATION_SCHEMA.COLUMNS
						WHERE
							COLUMN_NAME LIKE '%{$word}%'
						AND 
							TABLE_SCHEMA='dbname'";
		$Tables = mysql_query($getTables);
		if (!$Tables) {
			die ('Etwas stimmte mit dem Query nicht1: '.$Tables->error);
		}
		if (mysql_errno()) {		
			echo mysql_errno() . ": " . mysql_error(). "\n";
		}
		while ($row = mysql_fetch_assoc($Tables)) {
			
			$COLUMNNAME = $row["COLUMN_NAME"];
			$table=$row["TABLE_NAME"];
			$column_definition = $row["column_definition"];
			$defarray = explode(" ",$column_definition,2);
			$column_definition =$defarray[1];
			//echo "<p>$COLUMNNAME</p>"; die;
			if ($COLUMNNAME) {
				//$table_name3[$table][]=$COLUMNNAME;
				$table_name3[$table][$COLUMNNAME]=$column_definition;
			}
		}
		echo "<h2>Wort {$_POST['word']} im Spaltenname:</h2>";
		foreach ($table_name3 as $table3 => $collumns3) {
			foreach ($collumns3 as $Spalte3 => $Zinfo3) {
				echo "<p>Tabelle $table3 Spaltename $Spalte3</p>";
			}
		}
		// Alle Spalteninhalte mit Textdaten abrufen. VORSICHT manche Tabellen oder Spalteninhalte sollten nicht ersetzt werden.
		$getAll = ("SELECT 
						TABLE_NAME,
						DATA_TYPE,
						COLUMN_NAME
					FROM 
						INFORMATION_SCHEMA.COLUMNS
					WHERE 
						TABLE_SCHEMA='dbname'
					AND
						(DATA_TYPE = 'varchar'
							OR
								DATA_TYPE = 'CHAR'
							OR	
								DATA_TYPE = 'TINYTEXT' 
							OR	
								DATA_TYPE = 'TINYBLOB'
							OR	
								DATA_TYPE = 'TEXT, BLOB' 	
							OR	
								DATA_TYPE = 'MEDIUMTEXT' 
							OR	
								DATA_TYPE = 'MEDIUMBLOB'
							OR	
								DATA_TYPE = 'LONGTEXT'
							OR	
								DATA_TYPE = 'LONGBLOB'
							OR	
								DATA_TYPE = 'ENUM'
							OR	
								DATA_TYPE = 'SET')
					AND 
						NOT	
							(TABLE_NAME LIKE '***'
							OR
								TABLE_NAME LIKE 'phpbb%'
							OR
								TABLE_NAME LIKE 'temp%'
							OR
								TABLE_NAME LIKE 'chat%'
							OR
								TABLE_NAME LIKE 'PN%'
							OR
								TABLE_NAME LIKE 'USER%'
							OR
								TABLE_NAME LIKE 'Verify%'
							OR
								TABLE_NAME LIKE 'Verkaufslog%'
							OR
								TABLE_NAME LIKE 'Radio%'
							OR
								TABLE_NAME LIKE 'Clans%'
							OR
								TABLE_NAME LIKE 'Online%'
							OR
								TABLE_NAME LIKE 'Strahlung%'
							OR
								TABLE_NAME LIKE 'Aktion%'
							OR
								TABLE_NAME LIKE 'Clanmember%'
							OR
								COLUMN_NAME ='Username'
							OR
								COLUMN_NAME ='Clanname'	)");
		$All = mysql_query($getAll);
		if (mysql_errno()) {		
			echo mysql_errno() . ": " . mysql_error(). "\n";
		}
		$table_name=array();
		$j=-1;
		while ($row = mysql_fetch_assoc($All)) {
			$COLUMN_NAME = $row["COLUMN_NAME"];
			$table_name2 = $row["TABLE_NAME"];
			$i++;
			if ($COLUMN_NAME) {
				$table_name[$table_name2][]=$COLUMN_NAME;
				//echo "<p>$table_name $COLUMN_NAME</p>";
			}
		}
		//// Alle Inhalte überprüfen ob Wort enthalten ist wenn ja dann Daten der Tabelle Spalten in Array speichern.
		echo "<h2>Inhalt der Spalten:</h2>";
		echo "<p>$i Spalten wurden überprüft</p>";
		foreach ($table_name as $table1 => $collumns) {
			//echo "<p><u>$table1</u></p>";
			//var_dump($collumns);
			for ($i = 0; $i < count($collumns); $i++) {
				$Col=$collumns[$i];
				//echo "<p>$Col</p>";
				$getAll = "SELECT 
								`$Col` 
							FROM 
								`$table1`";
				$All = mysql_query($getAll);
				if (mysql_errno()) {		
					echo mysql_errno() . ": " . mysql_error(). "\n";
				}
				while ($row = mysql_fetch_assoc($All)) {
					$Texte=$row[$Col];
					//echo "<p>$Texte</p>";
					$Founds=substr_count($Texte, $word);
					if ($Founds) {
						echo "<p>$Founds mal in Tabelle:$table1 Spalte:$Col</p>";
						$Inhaltsdata[$table1][]=$Col;
					}
					if (!is_string($Texte)) {
						$Typ=gettype($Texte);
						echo "<p>Tabelle $table1 mit Spaltenname:$Col hat den Datentyp $Typ</p>";
					}
				}
			}
		}
		// Arrays encodieren um sie im Formular zu verschicken
		$array3= base64_encode(serialize($table_name3));
		$Inhaltsdata2= base64_encode(serialize($Inhaltsdata));
		$tabell= base64_encode(serialize($table4));
		// Formular mit allen Daten welche betroffen sind mit neuen Wort abschicken.
		echo "<form action='main.php?section=***' method='post'>";
		echo "<span style='color: #CDBE70'>Erstzeen mit</span></td><td><input type='text' style='border: 1px solid black; background-color: grey;
					color:#FFFFFF; font-face:Verdana; font-weight:bold; font-size:10pt'  size='30' value='$wordnew' name='Wortneu' />
					<input type='hidden' value='$word' name='Wortalt' />
					<input type='hidden' value='$tabell' name='Tabellen' />
					<input type='hidden' value='$array3' name='Spalten' />
					<input type='hidden' value='$Inhaltsdata2' name='Inhalt' />";
		echo "<tr><td><input type='submit' style='font-family: Verdana; font-size: 8pt' name='formaction2' value='Ändern' /></td>
		</form>";
	}
	if (isset($_POST['formaction2'])) {
		$Wortalt = $_POST['Wortalt'];
		$Wortneu = $_POST['Wortneu'];
		// Arrays decodieren
		$Spalten = unserialize(base64_decode($_POST['Spalten']));
		$Inhalt = unserialize(base64_decode($_POST['Inhalt']));
		$Tabellen = unserialize(base64_decode($_POST['Tabellen']));
		//// 1. Spalteninhalte ersetzen
		if (isset($Inhalt)){
			foreach ($Inhalt as $Tabelle1 => $Zeile1) {
				for ($i = 0; $i < count($Zeile1); $i++) {
					$col=$Zeile1[$i];
					if ($Tabelle1!='Gepaeck') {
						$getAll = "UPDATE `$Tabelle1`
										SET 
											`$col` = replace(`$col`, '$Wortalt','$Wortneu')
										WHERE
											`$col` LIKE '%{$Wortalt}%'";
						$All = mysql_query($getAll);
						if (mysql_errno()) {		
							echo mysql_errno() . ": " . mysql_error(). "\n";
						}
						//echo "<p>TEST $col</p>";
					}
					// Fallback weil diese Tabelle serialisierte Daten enthält
					else {
						$getAll = "UPDATE `$Tabelle1`
										SET 
											`$col` = replace(`$col`, '$Wortalt','$Wortneu')
										WHERE
											`$col` LIKE '%{$Wortalt}%'";
						$All = mysql_query($getAll);
						if (mysql_errno()) {		
							echo mysql_errno() . ": " . mysql_error(). "\n";
						}
						$getGepaeck = "SELECT
											Items,
											Username
										FROM
											Gepaeck
										WHERE
											`$col` LIKE '%{$Wortalt}%'";
						$Gepaeck = mysql_query($getGepaeck);
						if (mysql_errno()) {		
							echo mysql_errno() . ": " . mysql_error(). "\n";
						}
						if (mysql_num_rows($Gepaeck) != 0) {
							while ($row = mysql_fetch_assoc($Gepaeck)) {
								$Items=$row["Items"];
								$Username=$row["Username"];	
								// Serialiserte Daten fixen (falsche Zeichenanzahl berichtigen)
								$Items = html_entity_decode($Items, ENT_QUOTES, 'UTF-8');
								$Items = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $Items);
								$getAll = "UPDATE `Gepaeck`
												SET 
													`Items` = '$Items'
												WHERE
													`Username` = '$Username'";
								$All = mysql_query($getAll);
							}
						}
					}
				}
			}
		}
		//// 2. Spaltennamen ersetzen
		if (isset($Spalten)){
			foreach ($Spalten as $Tabelle => $Zeile1) {

				foreach ($Zeile1 as $Spalte => $Zinfo) {
					//$newTabelle = str_replace($Wortalt, $Wortneu, $Tabelle);
					$newZeile = str_replace($Wortalt, $Wortneu, $Spalte);
					//echo "<p>$newZeile</p>"; die;
					$getAll = "ALTER TABLE
										$Tabelle
									CHANGE 
										`$Spalte` 
										`$newZeile`
										$Zinfo";
					$All = mysql_query($getAll);
					if (mysql_errno()) {		
						echo mysql_errno() . ": " . mysql_error(). "\n";
					}
				}
			}
		}
		//// 3. Tabellennamen ersetzen
		if (isset($Tabellen)){
			for ($i = 0; $i < count($Tabellen); $i++) {
				$oldTable =$Tabellen[$i];
				$newTabelle = str_replace($Wortalt, $Wortneu, $Tabellen[$i]);
				$getAll = "RENAME TABLE 
								`$oldTable` 
							TO 
								`$newTabelle`";
				$All = mysql_query($getAll);
				if (mysql_errno()) {		
				echo mysql_errno() . ": " . mysql_error(). "\n";
				}
			}
		}
		//// 4. Dateinamen Pfadnamen sowie Dateiinhalt mit neuen Wort ersetzen
		foreach (new DirectoryIterator('../Backend/templates') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
			$newName = str_replace($Wortalt, $Wortneu, $fileInfo->getPathname());
			if ($newName!=$fileInfo->getPathname()) {
				if ( rename ( $fileoldname=$fileInfo->getPathname(), $newName ) ) {
					echo "<p>$fileoldname wurde in $newName wurde umbenannt</p>";
				}
				else {
					echo "<p>Fehler: Datei $fileoldname konnte nicht umbenannt werden</p>";
				}
			}
		}
		foreach (new DirectoryIterator('../Backend/includes') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
			$newName = str_replace($Wortalt, $Wortneu, $fileInfo->getPathname());
			if ($newName!=$fileInfo->getPathname()) {
				if ( rename ( $fileoldname=$fileInfo->getPathname(), $newName ) ) {
					echo "<p>$fileoldname wurde in $newName wurde umbenannt</p>";
				}
				else {
					echo "<p>Fehler: Datei $fileoldname konnte nicht umbenannt werden</p>";
				}
			}
		}
		foreach (new DirectoryIterator('../Backend') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
			$newName = str_replace($Wortalt, $Wortneu, $fileInfo->getPathname());
			if ($newName!=$fileInfo->getPathname()) {
				if ( rename ( $fileoldname=$fileInfo->getPathname(), $newName ) ) {
					echo "<p>$fileoldname wurde in $newName wurde umbenannt</p>";
				}
				else {
					echo "<p>Fehler: Datei $fileoldname konnte nicht umbenannt werden</p>";
				}
			}
		}
		foreach (new DirectoryIterator('../Backend/css') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
			$newName = str_replace($Wortalt, $Wortneu, $fileInfo->getPathname());
			if ($newName!=$fileInfo->getPathname()) {
				if ( rename ( $fileoldname=$fileInfo->getPathname(), $newName ) ) {
					echo "<p>$fileoldname wurde in $newName wurde umbenannt</p>";
				}
				else {
					echo "<p>Fehler: Datei $fileoldname konnte nicht umbenannt werden</p>";
				}
			}
		}
		foreach (new DirectoryIterator('../Backend/pages') as $fileInfo) {
			    if($fileInfo->isDot()) continue;
				//echo $fileInfo->getFilename() . "<br>\n";
				$file=$fileInfo->getRealPath();
				
				//echo "<p>$file</p>"; 
			$proof=file_get_contents($file);
			//die;
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
				//echo $fileInfo->getFilename() . "<br>\n";
			}
			$newName = str_replace($Wortalt, $Wortneu, $fileInfo->getPathname());
			if ($newName!=$fileInfo->getPathname()) {
				if ( rename ( $fileoldname=$fileInfo->getPathname(), $newName ) ) {
					echo "<p>$fileoldname wurde in $newName wurde umbenannt</p>";
				}
				else {
					echo "<p>Fehler: Datei $fileoldname konnte nicht umbenannt werden</p>";
				}
			}
		}
	}
}

Script bereits mehrmals getestet und funktioniert.. dennoch sollte man wirklich wissen was man tut und es nicht blind übernehmen :)
 

Neue Beiträge

Zurück