Text bzw. Code in der Datenbank ersetzen.

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
cbdx
Mitglied
Beiträge: 94
Registriert: 20.02.2008 10:16
Wohnort: Amsdorf
Kontaktdaten:

Text bzw. Code in der Datenbank ersetzen.

Beitrag von cbdx »

Hallo!
Bin dabei mit einem Board auf phpbb zu wechseln. Bis dato konnte ich mir alles erarbeiten.
Backup, Convert, Aufspielung gingen glatt.
Nun sehen die Einträge nicht so toll aus, wenn sie mit HTML gespickt sind.

Damit

Code: Alles auswählen

UPDATE phpbb_posts 
SET post_text = REPLACE(post_text, 'old text', 'new text') 
WHERE post_text LIKE '%old text%'
konnte ich schon mal die Tabelleninfos in Quote ändern. Nun soll es aber an die Bilder und Link´s gehen. Da der Inhalt immer anders ist müßte man doch irgendwie mit Platzhaltern arbeiten können.

Also

Code: Alles auswählen

UPDATE phpbb_posts 
SET post_text = REPLACE(post_text, '<img src="http://meinbild.jpg">', '[img]http://meinbild.jpg[/img]') 
WHERE post_text LIKE '%<img src="http://meinbild.jpg">%'
würde nur für ein Bild funktionieren

Beim ersetzen aller muß aber der jeweilige Inhalt mit übernommen werden.
Vielleicht gibt es ja etwas in der Art wie ->

Vorsicht - hilflose Idee eines Unwissenden

Code: Alles auswählen

UPDATE phpbb_posts 
SET post_text = REPLACE(post_text, '<img src="*1*">', '[img]*1*[/img]') 
WHERE post_text LIKE '%<img src="*1*">%'
Hab es logischerweise noch nicht probiert. :wink:

Bin für jede Hilfe offen
King Madness
Mitglied
Beiträge: 196
Registriert: 26.10.2003 23:43
Wohnort: Stolberg
Kontaktdaten:

Re: Text bzw. Code in der Datenbank ersetzen.

Beitrag von King Madness »

Ich muss diesen beitrag noch mal nach oben ziehen,

Wenn ich einen Ordnernamen ändern muss, funktioniert der String dann auch ?

Beispiel :
http://www.meine-seite.de/Ordner1
muss umbenannt werden in
http://www.meine-seite.de/Ordner2
und alle Links, die dahin verknüpft sind sollen geändert werden.
www.Das-Billard-Forum.de _ Das Forum von Billardspielern --- für Billardspieler
www.EUREGIO-Biker.de _ Das Forum für Motorradfahrer aus der Eifel, Ardennen und BeNeLux
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Text bzw. Code in der Datenbank ersetzen.

Beitrag von gn#36 »

Also ich denke bei ersterem Problem hilft dir da nur ein externes Skript da Mysql bei Ersetzungen keine Regulären Ausdrücke beherrscht (beim Finden schon, du könntest also mit Hilfe von Regulären Ausdrücken versuchen Beiträge zu finden die Schlüsselwörter enthalten und dann diese Beiträge entsprechend vom Skript bearbeiten lassen). In PHP kannst du aber z.B. [php:preg_replace] nutzen um die Dinger dann zu ersetzen (musst du aber ggf. bei Verschachtelungen aufpassen).

Also grober Aufbau ungefähr so:

Code: Alles auswählen

<?php
//Initialisiere DB Verbindung etc.
...
//Mehrfachaufrufe des Skriptes, da brauchen wir einen Startwert
$start = isset($_POST['start']) ? intval($_POST['start']) : 0;
$sql = "SELECT post_id, post_text FROM phpbb_posts WHERE post_text REGEXP '<img src=\"[^\"]*\">' LIMIT $start, 20";
$result = mysql_query($sql) or die(mysql_error());
//Jetzt die Schleife in der je 20 Posts abgearbeitet werden:
$count = 0;
while($row = mysql_fetch_assoc($result))
{
$text = preg_replace('#<img src="([^"]*)"/?>#is', '[img]\\1[/img]', $row['post_text']);
$sql = 'UPDATE phpbb_posts SET post_text = \'' . mysql_escape_string($text) . '\' WHERE  post_id = ' . $row['post_id'];
mysql_query($sql) or die(mysql_error());
$count++;
}
$count = $count + (isset($_POST['count']) ? intval($_POST['count']) : 0);
echo "$count Posts insgesamt bearbeitet";
if($count == 20)
{
$start = $start + 20;
//hier müsste dann noch ein bischen mehr HTML rein für den Redirect 
//(also z.b. einen meta redirect so dass man nicht mehr den Link klicken muss ;) )

echo "<a href='skriptname.php?start=$start&count=$count'>nächstes Set</a>";
}
else
{
echo "Fertig";
}
Für zweiteres kannst du einfach eine Ersetzung direkt in Mysql vornehmen. Hier musst du nur sowas ausführen wie du das in deinem ersten Post beschrieben hast. Zur Sicherheit sollte der Suchausdruck möglichst lang sein (also die komplette URL die mit Sicherheit enthalten ist) damit du nicht aus Versehen irgendwelchen Kram ersetzt der eigentlich was anderes ist (z.b. solltest du wenn du http://www.domain.de/language/lang_de/ durch http://www.domain.de/language/kurz_de/ ersetzen wolltest nicht auf die Idee kommen einfach nur lang durch kurz zu ersetzen das würde nämlich auch jedes andere Vorkommen des Wortes ersetzen und neben anderen Problem würde z.b. die URL danach http://www.domain.de/kurzuage/kurz_de/ heißen).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“