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: 186
Registriert: 20.05.2006 18:35

Bestimmte Zeichen aus allen Beiträgen löschen

Beitragvon Lizardx » 26.02.2018 15:04

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: 5887
Registriert: 24.05.2010 08:31
Kontaktdaten:

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

Beitragvon Kirk » 26.02.2018 15:51

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

Benutzeravatar
Mahony
Ehemaliger
Beiträge: 11440
Registriert: 17.11.2005 22:33
Wohnort: Esslingen (Neckar)
Kontaktdaten:

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

Beitragvon Mahony » 26.02.2018 17:40

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: 186
Registriert: 20.05.2006 18:35

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

Beitragvon Lizardx » 27.02.2018 11:13

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
Ehemaliger
Beiträge: 11440
Registriert: 17.11.2005 22:33
Wohnort: Esslingen (Neckar)
Kontaktdaten:

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

Beitragvon Mahony » 27.02.2018 11:22

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: 186
Registriert: 20.05.2006 18:35

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

Beitragvon Lizardx » 27.02.2018 11:26

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
Ehemaliger
Beiträge: 11440
Registriert: 17.11.2005 22:33
Wohnort: Esslingen (Neckar)
Kontaktdaten:

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

Beitragvon Mahony » 27.02.2018 11:44

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: 186
Registriert: 20.05.2006 18:35

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

Beitragvon Lizardx » 27.02.2018 12:04

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
Ehemaliger
Beiträge: 11440
Registriert: 17.11.2005 22:33
Wohnort: Esslingen (Neckar)
Kontaktdaten:

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

Beitragvon Mahony » 27.02.2018 12:11

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: 186
Registriert: 20.05.2006 18:35

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

Beitragvon Lizardx » 27.02.2018 12:43

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


Zurück zu „Coding & Technik“