Bestimmte Zeichen aus allen Beiträgen löschen

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.
Lizardx
Mitglied
Beiträge: 212
Registriert: 20.05.2006 18:35

Bestimmte Zeichen aus allen Beiträgen löschen

Beitrag von Lizardx »

Hallo,

ich stelle in meinem Forum fest, dass über 1.000 Male dieser Code in Beiträgen auftaucht:

" onclick="window.open(this.href);return false;

Diese Zeichen stammen nur aus alten Beiträgen und sie befinden sich direkt hinter externen Links. Ist es möglich diese Zeichen in phpmyadmin in einem Zuge zu entfernen? Kann mir bitte jemand sagen wie ich das anstellen kann?
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7858
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Bestimmte Zeichen aus allen Beiträgen löschen

Beitrag von Kirk »

Hallo
Du könntest das hier mal ausprobieren: viewtopic.php?f=85&t=162049
Mache aber vorher ein Backup der Datenbank.
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Re: Bestimmte Zeichen aus allen Beiträgen löschen

Beitrag von Mahony »

Hallo
Oder du versuchst es mal damit

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
still_on_time();

$batch_size = 100;

$sql = 'SELECT COUNT(post_id) as cnt
    FROM ' . POSTS_TABLE . ' 
    WHERE post_text ' . $db->sql_like_expression($db->get_any_char() . '</URL>" onclick="window.open(this.href);return false;' . $db->get_any_char());
$result = $db->sql_query($sql);
$affected = (int) $db->sql_fetchfield('cnt');

if (set_time_limit(0))
{
    echo 'Successfully disabled execution time<br />';
}
else
{
    echo 'Unable to disable execution time limit. You may need to run this script again.<br />';
}
echo '<br />';
echo 'Updates needed: ' . $affected . '<br />';
echo 'Running updates in batches of ' . $batch_size . '<br />';

flush();

// Counting basically holds the amount of rows processed.
$counting = -1;
$batch_time = 0;

$_sql = 'SELECT post_id, post_text 
    FROM ' . POSTS_TABLE . ' 
    WHERE post_text ' . $db->sql_like_expression($db->get_any_char() . '</URL>" onclick="window.open(this.href);return false;' . $db->get_any_char());

$skip_rows = 0;
while ($counting === -1 || ($counting >= $batch_size && still_on_time()))
{
    $result = $db->sql_query_limit($_sql, $batch_size, $skip_rows);
    
    // Now handle the rows until time is over or no more rows to process...
    $counting = 0;
    while ($counting === 0 || still_on_time())
    {
        $row = $db->sql_fetchrow($result);
        if (!$row)
        {
            // move to the next batch
            break;
        }

        $message = str_replace('</URL>" onclick="window.open(this.href);return false;', '</URL>', $row['post_text']);

        $sql_update = array(
            'post_text'        => $message,
            'post_checksum'    => md5($message),
        );
        
        $sql = 'UPDATE ' . POSTS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_update) . ' WHERE post_id = ' . $row['post_id'];
        $db->sql_query($sql);

        $counting++;
        $skip_rows++;
    }
    $db->sql_freeresult($result);
}

if (still_on_time() && $counting < $batch_size)
{
    echo 'Finished processing ' . $skip_rows . ' rows.';
    exit;
}
else
{
    echo 'Rows completed: ' . $skip_rows . '<br />Rows remaining: ' . ($affected - $skip_rows) . '<br /><br />This script will resume in 5 seconds';
    echo '<meta http-equiv="refresh" content="5;" />';
}
Einfach als replace.php abspeichern, anschließend hochladen und im Browser aufrufen.
Anschließend nicht vergessen, das Sript wieder vom Webspace zu löschen.

Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Lizardx
Mitglied
Beiträge: 212
Registriert: 20.05.2006 18:35

Re: Bestimmte Zeichen aus allen Beiträgen löschen

Beitrag von Lizardx »

Hallo,

danke für eure Hilfe. Die erste Variante von Kirk hat leider nicht funktioniert. Ich vermute deshalb nicht, wegen den vielen Sonderzeichen in meinem Code. Wenn ich normale Wörter ohne Sonderzeichen ersetzen will, dann funktioniert der Code.

@ Mahony
Wo muss ich denn bei deinem Beispiel den neuen Text eingeben? Eventuell unter "$row['post_text']);" - Hier anstelle von post_text? Muss ich den neuen Text insgesamt nur einmal eingeben?
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Re: Bestimmte Zeichen aus allen Beiträgen löschen

Beitrag von Mahony »

Hallo
Du musst nichts eingeben. Der Text

Code: Alles auswählen

" onclick="window.open(this.href);return false;
ist schon im Script enthalten und wird auch mittels dem Script aus der Datenbank gelöscht.

Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Lizardx
Mitglied
Beiträge: 212
Registriert: 20.05.2006 18:35

Re: Bestimmte Zeichen aus allen Beiträgen löschen

Beitrag von Lizardx »

Ja das habe ich gesehen, ich dachte ich muss den neuen Text irgendwo eingeben.

Den Rooth Path muss ich nur einmal eingeben, sonst nix mehr - richtig? ((defined('PHPBB_ROOT_PATH')))
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Re: Bestimmte Zeichen aus allen Beiträgen löschen

Beitrag von Mahony »

Hallo
Lizardx hat geschrieben:Den Rooth Path muss ich nur einmal eingeben, sonst nix mehr - richtig? ((defined('PHPBB_ROOT_PATH')))
NEIN, du musst NICHTS ändern an dem Script - nur hochladen, aufrufen und fertig.

Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Lizardx
Mitglied
Beiträge: 212
Registriert: 20.05.2006 18:35

Re: Bestimmte Zeichen aus allen Beiträgen löschen

Beitrag von Lizardx »

Ok, habe es grade hochgeladen doch es kommt diese Fehlermeldung:


Fatal error: Call to undefined method dbal_mysql::get_any_char() in /www/htdocs/wxxxf5ac/forum/replace.php on line 12

Ich vermute mal, es klappt nicht aufgrund der vielen Sonderzeichen? Was mich ausserdem stutzig macht ist

Code: Alles auswählen

</URL>
in diesem Code:

Code: Alles auswählen

</URL>" onclick="window.open(this.href);return false;
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Re: Bestimmte Zeichen aus allen Beiträgen löschen

Beitrag von Mahony »

Hallo
Das Script ist für phpBB 3.2.2
Welche phpBB - Version hast du im Einsatz?

P.S. Und welche PHP-Version verwendest du?

Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Lizardx
Mitglied
Beiträge: 212
Registriert: 20.05.2006 18:35

Re: Bestimmte Zeichen aus allen Beiträgen löschen

Beitrag von Lizardx »

ich habe die Version phpBB 3.0.12 und die php Version 5.5.38-nmm3
Antworten

Zurück zu „Coding & Technik“