Remplacement d'une chaîne de caractères dans la BDD+jokers

Le forum concernant les demandes de support pour tout problème de mise à jour d'un forum phpBB 2.0.x. depuis une version antérieure.

Modérateur: Equipe

Règles du forum
Rappel: Conditions générales d'utilisation de phpBB-fr.com - Conditions générales de support sur phpBB-Fr.com


Pensez à effectuer une recherche et à prendre connaissance du forum de documentation, la réponse à votre question a de grandes chances de s'y trouver.

Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede elyom le 23 Juin 2008 à 13:51

Bonjour,

Je souhaite faire la même chose que ayakos mais en intégrant des jokers à mon remplacement de chaîne de caractères, comment est-ce possible ?

Le MOD donné en solution par morgyanne ne permettant pas de faire cela...

En fait, j'ai installé le MOD Hide sur mon forum et une fois désinstallé je me retrouve avec des posts avec des [HIDE:985462466226356]texte caché[/HIDE].
Je voudrais donc effectuer un remplacement de ces [HIDE:985462466226356] par une chaîne vide pour les supprimer mais comme les chiffres sont différents pour chaque post, je n'ai d'autres choix que d'utiliser des jokers pour mon chercher/remplacer. Je tiens à préciser que ma base de données est assez conséquente (+ de 100 Mo), je pense donc qu'une requête SQL est la meilleure façon de procéder car en tentant de la modifier en local à l'aide d'un éditeur, ce dernier plante systématiquement à l'ouverture et, de plus, la restauration n'est pas aisée avec de telles tailles de base de données...

Merci par avance de l'aide que vous pourrez m'apporter.
Dernière édition par elyom le 31 Aoû 2008 à 12:55, édité 1 fois.
elyom
Posteur néophyte
Posteur néophyte
 
Messages: 22
Inscription: 26 Avr 2006 à 02:59

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede Morgyanne le 23 Juin 2008 à 14:52

Salut,

il vaut mieux faire un rappel de l'adresse du sujet dont tu fais référence parce que sinon cela restera vague : viewtopic.php?f=76&t=145992 ;)

@+
Morgyanne :)
Demande de support par MP = Poubelle
Avatar de l’utilisateur
Morgyanne
Modérateur
Modérateur
 
Messages: 14148
Inscription: 21 Mar 2005 à 12:28

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede elyom le 25 Juin 2008 à 10:18

Mea culpa Morgyanne, je n'avais fait qu'un simple copier/coller de mon précédent message... :oops:

Toujours est-il que je suis toujours à la recherche d'une solution à mon problème, j'ai beau cherché dans la doc de php, je ne trouve toujours pas la syntaxe de la requête à effectuer pour faire ce que je veux. Une âme charitable ?
elyom
Posteur néophyte
Posteur néophyte
 
Messages: 22
Inscription: 26 Avr 2006 à 02:59

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede elyom le 05 Aoû 2008 à 15:47

Toujours personne pour m'aider ???
elyom
Posteur néophyte
Posteur néophyte
 
Messages: 22
Inscription: 26 Avr 2006 à 02:59

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede elyom le 25 Aoû 2008 à 00:07

Voici la requête que j'essaye d'exécuter mais MySQL me répond qu'aucune opération n'a été effectuée... ça doit être un problème de syntaxe de la requête ou le joker qui est mal placé... Un peu d'aide ne serait pas de refus SVP. :|

Code: Tout sélectionner
update phpbb_posts_text
set post_text = replace(post_text, '[hide:%', '')
elyom
Posteur néophyte
Posteur néophyte
 
Messages: 22
Inscription: 26 Avr 2006 à 02:59

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede spitfire pat le 25 Aoû 2008 à 06:07

