Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1721 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] While vs str_replace

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[PHP] While vs str_replace

n°154676
j-'-r
Sans horraires fixe
Posté le 09-06-2002 à 00:08:36  profilanswer
 

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 : --> *
mood
Publicité
Posté le 09-06-2002 à 00:08:36  profilanswer
 

n°154683
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 09-06-2002 à 00:26:00  profilanswer
 

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

n°154703
j-'-r
Sans horraires fixe
Posté le 09-06-2002 à 01:11:33  profilanswer
 

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


---------------
Perdu ? Vous êtes ici : --> *
n°154739
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 09-06-2002 à 01:44:47  profilanswer
 

[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

n°154756
ethernal
Chercheur de vérité...
Posté le 09-06-2002 à 01:55:38  profilanswer
 

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...
n°154759
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 09-06-2002 à 01:57:09  profilanswer
 

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

n°154764
ethernal
Chercheur de vérité...
Posté le 09-06-2002 à 01:58:30  profilanswer
 

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


---------------
...oups kernel error...
n°156084
Scoubidoo
In reblochon we trust
Posté le 10-06-2002 à 19:33:15  profilanswer
 

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...

n°156122
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 10-06-2002 à 20:40:51  profilanswer
 

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é
n°156137
Scoubidoo
In reblochon we trust
Posté le 10-06-2002 à 20:51:41  profilanswer
 

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
mood
Publicité
Posté le 10-06-2002 à 20:51:41  profilanswer
 

n°156242
ethernal
Chercheur de vérité...
Posté le 10-06-2002 à 23:05:19  profilanswer
 

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...
n°156244
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 10-06-2002 à 23:06:04  profilanswer
 

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é
n°156251
ethernal
Chercheur de vérité...
Posté le 10-06-2002 à 23:11:46  profilanswer
 

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...
n°156732
Scoubidoo
In reblochon we trust
Posté le 11-06-2002 à 15:39:13  profilanswer
 

Bon merci. Ca devrait etre mieux comme ca.

n°158968
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 13-06-2002 à 20:05:53  profilanswer
 

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


Message édité par joce le 13-06-2002 à 20:05:59
n°158981
ethernal
Chercheur de vérité...
Posté le 13-06-2002 à 20:32:30  profilanswer
 

voila qui me parait parfait !  :jap:


---------------
...oups kernel error...
n°159690
yannick_fr​ere
Posté le 14-06-2002 à 21:38:31  profilanswer
 

$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 !
n°159747
ethernal
Chercheur de vérité...
Posté le 15-06-2002 à 02:10:00  profilanswer
 

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...
n°159748
ethernal
Chercheur de vérité...
Posté le 15-06-2002 à 02:25:35  profilanswer
 

à 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...
n°159762
j-'-r
Sans horraires fixe
Posté le 15-06-2002 à 10:33:52  profilanswer
 

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 : --> *
n°159780
yannick_fr​ere
Posté le 15-06-2002 à 11:17:29  profilanswer
 

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


---------------
Lunetto-believer !
n°159809
ethernal
Chercheur de vérité...
Posté le 15-06-2002 à 13:32:36  profilanswer
 

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...
n°159929
yannick_fr​ere
Posté le 15-06-2002 à 18:09:06  profilanswer
 

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 !
n°159930
ethernal
Chercheur de vérité...
Posté le 15-06-2002 à 18:11:31  profilanswer
 

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


---------------
...oups kernel error...
n°159934
yannick_fr​ere
Posté le 15-06-2002 à 18:13:43  profilanswer
 

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


---------------
Lunetto-believer !
n°159955
yannick_fr​ere
Posté le 15-06-2002 à 18:31:52  profilanswer
 

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 !
n°159965
ethernal
Chercheur de vérité...
Posté le 15-06-2002 à 18:56:24  profilanswer
 

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...
n°160045
yannick_fr​ere
Posté le 15-06-2002 à 22:20:05  profilanswer
 

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 !
n°160171
ethernal
Chercheur de vérité...
Posté le 16-06-2002 à 11:52:31  profilanswer
 

<?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...
n°160190
yannick_fr​ere
Posté le 16-06-2002 à 13:18:02  profilanswer
 

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 !
n°160191
ethernal
Chercheur de vérité...
Posté le 16-06-2002 à 13:20:21  profilanswer
 

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...
n°160234
yannick_fr​ere
Posté le 16-06-2002 à 15:30:48  profilanswer
 

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 !
n°160235
yannick_fr​ere
Posté le 16-06-2002 à 15:34:07  profilanswer
 

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 !
n°160245
ethernal
Chercheur de vérité...
Posté le 16-06-2002 à 16:00:15  profilanswer
 

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...
n°160278
yannick_fr​ere
Posté le 16-06-2002 à 17:00:22  profilanswer
 

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 !
n°160292
ethernal
Chercheur de vérité...
Posté le 16-06-2002 à 18:04:07  profilanswer
 

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...
n°160295
yannick_fr​ere
Posté le 16-06-2002 à 18:27:16  profilanswer
 

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 !
n°160458
yannick_fr​ere
Posté le 17-06-2002 à 00:23:41  profilanswer
 

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


---------------
Lunetto-believer !
n°160536
ethernal
Chercheur de vérité...
Posté le 17-06-2002 à 10:34:09  profilanswer
 

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


---------------
...oups kernel error...
n°160963
yannick_fr​ere
Posté le 17-06-2002 à 15:52:07  profilanswer
 

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 !
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] While vs str_replace

 

Sujets relatifs
[PHP] A tous ceux qui maitrise les str_replace et autre eregJe débute en PHP !!!
[PHP / MySQL] erreur, je comprends pas :([PHP/MySQL] Sh@ardar --> ton histoire de CONCAT() en MySQL
[ PhP ] - récuperer un champs du dernier insert into[PHP] la faut m'expliquer !
[PHP] retrouver l'URL de la page en cours[PHP] $HTTP_POST_VARS et formulaire????
[PHP] Pb fonction nl2br et textarea... 
Plus de sujets relatifs à : [PHP] While vs str_replace


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR