[PHP] While vs str_replace

While vs str_replace [PHP] - PHP - Programmation

Marsh Posté le 09-06-2002 à 00:08:36    

Code :
  1. $smaa= array(":)",":cry:",";)",":(",":D"
  2. ,":hello:",":jap:",":love:",":bio:",":fuc
  3. k:"
  4. ,":fou:",":f:",":lol:",":ouch:",":zzz:"
  5. ,":pouceup:",":poucedown:",":??:" );
  6. $smbb= array("oui","cry","clin","non","D
  7. ","salut","merci","love","biosuz","doigt
  8. "
  9. ,"fou","joint","lol","ouch","z","pup"
  10. ,"pdo","pdi" );
  11. $nbr_sm=18;
  12. $nbr_vers_sm=0;
  13. while($nbr_vers_sm <= $nbr_sm )
  14. {
  15. $message=str_replace("$smaa[$mbr_vers_sm]","<img border=0 src=s/$smbb[$nbr_vers_sm].gif>",$message);
  16. $nbr_vers_sm++;
  17. }


 
il est ou le pb ? ca marche pô...


---------------
Perdu ? Vous êtes ici : --> *
Reply

Marsh Posté le 09-06-2002 à 00:08:36   

Reply

Marsh Posté le 09-06-2002 à 00:26:00    

tu sais qu'avec preg_replace tu peux passer directement les array en argument ? :D

Reply

Marsh Posté le 09-06-2002 à 01:11:33    

je sais pas m en servir...
 
mais si tu as un petit exemple :)


---------------
Perdu ? Vous êtes ici : --> *
Reply

Marsh Posté le 09-06-2002 à 01:44:47    

[php]
 $smaa= array(":)",":cry:",";)",":(",":D"
  ,":hello:",":jap:",":love:",":bio:",":fuc
  k:"  
   ,":fou:",":f:",":lol:",":ouch:",":zzz:"
  ,":pouceup:",":poucedown:",":??:" );  
  $smbb= array("oui","cry","clin","non","D
  ","salut","merci","love","biosuz","doigt
  "  
   ,"fou","joint","lol","ouch","z","pup"
  ,"pdo","pdi" );  
  $nbr_sm=18;  
  $nbr_vers_sm=0;  
  $message=preg_replace("/$smaa/","<img border=0 src=s/$smbb.gif>",$message);  
[/php]
 
je pense que ca doit marcher ca

Reply

Marsh Posté le 09-06-2002 à 01:55:38    

pour les smileys le str_replace est plus rapide je pense  :??:  
par contre qd tu as une balise de début et de fin (bbcodes) le preg_replace est mieux :)


---------------
...oups kernel error...
Reply

Marsh Posté le 09-06-2002 à 01:57:09    

ethernal a écrit a écrit :

pour les smileys le str_replace est plus rapide je pense  :??:  
par contre qd tu as une balise de début et de fin (bbcodes) le preg_replace est mieux :)  




oui mais bon vu qu'il fait une boucle while et qu'il a déjà son array, j'ai fait au plus rapide. :D

Reply

Marsh Posté le 09-06-2002 à 01:58:30    

je m'en doutais ;) :lol:
 
(en fait j-'-r espérait comme nous tous un copier-coller de ton oeuvre ;) )


---------------
...oups kernel error...
Reply

Marsh Posté le 10-06-2002 à 19:33:15    

joce a écrit a écrit :

[php]
 $smaa= array(":)",":cry:",";)",":(",":D"
  ,":hello:",":jap:",":love:",":bio:",":fuc
  k:"  
   ,":fou:",":f:",":lol:",":ouch:",":zzz:"
  ,":pouceup:",":poucedown:",":??:" );  
  $smbb= array("oui","cry","clin","non","D
  ","salut","merci","love","biosuz","doigt
  "  
   ,"fou","joint","lol","ouch","z","pup"
  ,"pdo","pdi" );  
  $nbr_sm=18;  
  $nbr_vers_sm=0;  
  $message=preg_replace("/$smaa/","<img border=0 src=s/$smbb.gif>",$message);  
[/php]
 
je pense que ca doit marcher ca  




 
J'ai essayé et ca veut pas fonctionner. La syntaxe est bonne mais ca ressort tel qu'elle sans modif...

Reply

Marsh Posté le 10-06-2002 à 20:40:51    

et ca :
 

$smaa= array(":)",":cry:",";)",":(",":D"
  ,":hello:",":jap:",":love:",":bio:",":fuc
  k:"  
   ,":fou:",":f:",":lol:",":ouch:",":zzz:"
  ,":pouceup:",":poucedown:",":??:" );  
  $smbb= array("oui","cry","clin","non","D
  ","salut","merci","love","biosuz","doigt
  "  
   ,"fou","joint","lol","ouch","z","pup"
  ,"pdo","pdi" );  
  $message=preg_replace("/$smaa/is","<img border=\"0\" src=\"s/$smbb.gif\">",$message);


Message édité par joce le 06-10-2002 à 20:41:06

---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Marsh Posté le 10-06-2002 à 20:51:41    

pareil :(

Code :
  1. $message=preg_replace("/$smaa/is","<img src=\".\/smileys\/S/$smbb.gif\" border=\"0\" alt=\"\">",$message);


Message édité par Scoubidoo le 06-10-2002 à 20:55:52
Reply

Marsh Posté le 10-06-2002 à 20:51:41   

Reply

Marsh Posté le 10-06-2002 à 23:05:19    

bcp plus rapide :

Code :
  1. $smaa= array(":)", ":cry:", ";)", ":(", ":D", ":hello:", ":jap:", ":love:", ":bio:", ":fuck:", ":fou:", ":f:", ":lol:", ":ouch:", ":zzz:", ":pouceup:", ":poucedown:", ":??:" ); 
  2. $smbb= array("oui", "cry", "clin", "non", "D", "salut", "merci", "love", "biosuz", "doigt", "fou", "joint", "lol", "ouch", "z", "pup", "pdo", "pdi" ); 
  3. for ($i=0, $max=count($smaa);$i<$max; $i++){
  4.    $message=str_replace($smaa[$i],
  5.                        '<img border="0" src="'.$smbb[$i].'.gif">',
  6.                        $message);
  7. }


 
[test]

Citation :



Citation :

:) :/ http://forum.hardware.fr/images/perso/ethernal.gif

Code :
  1. test


 


 

Code :
  1. test:) :)
  2. http://forum.hardware.fr/images/perso/ethernal.gif


 
[/test]


Message édité par ethernal le 06-11-2002 à 01:07:08

---------------
...oups kernel error...
Reply

Marsh Posté le 10-06-2002 à 23:06:04    

ethernal a écrit a écrit :

bcp plus rapide :

Code :
  1. $smaa= array(":)",":cry:",";)",":(",":D"
  2. ,":hello:",":jap:",":love:",":bio:",":fuc
  3. k:" 
  4.   ,":fou:",":f:",":lol:",":ouch:",":zzz:"
  5. ,":pouceup:",":poucedown:",":??:" ); 
  6. $smbb= array("oui","cry","clin","non","D
  7. ","salut","merci","love","biosuz","doigt
  8.   ,"fou","joint","lol","ouch","z","pup"
  9. ,"pdo","pdi" ); 
  10. for ($i=0, $max=count($smaa);$i<$max; $i++){
  11.    $message=str_replace($smaa[$i],
  12.                        '<img border="0" src="'.$smbb[$i].'.gif">',
  13.                        $message);
  14. }

 




yep :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Marsh Posté le 10-06-2002 à 23:11:46    

Joce, ça foire pas mal qd on insère des bbcodes dans le [ code ] [ /code ]
 