je crois que tu n'y coupes pas d'un script
Code: Tout sélectionner
<?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);
$user->session_begin();
$auth->acl($user->data);
$user->setup();
$sql 'SELECT post_id, bbcode_uid, post_text FROM ' POSTS_TABLE;
$result $db->sql_query($sql);
while(
$row $db->sql_fetchrow($result))
{
    
$uid $row['bbcode_uid'];
    
$match "%\[hide:$uid\](.*?)\[/hide:$uid\]%sim";
 
    
$message preg_replace($match'\\1'$row['post_text']);
    
    
$sql 'UPDATE ' POSTS_TABLE "
        SET post_text = '$message'
        WHERE post_id=" 
$row['post_id'];
    
$db->sql_query($sql);
}
echo 
"traitement terminé";
?>
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14461
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede elyom le 25 Aoû 2008 à 12:47

spitfire pat a écrit:je crois que tu n'y coupes pas d'un script
Code: Tout sélectionner
<?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);
$user->session_begin();
$auth->acl($user->data);
$user->setup();
$sql = 'SELECT post_id, bbcode_uid, post_text FROM ' . POSTS_TABLE;
$result = $db->sql_query($sql);
while(
$row = $db->sql_fetchrow($result))
{
    $uid = $row['bbcode_uid'];
    $match = "%\[hide:$uid\](.*?)\[/hide:$uid\]%sim";
 
    $message 
= preg_replace($match, '\\1', $row['post_text']);
    
    $sql 
= 'UPDATE ' . POSTS_TABLE . "
        SET post_text = '$message'
        WHERE post_id="
 . $row['post_id'];
    $db->sql_query($sql);
}
echo "traitement terminé";
?>

Bonjour, merci bien pour votre aide. Cependant, après avoir créé le fichier test.php contenant le script donné et après l'avoir mis à la racine de mon forum (en local avec easyPHP), j'obtiens l'erreur suivante et j'avoue que je sèche totalement sur la solution... PHP et moi ça fait deux... Merci d'avance.

Code: Tout sélectionner
Fatal error: Call to a member function on a non-object in c:\program files\easyphp1-8\www\forums\test.php on line 6
elyom
Posteur néophyte
Posteur néophyte
 
Messages: 22
Inscription: 26 Avr 2006 à 02:59

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede spitfire pat le 25 Aoû 2008 à 13:24

