Quantcast
Channel: General Failure - Ihanitse
Viewing all articles
Browse latest Browse all 4

Muroja krapulaan

$
0
0

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.


Viewing all articles
Browse latest Browse all 4

Trending Articles