J'ai mis en place un petit chat en php pour papoter avec mes amis. Et ça marche plutôt bien
C'était aussi mon premier vrai exercice (défi !) pour m'initier au php. Et en conséquence, j'essaie de l'améliorer au fur et à mesure de mes progrès.
Mais je bloque depuis plusieurs heures sur un problème : à l'aide d'une regex (preg_replace) j'ai voulu automatiser la reconnaissance d'url dans un texte (tapé dans un textarea) et évidemment la rendre cliquable. Jusque là tout va encore bien... sauf pour les url longues. J'aimerais bien les couper au niveau de l'affichage, comme c'est le cas sur le forum (par ex : www.blabla[...]bla.html). Je ne sais pas comment faire... Avec un preg_replace_callback ? Si oui, comment l'utiliser dans ce cas précis ?
Ci-dessous le bout de code correcpondant, avec l'objet du délit à la ligne 20
Code :
<?php
//enregistrer les nouvelles données dans la BDD avant de les afficher en vérifiant l'existence des variables et en se protégeant
if (isset($_POST['message']) OR isset($_POST['adresseWeb'])) //vérifie que les avraibles existent
{
if ($_POST['message'] != NULL OR $_POST['adresseWeb'] != NULL) //vérifie que les variables ne sont pas nulles
{
//on peut se connecter à la base
mysql_connect("sql.free.fr", "********", "********" ); //serveur (en local, localhost), login(en local, root), password (en local, rien)
mysql_select_db("lchampier" ); //choix de la base
//on se protège du risque d'exécution de code html
Vous trouverez ci-dessous ma propre solution (qui vaut ce qu'elle vaut...) en réponse à ma question initiale : couper les url trop longues. J'en ai profité pour y ajouter un tri des liens pointants vers une image, histoire de l'afficher directement
Code :
<?php
//enregistrer les nouvelles données dans la BDD avant de les afficher, tout en vérifiant l'existence des variables et en se protégeant
if (isset($_POST['message']) OR isset($_POST['adresseWeb'])) //vérifie que les variables existent
{
if ($_POST['message'] != NULL OR $_POST['adresseWeb'] != NULL) //vérifie que les variables ne sont pas nulles
{
//on peut se connecter à la base
mysql_connect("localhost", "root", "" ); //serveur (en local, localhost), login(en local, root), password (en local, rien)
mysql_select_db("test" ); //choix de la base
//on se protège du risque d'exécution de code html
Autre question : pourquoi verrouiller les dimensions de l'image à 300x200 ? Pourquoi ne pas les "laisser vivre" (les attributs de dimension peuvent être facultatifs, le moteur de rendu prenant comme dimensions celles de l'image effectivement affichée à l'avant-plan), jusqu'à des dimensions max, largeur et/ou hauteur, puisque PHP retrouve facilement les attributs de fichier d'image (dimensions, type/format, ..), au moins avec la fonction getimagesize ?
Autre chose : target="blank" s'écrit target="_blank" et 'target' n'est plus un attribut reconnu pour le cas de l'XHTML 1.0 Strict et 1.1.. Si tu veux faire un lien externe vers une nouvelle fenêtre, utilises un script JS adapté, genre celui trouvé sur http://tim.bellette.net/?cat=6 (c'est le premier que j'ai retrouvé sur Google, flemme d'allumer mon second PC juste pour retrouver le lien d'un autre avec un descriptif plus complet et plus précis des pourquoi et des comment), qui utilise l'attribut 'rel' : rel="external".. Dans les quelques cas où JS n'est pas activé ou exploité par le navigateur, le site n'est pas dégradé pour autant..
Message édité par Johan_et_Pirlouit le 30-01-2006 à 05:40:00
Je vais commencer par la fin !
- le target="_blank", je ne l'utilise pas, d'où mon erreur dans l'écriture même de la commande Je l'ai juste mis pour moi, afin de faire un test avant d'insérer le javascript (que tu m'avais déjà indiqué par ailleurs J&P, et je t'en remercie ).
- pour les images, le 300 x 200 n'était-là que temporairement aussi. En fait, je ne veux pas que sur la page s'affiche des images trop grandes, pour des raisons de design... Je pensais ensuite gérer tout ça par une commande css, limitant la largeur. Les images ne seront pas sur le serveur, mais en provenance de liens externes. Je vais donc me pencher sur getimagesize pour voir ce que je peux faire avec - enfin, pourquoi je ne mets pas une contrainte d'unicité sur la colonne message. Tout simplement parce que je ne savais pas que c'était possible ! Et la méthode que j'ai utilisée, c'est celle décrite dans le site du Zéro... Je vais aussi me pencher sur ça, ne serait-ce que pour alléger mon code
Encore merci pour toutes ces remarques constructives.
J'aurais juste une dernière question : comment automatiser le rafraichissement de la page toutes les x secondes (ou minutes ou heures...), sans perdre (et perturber) le texte en cours de frappe ? Pour le moment j'utilise le metatag refresh, mais il semble poser problème à quelques utilisateurs... Existe-t-il quelque chose de mieux ? Je n'ai rien trouvé à ce propos sur Google... peut-être n'ai-je pas su chercher avec les bons mots
- le target="_blank", je ne l'utilise pas, d'où mon erreur dans l'écriture même de la commande Je l'ai juste mis pour moi, afin de faire un test avant d'insérer le javascript
Désolé, j'aurais dû m'en douter ....... Mais il y a des jours où mes neurones dorment un peu plus que d'hab' ..