oups, je te fais toutes mes excuses, je t'ai livré un script pour phpBB3
revoilà le même pour phpBB2
Code: Tout sélectionner
<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
$sql = 'SELECT post_id, bbcode_uid, post_text FROM ' . POSTS_TEXT_TABLE;
if (!$result = $db->sql_query($sql))
{
    message_die(GENERAL_ERROR, 'Could not access post table, '', __LINE__, __FILE__, $sql);
}
while($row = $db->sql_fetchrow($result))
{
    $uid = $row['bbcode_uid'];
    $match = "%\[hide:$uid\](.*?)\[/hide:$uid\]%sim";
    $message = preg_replace($match, '\\1', $row['post_text']);
    $sql = 'UPDATE ' . POSTS_TABLE . "
        SET post_text = '$message'
        WHERE post_id=" . $row['post_id'];
    if (!$db->sql_query($sql))
    {    
        message_die(GENERAL_ERROR, 'Could not access post table, '', __LINE__, __FILE__, $sql);
    }
}
echo "traitement terminé";
?>
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14461
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede elyom le 25 Aoû 2008 à 17:38

Désolé, je dois être un boulet mais j'ai une nouvelle erreur :
Code: Tout sélectionner
Parse error: parse error in c:\program files\easyphp1-8\www\forums\test.php on line 15

Voilà une image de ton code avec la coloration syntaxique, je suis presque sûr que cela doit être un problème de point-virgule ou de parenthèse manquante.
Image
Merci encore pour ton aide, c'est très sympa, je commençais à désespérer d'y arriver un jour... :P
elyom
Posteur néophyte
Posteur néophyte
 
Messages: 22
Inscription: 26 Avr 2006 à 02:59

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede spitfire pat le 25 Aoû 2008 à 19:24

j'ai eu le tort de l'écrire directement sur phpbb, les fautes de syntaxe apparaissent moins bien, mais j'étais à la bourre....
il manque une apostrophe après table dans
Code: Tout sélectionner
message_die(GENERAL_ERROR, 'Could not access post table, '', __LINE__, __FILE__, $sql);

et dans
Code: Tout sélectionner
message_die(GENERAL_ERROR, 'Could not access post table', '', __LINE__, __FILE__, $sql);

le code complet correct est donc
Code: Tout sélectionner
<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
$sql = 'SELECT post_id, bbcode_uid, post_text FROM ' . POSTS_TEXT_TABLE;
if (!$result = $db->sql_query($sql))
{
   message_die(GENERAL_ERROR, 'Could not access post table', '', __LINE__, __FILE__, $sql);
}
while($row = $db->sql_fetchrow($result))
{
   $uid = $row['bbcode_uid'];
   $match = "%\[hide:$uid\](.*?)\[/hide:$uid\]%sim";
   $message = preg_replace($match, '\\1', $row['post_text']);
   $sql = 'UPDATE ' . POSTS_TABLE . "
       SET post_text = '$message'
       WHERE post_id=" . $row['post_id'];
   if (!$db->sql_query($sql))
   {
       message_die(GENERAL_ERROR, 'Could not access post table', '', __LINE__, __FILE__, $sql);
   }
}
echo "traitement terminé";
?>
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14461
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede elyom le 26 Aoû 2008 à 04:06

Aaaaaarrrrgggghhhhh ! Je vais m'arracher les cheveux avec ce problème, j'ai un nouveau message d'erreur :
Code: Tout sélectionner
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\forums\test.php:1) in c:\program files\easyphp1-8\www\forums\includes\sessions.php on line 254

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\forums\test.php:1) in c:\program files\easyphp1-8\www\forums\includes\sessions.php on line 255

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\forums\test.php:1) in c:\program files\easyphp1-8\www\forums\includes\page_header.php on line 483

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\forums\test.php:1) in c:\program files\easyphp1-8\www\forums\includes\page_header.php on line 485

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\forums\test.php:1) in c:\program files\easyphp1-8\www\forums\includes\page_header.php on line 486


Et ensuite :
Code: Tout sélectionner
Could not access post table

DEBUG MODE

SQL Error : 1064 Erreur de syntaxe près de 'obtenir rapidement de l'aide pour vos problèmes et interrogation' à la ligne 2

UPDATE phpbb_posts SET post_text = [...] plein de texte issu d'un de mes messages sur mon forum [...]
' WHERE post_id=2

Line : 23
File : test.php

Je précise que j'utilise les fichiers phpBB fournis en l'état, c'est-à-dire sans mods et ma base de données a été nettoyé à l'aide du script "clean tables". Décidément, PHP et moi on est pas potes...

Merci encore pour l'aide (une fois de plus) que vous pourrez m'apporter. :wink:
elyom
Posteur néophyte
Posteur néophyte
 
Messages: 22
Inscription: 26 Avr 2006 à 02:59

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede spitfire pat le 26 Aoû 2008 à 05:11

pour le premier message, tu as du texte ou un saut de ligne avant <?php
pour l'erreur suivante, j'avais oublié le traitement des apostrophes
cette fois-ci devrait être la bonne
Code: Tout sélectionner
<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
$sql = 'SELECT post_id, bbcode_uid, post_text FROM ' . POSTS_TEXT_TABLE;
if (!$result = $db->sql_query($sql))
{
   message_die(GENERAL_ERROR, 'Could not access post table', '', __LINE__, __FILE__, $sql);
}
$nb1 = 0;
$nb2 = 0;
while($row = $db->sql_fetchrow($result))
{
   $match = '%\\[hide.*?\\](.*?)\\[/hide.*?\\]%sim';
   $message=$row['post_text'];
   if (preg_match($match,$message ))
   {
      $message = preg_replace($match, '\\1', $message);
      $sql = 'UPDATE ' . POSTS_TEXT_TABLE . "
          SET post_text = '" . str_replace("'", "''",$message) ."'
          WHERE post_id=" . $row['post_id'];
      if (!$db->sql_query($sql))
      {
            message_die(GENERAL_ERROR, 'Could not update post table', '', __LINE__, __FILE__, $sql);
      }
      $nb1++;
   }
   $nb2++;
}
echo "traitement terminé, $nb1 message(s) sur $nb2 mis à jour";
?>

j'ai ajouté un test de la présence de [hide****]............[/hide********] dans le message, inutile de le réenregistrer s'il ne contient pas la balise.
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14461
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede elyom le 26 Aoû 2008 à 12:53

spitfire pat a écrit:pour le premier message, tu as du texte ou un saut de ligne avant <?php
pour l'erreur suivante, j'avais oublié le traitement des apostrophes
cette fois-ci devrait être la bonne

Effectivement, je n'ai plus le premier message d'erreur. Merci pour ton aide précieuse.
Malgré tout, j'ai l'impression d'être un boulet de premier ordre puisque j'ai un nouveau message d'erreur.
Code: Tout sélectionner
Erreur Générale

Could not update post table

DEBUG MODE

SQL Error : 1064 Erreur de syntaxe près de 't know -High And Mighty[/u:5eb171ee4a][/b:5eb171ee4a] ' à la ligne 2

UPDATE phpbb_posts_text SET post_text = '[align=center:5eb171ee4a]°o.O [b:5eb171ee4a][u:5eb171ee4a]Gov\''t know -High And Mighty (Advance)[/u:5eb171ee4a][/b:5eb171ee4a] O.o° [img:5eb171ee4a]http://ec1.images-amazon.com/images/P/B000GPIPW4.01._SS500_SCLZZZZZZZ_V62417604_.jpg[/img:5eb171ee4a]°o.O [b:5eb171ee4a][u:5eb171ee4a]Tracklist[/u:5eb171ee4a][/b:5eb171ee4a] O.o° [b:5eb171ee4a]01. [/b:5eb171ee4a]Mr. High And Mighty 05:33 [b:5eb171ee4a]02. [/b:5eb171ee4a]Brand New Angel 06:53 [b:5eb171ee4a]03. [/b:5eb171ee4a]So Weak, So Strong 0 5:08 [b:5eb171ee4a]04. [/b:5eb171ee4a]Streamline Woman 04:06 [b:5eb171ee4a]05. [/b:5eb171ee4a]Child Of The Earth 05:45 [b:5eb171ee4a]06. [/b:5eb171ee4a]Like Flies 04:37 [b:5eb171ee4a]07. [/b:5eb171ee4a]Unring The Bell 08:06 [b:5eb171ee4a]08. [/b:5eb171ee4a]Nothing Again 06:56 [b:5eb171ee4a]09. [/b:5eb171ee4a]Million Miles From Yesterday 03:44 [b:5eb171ee4a]10. [/b:5eb171ee4a]Brighter Days 06:34 [b:5eb171ee4a]11. [/b:5eb171ee4a]Endless Parade 08:59 [b:5eb171ee4a]12. [/b:5eb171ee4a]3-String George 05:40 Govt_know-High_And_Mighty[/align:5eb171ee4a]' WHERE post_id=41190

Line : 27
File : test.php

J'ai bien envie de faire valser mon PC à travers la pièce tant tout cela m'énerve mais je me dis que, forcément, il marchera moins bien après... :mrgreen:
Encore merci pour ton aide, je m'en sortirais jamais tout seul.

EDIT : Ne serais-ce vraiment pas plus simple de passer par une requête MySql sur ma table posts_text en utilisant un joker à la place du bbcode_uid ? Sachant de plus que j'ai d'autres anciennes balises BBcode, mis à part le HIDE, à faire disparaître du texte de mes messages avant ma migration vers phpBB3 car j'ai pas trop envie de te prendre la tête avec tout ça.
elyom
Posteur néophyte
Posteur néophyte
 
Messages: 22
Inscription: 26 Avr 2006 à 02:59

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede spitfire pat le 27 Aoû 2008 à 07:32

non, tu ne peux pas faire de remplacements sur un joker avec une requête sql
bon, là l'erreur était dûe à la prsésnce d'un slash
Code: Tout sélectionner
<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
$sql = 'SELECT post_id, bbcode_uid, post_text FROM ' . POSTS_TEXT_TABLE;
if (!$result = $db->sql_query($sql))
{
   message_die(GENERAL_ERROR, 'Could not access post table', '', __LINE__, __FILE__, $sql);
}
$nb1 = 0;
$nb2 = 0;
while($row = $db->sql_fetchrow($result))
{
   $match = '%\\[hide.*?\\](.*?)\\[/hide.*?\\]%sim';
   $message=addslashes($row['post_text']);
      if (preg_match($match,$message ))
   {
      $message = preg_replace($match, '\\1', $message);
      $sql = 'UPDATE ' . POSTS_TEXT_TABLE . "
          SET post_text = '" . str_replace("\'", "''",$message) ."'
          WHERE post_id=" . $row['post_id'];
      if (!$db->sql_query($sql))
      {
            message_die(GENERAL_ERROR, 'Could not update post table', '', __LINE__, __FILE__, $sql);
      }
      $nb1++;
   }
   $nb2++;
}
echo "traitement terminé, $nb1 message(s) mis à jour sur $nb2";
?>
Avatar de l’utilisateur
spitfire pat
Superstar
 
Messages: 14461
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: Remplacement d'une chaîne de caractères dans la BDD+jokers

Messagede elyom le 31 Aoû 2008 à 12:55

spitfire pat a écrit:non, tu ne peux pas faire de remplacements sur un joker avec une requête sql
bon, là l'erreur était dûe à la prsésnce d'un slash
Code: Tout sélectionner
<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
$sql = 'SELECT post_id, bbcode_uid, post_text FROM ' . POSTS_TEXT_TABLE;
if (!$result = $db->sql_query($sql))
{
   message_die(GENERAL_ERROR, 'Could not access post table', '', __LINE__, __FILE__, $sql);
}
$nb1 = 0;
$nb2 = 0;
while($row = $db->sql_fetchrow($result))
{
   $match = '%\\[hide.*?\\](.*?)\\[/hide.*?\\]%sim';
   $message=addslashes($row['post_text']);
      if (preg_match($match,$message ))
   {
      $message = preg_replace($match, '\\1', $message);
      $sql = 'UPDATE ' . POSTS_TEXT_TABLE . "
          SET post_text = '" . str_replace("\'", "''",$message) ."'
          WHERE post_id=" . $row['post_id'];
      if (!$db->sql_query($sql))
      {
            message_die(GENERAL_ERROR, 'Could not update post table', '', __LINE__, __FILE__, $sql);
      }
      $nb1++;
   }
   $nb2++;
}
echo "traitement terminé, $nb1 message(s) mis à jour sur $nb2";
?>

Merci encore pour toute ton aide qui m'a été d'un grand secours. Respect !

Je considère le sujet comme résolu. Bonne continuation à toi grand maître du PHP ! :wink:
elyom
Posteur néophyte
Posteur néophyte
 
Messages: 22
Inscription: 26 Avr 2006 à 02:59


Retourner vers Mises à jour/Conversions

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

Liens : phpBB.biz • phpBBHacks.com • phpBB-Seo.com • EzCom-fr.com • phpBB-Services.com • phpBB3 Styles • phpBB podpora • Net Avenir • PromoBenef • Ticket Gagnant •