tu pourrais remplacer les [ et ] par &# 091; &# 093; dans les balises [code ] après avoir transformé le gras, souligné, couleur, comme ça plus de problème ;)
(enfin, moi c ce que j'ai fait...)


Message édité par ethernal le 06-11-2002 à 01:27:58

---------------
...oups kernel error...
Reply

Marsh Posté le 11-06-2002 à 15:39:13    

Bon merci. Ca devrait etre mieux comme ca.

Reply

Marsh Posté le 13-06-2002 à 20:05:53    

Code :
  1. test
  2. http://forum.hardware.fr/images/perso/ethernal.gif


Message édité par joce le 13-06-2002 à 20:05:59
Reply

Marsh Posté le 13-06-2002 à 20:32:30    

voila qui me parait parfait !  :jap:


---------------
...oups kernel error...
Reply

Marsh Posté le 14-06-2002 à 21:38:31    

$smaa= array(":)",":cry:",";)",":(",":D"
,":hello:",":jap:",":love:",":bio:",":fuc
 
k:"  
 ,":fou:",":f:",":lol:",":ouch:",":zzz:"
,":pouceup:",":poucedown:",":??:" );  
$smbb= array("oui","cry","clin","non","D
","salut","merci","love","biosuz","doigt
"  
 ,"fou","joint","lol","ouch","z","pup"
,"pdo","pdi" );  
for ($i=0, $max=count($smaa);$i<$max; $i++){
  $message=str_replace($smaa[$i],  
                      '<img border="0" src="'.$smbb[$i].'.gif">',  
                      $message);  
}


 
 
Est-ce que quelqu'un pourrait m'aider à faire une extension à ce programme ?
J'aimerais que les tableaux ($smaa etc) soient initialisés à partir d'une table mysql et que la boucle qui remplace les caractères devienne une fonction ...
 
Je bute sur ceci :
1) J'ai lu sur un autre topic que mes variables de tableau n'étant pas déclarées dans la fonction, celle-ci n'y a pas accès --> problème ! Il faudrait en effet que je puisse initialiser les tableaux une seule fois au début, et ensuite pouvoir appeler autant de fois que je désire les fonctions pour remplacer ! Sinon, je dois initialiser les tableaux dans la fonction, ce qui ferait beaucoup de boulot pour rien ! Et peut-être de gros temps de chargement quand on appelle souvent les fonctions (comme dans le cas d'un forum ...).
2) Je ne sais pas déclarer un tableau vide ! Je suis obligé de mettre une première valeur, ce qui fausse les remplacements (enfin, on dirait !)
 
Quelqu'un pourrait-il m'aider ?
 
 
Merci d'avance !


---------------
Lunetto-believer !
Reply

Marsh Posté le 15-06-2002 à 02:10:00    

Code :
  1. function generateSmileys(){
  2.   global $connexion;
  3. //déclaration d'un tableau vide
  4.   $smileys= array();
  5. //chargement des smileys de la bd
  6.   $res= mysql_query( "select code, image from smileys", $connexion );
  7.   while ( list($code, $img) = each(mysql_fetch_array($res)) ){
  8.     $smileys[$code]= $img;
  9.   }
  10.   return $smileys;
  11. }
  12. function addSmileys($iSmileys, $iString){
  13. //remplacement des smileys dans un string
  14.   while ( $list($code, $img)= each($iSmileys) ){
  15.     $message=str_replace($code, 
  16.                      '<img border="0" src="'.$img.'.gif">', 
  17.                      $iString);
  18.   }
  19.   return $iString;
  20. }
  21. $smileys= generateSmileys();
  22. $message="xx...";
  23. $message= addSmileys($smileys, $message);


 
Si tu veux tu peux déclarer $smileys en global pour ne pas devoir le passer à la fonction addSmileys.
 

Code :
  1. //déclarer un attribut en global (accessible partout)
  2. global $attribut;


Message édité par ethernal le 15-06-2002 à 02:10:44

---------------
...oups kernel error...
Reply

Marsh Posté le 15-06-2002 à 02:25:35    

à votre avis qu'est-ce qui est le plus intéressant ?

  • remplacer dans chaque message tous les codes smileys par des images (classique)

On prend un message de la bd, on recherche les smileys les uns à la suite des autres et on les remplace si nécessaire.  Puis on passe au message suivant et ainsi de suite.
 
ou
 

  • concatener tous les messages, remplacer les codes smileys par des images, "exploder" les messages.


l'avantage de la seconde proposition est que l'on ne parcourt qu'une fois le texte à la recherche d'un smiley disponible(proposé).  Un même smiley présent dans plusieurs messages différents sera remplacé en 1 passage.
 
Inconvénient, on le fait sur un grand texte et il faut éventuellement exploder après.


Message édité par ethernal le 15-06-2002 à 02:26:20

---------------
...oups kernel error...
Reply

Marsh Posté le 15-06-2002 à 10:33:52    

pas trop mal l idée, mais il y a des risque de perte de mise en forme avec la deusieme methode,
mais je vais essayer, car mon temps de calcul est trop long...


---------------
Perdu ? Vous êtes ici : --> *
Reply

Marsh Posté le 15-06-2002 à 11:17:29    

Ethernal, merci pour le programme !
 
Je vais essayer ça tout de suite !


---------------
Lunetto-believer !
Reply

Marsh Posté le 15-06-2002 à 13:32:36    

yannick_frere> de rien ;)  
 
 
j-'-r> qu'entends tu par avoir des pertes de mise en forme ?
 
ex  
- tu décides que le caractère de séparation sera le {.
- tu transformes dons dans chaque message le { en code html (si jamais l'utiisateur le met dans son message...)
- tu concatènes le message au texte des messages
- tu remplaces dans ce texte les smileys, bbcodes, ... (évidemment il n'y a pas de limitation possible du nombre de smileys dans ce cas...)
- tu explodes le texte en message
- tu affiches chaque sujet, message, ....


---------------
...oups kernel error...
Reply

Marsh Posté le 15-06-2002 à 18:09:06    

Argh !!!
 
 
Y a une parse error à cette ligne-ci :
 
while ( $list($code, $img)= each($iSmileys) )
 
Dans phpEdit, y a une infobulle qui dit ceci, concernant cette ligne : array each(array array) ...
 
A noter que ça ne s'exécute pas non plus sur Multimania, à cause de la même ligne !
 
Zut ! Que puis-je faire ?? Tu vois où se situe le problème, Ethernal ?


---------------
Lunetto-believer !
Reply

Marsh Posté le 15-06-2002 à 18:11:31    

while ( $list($code, $img)= each($iSmileys) )
 :non:  
while ( list($code, $img)= each($iSmileys) )
 :jap:


---------------
...oups kernel error...
Reply

Marsh Posté le 15-06-2002 à 18:13:43    

Aaah merci ^^
 
J'essaie ça !
 
 
C'est sympa de m'aider !


---------------
Lunetto-believer !
Reply

Marsh Posté le 15-06-2002 à 18:31:52    

Y a quand même un truc qui marche pas, et que je ne comprend pas !
 
Il y a la ligne
 

global $id_cx ;

 ($id_cx remplace ton $connexion)
 
Donc, ça veut simplement dire qu'$id_cx peut être utilisé dans d'autres scripts que celui dans lequel il a été créé, c'est bien ça ?
 
Mais pourquoi est-ce qu'on place le "global" ici ? Est-ce qu'on ne devrait pas le placer au moment où $id_cx est créé, c'est-à-dire dans mon petit package de connexion à la bd que j'inclu juste avant ton programme ?
 
En tout cas, mon problème est celui-ci : j'ai mis
 

$res= mysql_query( "select code, to from replace", $id_cx ) or die(1);


 
et j'ai "1" quand j'exécute le fichier (enfin, quand j'exécute le fichier suivant :
 

<?php
include('../modules/db_connect.php') ;
include('../modules/text_maker.php') ;
?>
 
.
.
.
 
<?php
$smileys= generateSmileys();
$message="Hello World :)";
$message= addSmileys($smileys, $message);
echo $message ;
?>


 
 
Pas doué hein ? ;o)


---------------
Lunetto-believer !
Reply

Marsh Posté le 15-06-2002 à 18:56:24    

ta query est pas bonne
$res= mysql_query( "select code, image to from replace", $id_cx ) or die(1);
tu ne peux pas avoir de virgule directement avant un "from".
 
pour le global, ça veut dire que tu utilises une variable qui a été déclarée dans le programme principal et que tu peux la modifier directement.
 
maintenant, je n'ai pas encore testé

Code :
  1. <?
  2. function test(){
  3.   global $x;
  4.   $x='test';
  5. }
  6. test();
  7. echo $x;
  8. ?>


mais je suppose que ça devrait écrire 'test'...


---------------
...oups kernel error...
Reply

Marsh Posté le 15-06-2002 à 22:20:05    

Arf, ça marche toujours po snif ...  :(
 
J'ai fait ceci :
 

$res= mysql_query( "SELECT code,image FROM replace",$id_cx ) or die(1);


 
et ça n'a rien changé ...
 
Donc, comme je suppose qu'il y a une arnaque avec la variable $id_cx, j'ai fait ceci :
 

<?php
 
 
//déclaration d'un tableau vide
global $smileys ;
$smileys = array() ;
//J'ai également essayé "global $smileys=array() ;"
 
//chargement des smileys de la bd
$res= mysql_query( "SELECT code,image FROM replace", $id_cx ) or die(1);
while ( list($code, $img) = each(mysql_fetch_array($res)) )
  {
  $smileys[$code]= $img;
  } ;
 
 
function addSmileys($iString)
 {
 //remplacement des smileys dans un string
  while ( list($code, $img)= each($smileys) )
  {
     $message=str_replace($code,'<img border="0" src="'.$img.'.gif">',$iString);
  }
  return $iString;
 }
 
?>


 
 
et voici ce que j'obtiens :
 

Parse error: parse error, expecting `','' or `';'' in text_maker.php on line 5
 
Fatal error: Call to undefined function: addsmileys() in string.php on line 14


 
 
Text_maker.php, c'est le programme ci-dessus. La ligne 5 étant "global $smileys ;"
 
 
Bref, les fonctions et moi, c'est vraiment pas la gloire ...


---------------
Lunetto-believer !
Reply

Marsh Posté le 16-06-2002 à 11:52:31    

<?php
 
 
//déclaration d'un tableau vide
$smileys = array() ;
//J'ai également essayé "global $smileys=array() ;"
 
//chargement des smileys de la bd
$res= mysql_query( "SELECT code,image FROM replace", $id_cx ) or die(1);
while ( list($code, $img) = each(mysql_fetch_array($res)) )
  {
  $smileys[$code]= $img;
  }  
//pas de ; après une }
 
 
function addSmileys($iString)
 {
        global $smileys;
 //remplacement des smileys dans un string
  while ( list($code, $img)= each($smileys) )
  {
     $message=str_replace($code,'<img border="0" src="'.$img.'.gif">',$iString);
  }
  return $iString;
 }
 
?>


---------------
...oups kernel error...
Reply

Marsh Posté le 16-06-2002 à 13:18:02    

L'épisode du jour ...
 
Bon, apparemment, le coup du point-virgule a débloqué un peu le machin, mais j'ai toujours que "1" qui s'affiche ... Autrement dit, la requète foire ...
 
Je pige vraiment plus rien ! Pourtant j'inclus bien les bons fichiers ! Pis j'ai déjà fait ce genre de truc plein de fois (include un fichier qui crée la connexion à la BD, pis faire des requètes utilisant $id_cx) ... mais là, que dalle !
 
Il n'y aurait pas moyen de demander à Mysql de fournir plus d'infos sur ce qui ne va pas ?
 
Et est-ce que certains d'entre vous utilisent des éditeurs de php ? Parce que je tape mon code sous Dreamweaver, là ... Peut-être qu'un éditeur de code avec un simulateur pourra en dire plus long sur ce qui ne va pas ... ?


---------------
Lunetto-believer !
Reply

Marsh Posté le 16-06-2002 à 13:20:21    

vérifie le nom des champ et de ta table.
 
teste ta query sous mysql en ligne de commande ou sur phpMyAdmin


---------------
...oups kernel error...
Reply

Marsh Posté le 16-06-2002 à 15:30:48    

Honnêtement, il faut pas croire, mais je suis vraiment gêné de te faire perdre ton temps comme ça, Ethernal !
 
J'ai testé ma requête sur phpmyadmin (riche idée d'ailleurs) avec le nom de table "replace" et elle n'a pas fonctionné. J'ai donc changé la table pour "smileys" car je me suis dit que peut-être le mot "replace" était un mot réservé de Mysql. Ca marchait sur phpmyadmin (j'ai essayé plusieurs fois, au cazou) mais j'ai toujours "1" quand j'exécute mes fichiers sur le server ... Ce n'était donc pas cela, ou du moins pas "que" cela ...
 
 
Donc, allons-y pour les détails ! Si ça se fait, c'est une grosse bétise que j'oublie, et je sens que je vais m'en vouloir, mais bon ...
 
Mon répertoire s'architecture comme ceci : dans la racine, j'ai le fichier index.php, puis les répertoires "modules" et "tests". "Modules" contient le fichier "text_maker.php" qui est le programme que tu m'as filé ainsi que les fichiers qui permettent de se connecter à ma base de donnée et de la fermer. J'utilise ces fichiers pour toutes mes pages et ils ont l'air de fonctionner parfaitement ... Ensuite, "tests" contient le fichier "string.php" qui est le fichier que j'exécute pour essayer de faire remplacer un smiley dans une chaine ...
 
 
Voici le contenu du fichier string :
 

<html>
<head>
<title>Untitled Document</title>
<?php
include('../modules/db_connect.php') or die(2);
include('../modules/text_maker.php') ;
?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
 
<body bgcolor="#FFFFFF" text="#000000">
<?php
$message="Hello World :)";
$message= addSmileys($message);
echo $message ;
?>
<?php include('../modules/db_close.php') ; ?>
</body>
</html>


 
Et le contenu du fichier "text_maker.php" :
 

<?php
 
 
//déclaration d'un tableau vide
global $smileys ;
$smileys = array() ;
 
//chargement des smileys de la bd
$res= mysql_query("SELECT code,image FROM smileys", $id_cx ) or die(1);
while ( list($code, $img) = each(mysql_fetch_array($res)) )
 {
 $smileys[$code]= $img;
 }
 
 
function addSmileys($iString)
 {
 //remplacement des smileys dans un string
  while ( list($code, $img)= each($smileys) )
  {
     $message=str_replace($code,'<img border="0" src="'.$img.'.gif">',$iString);
  }
  return $iString;
 }
 
?>
 
 
<script language="JavaScript" type="text/javascript">
<!--
.
.
.
//-->
</script>


 
 
Donc voila ! Je me demande bien où je fais l'erreur !
 
A noter que je viens juste de faire une ch'tite expérience : remplacer les "include (etc)" dans "string.php" par le contenu des fichiers concernés ... ben là ça marche ! Enfin non : ma chaine contient toujours ":)" mais au moins j'ai plus le "1" du "die" de la requête ... bref, ça progresse ...
 
Je préfère ne pas tirer de conclusion sur cette expérience ...
Ce qui est certain, c'est que ça me fait vraiment ch*** ! Le bon côté des choses, c'est que je ne ferai plus jamais cette erreur, si on la trouve ... Je sais, c'est maigre comme consolation pour le pauvre Ethernal ! En tout cas, merci beaucoup pour ton aide !


---------------
Lunetto-believer !
Reply

Marsh Posté le 16-06-2002 à 15:34:07    

Attention, je voulais dire ceci :
 
Enfin non : ma chaine contient toujours ":)"
 
Le forum a remplacé ":)" par le smiley, mais c'est bien le code texte que je vois, pas le dessin ...
J'avais oublié de décocher la case "désactiver les smilies" ...
 
Voila ..


---------------
Lunetto-believer !
Reply

Marsh Posté le 16-06-2002 à 16:00:15    

contenu du fichier string :
 

<html>
<head>
<title>Untitled Document</title>
<?php
include('../modules/db_connect.php') or die(2);
include('../modules/text_maker.php') ;
?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
 
<body bgcolor="#FFFFFF" text="#000000">
<?php
$message="Hello World :)";
$message= addSmileys($message);
echo $message ;
?>
<?php include('../modules/db_close.php') ; ?>
</body>
</html>


 
contenu du fichier "text_maker.php" :
 

<?php
 
 
//déclaration d'un tableau vide
$smileys = array() ;
 
//chargement des smileys de la bd
$res= mysql_query("SELECT code,image FROM smileys", $id_cx ) or die(1);
while ( list($code, $img) = each(mysql_fetch_array($res)) )
 {
 $smileys[$code]= $img;
 }
 
 
function addSmileys($iString)
 {
  [g]global $smileys[/g]
 //remplacement des smileys dans un string
  while ( list($code, $img)= each($smileys) )
  {
     $message=str_replace($code,'<img border="0" src="'.$img.'.gif">',$iString);
  }
  return $iString;
 }
 
?>
 
 
<script language="JavaScript" type="text/javascript">
<!--
.
.
.
//-->
</script>


 
que contient ../modules/db_connect.php ?
si ta connexion est créée dans une fonction tu dois aussi la déclarer en global.


Message édité par ethernal le 16-06-2002 à 16:00:37

---------------
...oups kernel error...
Reply

Marsh Posté le 16-06-2002 à 17:00:22    

J'ai ajouté le "global $smileys ;" dans la fonction et l'ai retiré du code au-dessus comme tu me l'as indiqué, mais ça ne marche toujours pas ...
 
D'ailleurs, ça m'aurait étonné car je suppose que le server ne passe même pas par cette ligne, vu qu'il s'arrête à la requête (via le die) ...
J'ai également fait les modifications dans le fichier qui est la fusion des 3 (sans "include" donc) et le résultat est le même : la requête passe, la phrase s'affiche, mais le smiley n'y est pas. Disons que j'ai pas réglé correctement les noms d'images dans la base de donnée, mais je considère que si le remplacement a lieu, il y aura la balise img etc et donc même si je n'ai pas d'image, j'aurai le cadre d'image avec une erreur ... donc, le problème ne vient pas de là ... Pis je vérifie la source du fichier donc, je le verrais si ça marchait ...
 
Contenu du fichier db_connect.php (je masque quand même les infos privées hein ;o) :
 

<?php
 //connection à la base de données
 $host = "localhost";
 $usr = "mon identifiant chez Multimania";
 $pwd = "mon mot de passe";
 $db = "le nom de ma base de donnée (== identifiant_db)";
 $id_cx = mysql_connect($host, $usr, $pwd) or die("la connexion SQL a été refusée" );
 $r = mysql_select_db($db, $id_cx) or die("la connexion a la BD ".$db." a echoué" );
?>


 
 
 
Allez, tant que j'y suis, je met également le contenu du fichier fusionné :
 

<html>
<head>
<title>Untitled Document</title>
 
<?php
 //connection à la base de données
 $host = "localhost";
 $usr = "identifiant";
 $pwd = "mot de passe";
 $db = "identifiant_db";
 $id_cx = mysql_connect($host, $usr, $pwd) or die("la connexion SQL a été refusée" );
 $r = mysql_select_db($db, $id_cx) or die("la connexion a la BD ".$db." a echoué" );
 
//déclaration d'un tableau vide
$smileys = array() ;
 
//chargement des smileys de la bd
$res= mysql_query("SELECT code,image FROM smileys", $id_cx ) or die(1);
while ( list($code, $img) = each(mysql_fetch_array($res)) )
 {
 $smileys[$code]= $img;
 }
 
 
function addSmileys($iString)
 {
 global $smileys ;
 //remplacement des smileys dans un string
  while ( list($code, $img)= each($smileys) )
  {
     $message=str_replace($code,'<img border="0" src="'.$img.'.gif">',$iString);
  }
  return $iString;
 }
 
?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
 
<body bgcolor="#FFFFFF" text="#000000">
<?php
$message="Hello World :)";
$message= addSmileys($message);
echo $message ;
?>
<?php include('../modules/db_close.php') ; ?>
</body>
</html>


 
 
Tiens, c'est bizarre ... (ceci est une réflexion en direct ...). Dans la fonction addsmileys, tu retournes $iString alors que tu travailles sur $message ... J'me demande si ça n'irait pas mieux en retournant $message ... J'vais voir ça ...
 
Bon, j'ai essayé ceci :
 

function addSmileys($iString)
 {
 global $smileys ;
 //remplacement des smileys dans un string
  while ( list($code, $img)= each($smileys) )
  {
     $iString=str_replace($code,'<img border="0" src="'.$img.'.gif">',$iString);
  }
  return $iString;
 }


 
Mais ça ne marche pas non plus ... Je commence à me demander si Multimania ne serait pas en panne, vu que c'est assez régulier (même si mes autres pages fonctionnent ...)
 
 
 
Bon ben je crois qu'avec ça, tu as toutes les données !
Si jamais tu en avais marre ou bien si tu cales, ce n'est pas grave hein ! Je travaillerai sur quelque chose d'autre en attendant d'avoir de meilleures connaissances ... Ca m'énerve de n'avoir jamais réussi à faire une fonction (je réalise maintenant que c'est peut-être bien à cause du problème que j'ai actuellement), m'enfin bon ... Je veux pas que tu perdes ton temps quoi !


---------------
Lunetto-believer !
Reply

Marsh Posté le 16-06-2002 à 18:04:07    

dis moi , tu as le smiley ':)' dans ta base au moins ??
 
j'utilise jamais le 'or die()' dans mes progs, je ne sais pas exactement comment il fonctionne.
S'il se base sur le fait que si la fonction retourne false, il exécute le die(), un select vide retourne 0 qui peut être assimilé à false. ce qui peut engendrer des confusions...
 
pour être sur utilise plutôt
if (!$id_cx){
 echo "pas de connexion BD";  
 exit;
}
$res= mysql_query("select...",$id_cx);
...


---------------
...oups kernel error...
Reply

Marsh Posté le 16-06-2002 à 18:27:16    

Salut !
 
Décidément, t'auras eu du mérite de m'aider ;o)
 
 
Alors, le code smiley se trouve bien dans la table ...
 
Le "or die", ça fonctionne comme ceci : si l'instruction qui précède le "or" échoue, alors le contenu de die() s'exécute ... Donc, je pense qu'un select vide ne changerait rien, car la requète aurait quand même eu lieu ... elle est vide, soit, mais elle a eu lieu ...
 
J'ai utilisé le if comme tu me l'as demandé et le résultat est immédiat : "Pas de connexion BD" ... Ca explique quand même bien des choses ...
 
Donc, l'expérience du fichier fusionné et celle-ci montre bien, je crois, qu'il y a un gros problème avec les include() : j'inclu le fichier "db_connect.php" qui crée correctement la connexion $id_cx (puisque la connexion marche dans le fichier fusionné) mais apparemment, $id_cx n'est pas accessible au reste du fichier, et donc, au moment de faire la requête ...
 
C'est d'ailleurs très étrange car tous mes autres fichiers utilisent cette méthode et ça marche très bien ... J'y comprend vraiment plus rien !
Mais j'aimerais quand même essayer d'avoir le fin mot, car j'ai plusieurs fichiers avec des fonctions comme ça que je n'ai jamais pu faire marcher alors que je pensais qu'ils étaient corrects ... Je suppose qu'il s'agit de la même erreur qu'actuellement ...


---------------
Lunetto-believer !
Reply

Marsh Posté le 17-06-2002 à 00:23:41    

Diantre !
 
Si Ethernal me lache, j'suis fichu ;o)


---------------
Lunetto-believer !
Reply

Marsh Posté le 17-06-2002 à 10:34:09    

ouaip désolé je suis à court d'idée là :(.


---------------
...oups kernel error...
Reply

Marsh Posté le 17-06-2002 à 15:52:07    

Ah ... bon ben tant pis ^^
 
Merci quand même pour tout le temps que tu as passé à m'expliquer !
J'ai vraiment apprécié !
 
 
Tiens ? T'es belge ? Quel dommage ce match contre le Brésil !
Bon, je m'attendais à la défaite, mais pas comme ça ...
 
Enfin soit, ça n'a pas grand chose à voir avec la programmation !
 
Bybye !


---------------
Lunetto-believer !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed