Ihanitsen phpbb_topics-taulussa on useassa viestissä väärä topic_poster topicille. Oikeat id:t voisi hakea phpbb_posts-taulusta seuraavalla logiikalla:
SELECT poster_id FROM phpbb_posts WHERE topic_id=väärin order by post_time asc limit 0,1
Ja väärän id:n saisi korjattua
update phpbb_topics set topic_poster=oikea poster id where topic_id=väärin
Eli oletetaan, että oikea topicin postittaja on se henkilö, joka on ajallisesti luonut ensimmäisen viestin. Pitäisi siis tehdä ohjelma, joka toimii seuraavasti:
Lue väärät topic_id:t tekstitiedostosta, yksi id riviäkohden
Kutakin väärää topic_id:tä kohden
Hae oikea poster_id phpbb_posts-taulusta
Päivitä phpbb_topics-taulu
Jos tekisi ensin ohjelman, joka hakee ja tulostaa väärät id:t ja tulostaa ruudulle update-komennon ja kun sen näyttää hyvältä, otetaan kannasta varmuuskopio ja poistetaan päivityskomennon tulostus. Ja tietenkään teerillä ei ole pearia, eikä komentorivi-php:ta, joten ensin oli pakko nysvätä pear väliaikaiseen hakemistoon. Ja tietenkään en saa pearin kantaosuutta toimimaan oikein, joten lopulta päädyin kirjoittamaan suoraan mysql-komennoilla.
Eli:
<?PHP
require_once('PEAR/MDB2.php');
$numerot=file('numerot.txt');
$link = mysql_connect('kone', 'käyttäjä', 'salasana')
or die('Could not connect: ' . mysql_error());
mysql_select_db('kanta') or die('Could not select database');
foreach($numerot as $numero) {
echo "Käsittelen $numero<br/>";
$q="SELECT * FROM phpbb_posts WHERE topic_id=$numero order by post_time asc limit 0,1";
$result = mysql_query($q) or die('Query $q failed: ' . mysql_error());
$rivi=mysql_fetch_array($result, MYSQL_ASSOC);
$q = "UPDATE phpbb_topics set topic_poster=".$rivi['poster_id'];
$q.=" WHERE topic_id=$numero";
$result = mysql_query($q) or die("Query $q failed: " . mysql_error());
}
mysql_close($link);
?>
30.05.2007 valitettavasti myös kannan viite-eheys, se sellainen juttu mitä oikeat tietokannat harrastavat, on rikki. Joten tarvitaan lisää paikkokoodia.
mysql_select_db('kanta) or die('Could not select database');
$q="select ug.group_id as ugid, g.group_id as gid from phpbb_user_group as ug left outer join phpbb_groups as g
on (ug.group_id=g.group_id) where g.group_id is NULL order by
ug.group_id asc;";
$result = mysql_query($q) or die('Query $q failed: '.mysql_error());
$rivi=mysql_fetch_array($result, MYSQL_ASSOC);
while($rivi) {
print_r($rivi);
$q = "update phpbb_user_group set group_id=10250 where group_id=";
$q.=$rivi['ugid'].";";
$mysql_query($q) or die('Query $q failed: '.mysql_error());
echo "$q<br/>";
$rivi=mysql_fetch_array($result, MYSQL_ASSOC);
}
mysql_close($link);
Ja tämä ei tuottanut voittoa, koske kyse oli käyttäjien omien ryhmien puuttumisesta. Ratkaisu oli lopulta muuttaa toolkitin koodia siten, että se salli vajaana palautuneiden käyttäjien tietojen niittamisen.