Formater texte php avec liens inclus.

Fermé
t671 - 24 août 2010 à 17:18
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - 24 août 2010 à 19:37
Bonjour,

Dans un formulaire de saisie de texte, celui-ci peut contenir un lien (style http://.........). Le texte est enregistré dans un base de donnée.
A la demande, ce texte est afficher à l'écran, et je voudrais que le lien contenu soit cliquable.

Alors, vaut-il mieux formater le texte avant enregistrement pour rendre le lien cliquable, ou vaut-il mieux rendre le lien cliquable à l'affichage (donc formater le texte pour l'affichage) ?

Comment écrire l'une et l'autre solution ?

Merci d'avance pour l'aide apportée !
A voir également:

7 réponses

Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
24 août 2010 à 17:23
il vaut mieux ne pas formater les données avant de les stocker, ça bloquerait les évolutions et ré-utilisabilité du code.
La tu enregistres et récupères des données que tu exploite et reformates par la suite, c'est bien mieux et plus évolutif .
Comment écrire l'une et l'autre solution ?
Mmmm je vois pas bien ton problème la...
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
24 août 2010 à 17:29
Merci Zep3k!GnO.
OK ! Donc le texte est saisi, et contient un lien à l'intérieur.
Je ne formate pas le texte à l'enregistrement dans la base.
Mais à l'affichage du texte à l'écran, je voudrais que le lien contenu dans le texte soit cliquable.
Comment faire ?
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
24 août 2010 à 17:37
Heuu, bin tu le mets en lien (j'suis pas sur que ca soit ça, car c'est assez basique) :
Genre :
$sSqlQuery = "SELECT lien FROM 'TA_TABLE' WHERE id = 'TON_ID' ";
$mRet = mysql_query($sSqlQuery) or die('Error mysql query : '.$sSqlQuery.' -> '.mysql_error());
if(mysql_num_rows($mRet) > 0){
  while($aLinkData = mysql_fetch_assoc($mRet)){
     echo "<br/><a href='".$aLinkData['lien']."' >".$aLinkData['lien'].'</a>';
  }
}


C'est ça que tu voulais ?
A noter qu'il faut remplacer ma requête par la tienne...
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
24 août 2010 à 17:46
Oui, mais dans ta requête, le lien est bien défini et isolé par rapport au texte.
Mais si le lien est noyé dans le texte ???

J'ai trouvé une solution qui est :
$chaine = eregi_replace("([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])",
"<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\">\\1://\\2\\3</A>",$chaine);


mais à l'enregistrement, rien n'est écrit dans la base ! Je me demande si il faut modifier le format de ma base ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
Modifié par Zep3k!GnO le 24/08/2010 à 18:01
Si le lien est noyé dans le texte, il faut faire comme tu as fais pour le rendre cliquable, le détecter avec une regexp, tu fais un preg_replace par exemple et hop c'est bueno :)

P.S: attention eregi est deprecated depuis Php 5 ...


Zep3k!GnO
On est des rangers mec, des rangers...
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
24 août 2010 à 18:12
Oui, et si je l'utilise pour un site hébergé chez Free, c'est ok !
Mais si je mets la formule chez un autre hébergeur, ça ne fonctionne pas, l'enregistrement ne se fait pas ! Si je supprime la formule, le texte s'enregistre ... !!!!!!

Comment remédier à cela ???
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
24 août 2010 à 19:37
Problème résolu ....
Avant ça ne fonctionnait pas, maintenant ça fonctionne. Et j'ai rien changé ....!!!! ????

;o))

A++
0