Namen Ändern Script

Fanseite

Mitglied
Hallo ich habe folgendes Problem:

Ich will einen Namen ändern Script machen. Das wäre nicht das Problem. Mein Problem ist:
Wie kann ich die gesamten Datenbank tabellen nach den usernamen suchen ?
Wen ich den Namen von der cms_user_data tabelle will, mach ich das ja so :

PHP:
mysql_query("SELECT name FROM cms_user_data WHERE name = $_POST['name'] ")

Wie kann ich aber jetzt in allen Tabellen den namen selektieren und Updaten?

Bin für jede Hilfe Dankbar.
 
Du solltest schon wissen, welche Tabellen du aktualisieren willst. Aber das ist nicht dein Problem. Dein Problem ist, dass du deine Datenbank nicht normalisiert hast. Der Normalfall ist nämlich, dass eine Tabelle gibt, in der der Name des Nutzers steht. Diese kann man seitens des Namen ändern wie man will, da der Nutzer ebenfalls durch eine ID erkennbar ist. Diese verwendet man dann in allen anderen Tabellen um den Nutzer zu identifizieren.

Nebenbei: so funktioniert deine SQL-Abfrage nicht, denn sie sollte eher so aussehen:
PHP:
mysql_query('SELECT `name` FROM `cms_user_data` WHERE `name` = "' . $_POST['name'] . '"');
 
Du kannst erstmal alle Tabellen auslesen, dann solltest du für jede Tabelle prüfen, ob es eine Spalte namens name gibt und dann eben für jede Spalte die SQL-Abfrage abschicken. Das ist aber ziemlich dumm.
 
Ja mhm meine Eigendlich Frage war jedoch :

Kann man mit einer bestimmten Funktion alle gleichzeitig auslesen ?
Also nicht das ich für jede Tabelle immer eine query machen muss.
 
Jein. Du kannst alle Kandidaten mittels UNION zusammentragen.

Die Kandidatenliste. Du zeihst alle Tabellen die den Namen beinhalten zusammen. Benennst die Felder gleich (Aliase) und gibst noch die Quelle und die ID, Name des ID-Feldes, der Name und der Name des Naen-Feldes
SQL:
SELECT
	'ud_id'			AS id_field,
	ud_id 			AS id_value,
	'name'			AS name_field,
	name 			AS name_value,
	'cms_user_data' AS source
FROM
	cms_user_data
UNION ALL
	'up_id'			AS id_field,
	up_id 			AS id_value,
	'user_name'		AS name_field,
	user_name		AS name_value,
	'cms_user_perm'	AS source
FROM
	cms_user_perm
Diese kannst du nun nach dem Namen filtern
SQL:
SELECT
	id_field,
	id_value,
	name_field,
	name_value,
	source
FROM
	(
		SELECT
			'ud_id'			AS id_field,
			ud_id 			AS id_value,
			'name'			AS name_field,
			name 			AS name_value,
			'cms_user_data' AS source
		FROM
			cms_user_data
		UNION ALL
			'up_id'			AS id_field,
			up_id 			AS id_value,
			'user_name'		AS name_field,
			user_name		AS name_value,
			'cms_user_perm'	AS source
		FROM
			cms_user_perm
	) AS candidates
WHERE
	name_value = 'yaslaw';

Nun kannst du dies aus PHP aufrufen und entsprechende Update durchführen
PHP:
$oldName = 'yaslaw';
$newName = 'Yaslaw';

$sql = <<<SQL
SELECT
	id_field,
	id_value,
	name_field,
	name_value,
	source
FROM
	(
		SELECT
			'ud_id'			AS id_field,
			ud_id 			AS id_value,
			'name'			AS name_field,
			name 			AS name_value,
			'cms_user_data' AS source
		FROM
			cms_user_data
		UNION ALL
			'ud_id'			AS id_field,
			ud_id 			AS id_value,
			'user_name'		AS name_field,
			user_name		AS name_value,
			'cms_user_perm'	AS source
		FROM
			cms_user_perm
	) AS candidates
WHERE
	name_value = '{$oldName}';
SQL;

$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){
	$sql = <<<SQL
UPDATE	{$row['source']}
SET 	`{$row['name_field']}` 	= '{$oldName}'
WHERE	`{$row['id_field']}` 	= '{$row['id_value']}';
SQL;
	mysql_query($sql);
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück