Page 1 sur 1

recherche mysql via preg_replace

Posté : 17 juil. 2012, 12:42
par teknophil
Bonjour,
en général j'arrive a m'en sortir avec mon amis Google mais là je sèche .

J'ai besoin d'afficher des descriptions de produits dans un text, pour éviter de réécrire la description a chaque fois, j'utilise ceci {n° id} dans le text qui me permet de récupérer l'id du produit et d'y inscrire sa description à la volé via:
$text = preg_replace('#\{(.+)\}#', descr_aide('$1'), $text);
Et volà la fonction descr_aide()
function descr_aide($id)
{
  $req = mysql_query("SELECT * FROM `produits` WHERE `id` =".$id." LIMIT 0 , 1");
  while($result = mysql_fetch_array($req))
  {
    return($result['descr']);
  }
}
J'obtiens ce message: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

J'ai fait quelques essai, je récupère bien l'id via preg_replace() dans ma fonction donc le problème ne me semble pas être là et quand je remplace ".$id." par l'id d'un produit pour voir si la requette mysql fonctionne, il n'y a pas d'erreur .

Voilà si quelqu'un a une solution ?
Merci .

Re: recherche mysql via preg_replace

Posté : 17 juil. 2012, 13:41
par xTG
Caractère non imprimable ou espace en plus de l'id ? ;)
Utilises var_dump() pour en avoir le coeur net.

Re: recherche mysql via preg_replace

Posté : 17 juil. 2012, 13:58
par teknophil
Je ne connaisai pas var_dump() (merci) voilà ce qu'il affiche:
string(2) "$1"
Donc c'est mon preg_replace() qui ne serai pas bon, j'ai fait une erreur pour mes arguments ?

Ce n'est peux être possible d'utiliser une fonction dans preg_replace() ?

Re: recherche mysql via preg_replace

Posté : 17 juil. 2012, 15:45
par teknophil
J'ai réussi mais utilisant autre chose .
J'ai ajouté preg_match() à mon preg_replace() :
preg_match('#\{([0-9]+)\}#', $descr, $matches);
$descr = preg_replace('#\{'.$matches[1].'\}#', descr_aide($matches[1]), $descr);
Donc je récupère dabord l'id dans $matches[1] puis je le transmet à preg_replace() en passant par ma fonction .

Si quelqu'un a une idée pour corriger l'erreur que j'ai faite au départ, ça m'intéresse toujours .
@+

Re: recherche mysql via preg_replace

Posté : 19 juil. 2012, 04:50
par blof
Bonjour,

preg_replace() ne permet pas d'utiliser une fonction comme tu le souhaites.

il te faut preg_replace_callback()

( avec une petite modif de ta fonction descr_aide )

Re: recherche mysql via preg_replace

Posté : 19 juil. 2012, 11:10
par sirakawa
dans ce genre de situation:
function descr_aide($id)
{
  $req = mysql_query("SELECT * FROM `produits` WHERE `id` =".$id." LIMIT 0 , 1");
  while($result = mysql_fetch_array($req))
  {
    return($result['descr']);
  }
}
est avantageusement remplacé par :
function descr_aide($id)
{
  $requete = "SELECT * FROM `produits` WHERE `id` =".$id." LIMIT 0 , 1";
print "===>$requete<===";
$resultat = mysql_query($requete) or die('Requête invalide : ' . mysql_error());
  while($result = mysql_fetch_array($req))
  {
    return($result['descr']);
  }
}

Re: recherche mysql via preg_replace

Posté : 19 juil. 2012, 15:44
par xTG
Au fait pourquoi un while ? Au vue de la limite...
Et en cas de requête qui ne retourne rien, la fonction ne retourne rien non plus, pas très propre. ;)