Seite 1 von 2

Bestimmte Zeichen aus allen Beiträgen löschen

Verfasst: 26.02.2018 15:04
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?

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

Verfasst: 26.02.2018 15:51
von Kirk
Hallo
Du könntest das hier mal ausprobieren: viewtopic.php?f=85&t=162049
Mache aber vorher ein Backup der Datenbank.

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

Verfasst: 26.02.2018 17:40
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

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

Verfasst: 27.02.2018 11:13
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?

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

Verfasst: 27.02.2018 11:22
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

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

Verfasst: 27.02.2018 11:26
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')))

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

Verfasst: 27.02.2018 11:44
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

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

Verfasst: 27.02.2018 12:04
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;

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

Verfasst: 27.02.2018 12:11
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

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

Verfasst: 27.02.2018 12:43
von Lizardx
ich habe die Version phpBB 3.0.12 und die php Version 5.5.38-nmm3