MyBB Nederland
Query - Afdrukversie

+- MyBB Nederland (http://mybbnederland.nl)
+-- Forum: MyBB Hulp (/forumdisplay.php?fid=5)
+--- Forum: Algemene hulp (/forumdisplay.php?fid=6)
+--- Discussie: Query (/showthread.php?tid=290)

Pagina's: 1 2


Query - Tazmaniac - 08-29-2013 08:36 PM

Beste myBBforum,

ik wil iets doen met een query in de DB maar weet niet goed hoe ik dit moet aanpakken.
Op het forum staan diverse tags bv [brake]eennaamhier[/brake]

Nu is mijn vraag..Kan ik dmv een query in phpMyadmin deze tags en wat ertussen staat verwijderen? Handmatig kan ook maar dan ben ik heel erg lang bezig. Meer dan 50.000 topics nalopenWink

deze query heb ik geprobeerd:

update `mybbdatabase`.`mybb_threads` SET `message` = REPLACE(`message`, '[brake]', '')

Maar krijg daarmee een error..Ik zou daarmee alle [brake] moeten kunnen verwijderen.. Het liefste beide tags en de variabele naam ertussen in 1 keer..

Wie maakt me blij?


RE: Query - koenwi - 08-29-2013 11:01 PM

Je kan regexen uitvoeren via een query, maar vaak is het makkelijker om gewoon in php een kleine functie te schrijven en dan de pagina uit te voeren.

Hieronder heb je een voorbeeld van zo'n scripje. Een pagina aanmaken en de database gegevens wijzigen. Ik heb het kort even uitgetest, maar maak sowieso even een backup voor je het uitvoert, dan ben je altijd zeker.

Indien je iets anders gebruikt als [brake], moet je dit 3x aanpassen in het script.

PHP-code:
<?php
$dbhost 
'localhost';              //DB Hostname
$dbuser '';            //DB User
$dbpass '';            //DB Password
$dbname '';                //Your database name
ini_set('zend.ze1_compatibility_mode''0');

//Connect to Database
$conn mysqli_connect($dbhost$dbuser$dbpass) or die ('Error connecting to mysql');
mysqli_select_db($conn$dbname);

$result mysqli_query($conn"SELECT pid, message FROM mybb_posts WHERE 1 AND MATCH(message) AGAINST('[brake]' IN BOOLEAN MODE)");
while (
$row=mysqli_fetch_array($resultMYSQL_ASSOC)){
  
$message preg_replace("/\[brake\].*\[\/brake\]/"""$row['message']);
  
$pid $row['pid'];
  
$message mysqli_real_escape_string($conn$message);
  
mysqli_query($conn"UPDATE mybb_posts SET message = '$message' where pid=$pid");
}
?>



RE: Query - Tazmaniac - 08-30-2013 08:57 PM

Ik krijg nu een error.
Fatal error: Call to undefined function mysqli_connect() in /home/*****/public_html/testing/nzb.php on line 9

***** is zelf veranderd.


RE: Query - koenwi - 08-30-2013 09:28 PM

Je kan onderstaande code eens proberen, die maakt gebruik van een oudere functie.
Of wat heb je bij inc/config.php bij $config['database']['type'] staan?

PHP-code:
<?php
$dbhost 
'localhost';              //DB Hostname
$dbuser '';            //DB User
$dbpass '';            //DB Password
$dbname '';                //Your database name

//Connect to Database
$conn mysql_connect($dbhost$dbuser$dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);

$result mysql_query("SELECT pid, message FROM mybb_posts WHERE 1 AND MATCH(message) AGAINST('[brake]' IN BOOLEAN MODE)");
while (
$row=mysql_fetch_array($resultMYSQL_ASSOC)){
  
$message preg_replace("/\[brake\].*\[\/brake\]/"""$row['message']);
  
$pid $row['pid'];
  
mysql_query("UPDATE mybb_posts SET message = '$message' where pid=$pid");
}
?>



RE: Query - Tazmaniac - 08-31-2013 06:57 PM

Ik heb in inc/config.php staan bij type 'mysql'.

Ik heb de bovenstaande code ook geprobeerd.
Bij deze krijg ik geen foutmelding maar een blanke pagina.


RE: Query - koenwi - 08-31-2013 07:02 PM

Een blanke pagina is goed. Het script geeft geen melding, dus normaal zouden de tags moeten weg zijn uit de berichten op je forum.


RE: Query - Tazmaniac - 08-31-2013 07:19 PM

Ze zijn niet verdwenen helaas..
Ik weet het verder ook niet zo gauw meer..


RE: Query - koenwi - 08-31-2013 07:44 PM

Heb je iets aan die [brake] aangepast? Want met [brake]blabla[/brake] werkt het tijdens de test hier in ieder geval wel.

Je zou achter $pid = $row['pid']; dit lijntje code kunnen bijplaatsen:
echo "$message<br /><br />---<br /><br />";

Dan zie je welke berichten het scriptje vindt en of de code in die berichten is weggehaald.
Als je geen berichten krijgt vind het de [brake] niet goed en kan dat aangepast worden. Indien er wel berichten staan, maar de [brake] komt er nog in voor, dan werkt het verwijderen niet helemaal. Maar het is meestal maar een kleine aanpassing die nodig is om het gewenste resultaat te krijgen.


RE: Query - Tazmaniac - 09-01-2013 11:58 AM

Ik heb de ''echo'' toegepast en vind niet de tags.
Als test een ander woord gebruikt en die vind hij wel.
De woorden die hij dan wel vindt blijven wel staan.


RE: Query - koenwi - 09-01-2013 12:48 PM

Ok, het zou dan in principe wel moeten werken. Je kan dit nog eens vervangen:
PHP-code:
$result mysql_query("SELECT pid, message FROM mybb_posts WHERE 1 AND MATCH(message) AGAINST('[brake]' IN BOOLEAN MODE)"); 
door:
PHP-code:
$result mysql_query("SELECT pid, message FROM mybb_posts WHERE message LIKE '%[brake]%'"); 

Als je heel korte tags zou hebben, kan het zijn dat je webhost geen full text search ondersteund en het daarom niets vind. Het is hoofdletter gevoelig, dus misschien moet je met hoofdletters proberen.

Als hij de tags vind, vergeet dan ook niet dat je deze hier ook moet aanpassen:
$message = preg_replace("/\[brake\].*\[\/brake\]/", "", $row['message']);
waarbij de \ belangrijk zijn, dus best enkel het woord veranderen.