Fonction dans une commande "preg_replace"

Résolu/Fermé
crocoscore Messages postés 165 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 3 février 2015 - 9 juin 2011 à 19:26
crocoscore Messages postés 165 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 3 février 2015 - 13 juin 2011 à 16:02
Amis zéros, bonjour :) !
Avant de vous expliquez mon problème, je vais vous montrer ce que je souhaite faire.

Je suis en train de construire un site où l'on peut publier des articles et, dans ces derniers ajouter des images. C'est dernière sont insérer avec un bbcode que voici: "[img]image_exemple.jpg/img". Je souhaite que les images soient disposées une à droite, une à gauche, une à droite, une à gauche ( :-° ...) en utilisant le CSS avec "float: left;" et "float: right;". Le bbcode que j'avais avant de me lancer dans cette mise-en-page donnait "<a href="image_exemple.jpg"><img src="image_exemple.jpg" alt="image" />". Ainsi, le mieux aurait été d'avoir une fonction CSS qui permet de sélectionner un élément sur deux... mais ça n'existe pas :p .

Donc j'ai trouver deux solutions. La première consiste à récupérer le nombre d'image contenus dans l'article, car je le stock dans une table, et de créer une fonction PHP qui créer automatique les propriétés CSS en utilisant "nth-child". Le problème c'est que ça fait un code CSS énorme et qu'en plus c'est pas compatible avec les navigateurs obsolètes (genre, complètement au hasards, ie8 :lol: ).

J'ai donc choisis la seconde mais avec laquelle je rencontre un problème. Donc cette deuxième solution consiste à utiliser une fonction, nommé "recuperID()" qui récupère l'ID de l'image dans la BDD. Si son ID est pair, on place à gauche, sinon, on place à droite. La voici :
<code type="php">
<?php
function recuperID($fichier)
{
include("../include/login.php");
mysql_select_db('v2',$connect) or die ("<h2>Erreur de connexion à la base de donnée.</h2>");
$reponse = mysql_query("SELECT * FROM fichier WHERE nom_fichier='". $fichier ."'");
while ($donnees = mysql_fetch_array($reponse) )
{
$id = $donnees['id'];
$titre = $donnees['titre'];
$description = $donnees['description'];
$timestamp = $donnees['timestamp'];
}

if ($id&1)
{
$left = "left";
echo $left;
}
else
{
$right = "right";
echo $right;
}
?>
}</code>

Mais c'est avec "preg_replace" que je rencontre un problème :( . Voilà ce que j'aurais aimé voir fonctionner:
<code type="php">
<?php
$content = preg_replace(''\[img\](.+)\/img\'isU', '<a href="$2"><img src="$1" alt="" style="float: '. recuperID($1) . ';"/></a>', $content);
?></code>

donc je vous invite à trouver une autre solution si on ne peut résoudre ce problème ^^ .

Merci d'avance, j'attends votre aide avec impatience :) !
A voir également:

2 réponses

Profil bloqué
9 juin 2011 à 19:30
Salut,

Je ne me suis jamais servi de ça, mais il me semble que ça demande 4 paramètres preg_replace, et je n'en vois que 2 non ?

https://www.php.net/manual/fr/function.preg-replace.php

0
crocoscore Messages postés 165 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 3 février 2015 5
10 juin 2011 à 11:29
Non, 3 suffises. Ici : "\[img\](.+)\/img\'isU'" (départ) + '<a href="$2"><img src="$1" alt="" style="float: '. recuperID($1) . ';"/></a>'' (arrivée) + "$content" (le texte à parser)
0
Profil bloqué
10 juin 2011 à 11:40
Je ne comprends pas bien ton problème,

Tu as des images dans une bdd, et tu veux afficher un coup à droite, un coup à gauche ?

Pourquoi se servir de cette fonction ?
0
crocoscore Messages postés 165 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 3 février 2015 5
Modifié par crocoscore le 10/06/2011 à 15:10
Les images font partis d'articles enregistrer dans une autre table. J'utilise donc le bbcode
[img]imag.jpg[/img]
pour ajouter une image.
0
Profil bloqué
10 juin 2011 à 15:52
Je ne connais pas trop les bbcodes, mais pourquoi ne ferais tu pas une boucle php, un tant que il y a des images qui correspondent à afficher, faire: afficher à droite, écrire 20 lignes, afficher à gauche, écrire 20 lignes ?

Enfin pour le concept ?
0
crocoscore Messages postés 165 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 3 février 2015 5
10 juin 2011 à 19:01
Merci pour l'idée, je vais regarder.
0
crocoscore Messages postés 165 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 3 février 2015 5
13 juin 2011 à 16:02
J'ai trouver une solution qui fonction bien. On applique directement le positionnement sur le bbcode. Ainsi, après upload de l'image, si son id est pair, on place à gauche, sinon à droite.
$reponse = mysql_query("SELECT * FROM fichier WHERE nom_fichier='". $nom_fichier ."'");
				while ($donnees = mysql_fetch_array($reponse) )
				{
					$id = $donnees['id'];
					$titre = stripslashes($donnees['titre']);
					$description = stripslashes($donnees['description']);
					$timestamp = $donnees['timestamp'];
				}
				
				if ($id&1) //gauche (left)
				{
					$code = '[img position="gauche" titre="'. $titre . '" description="' . $description . '"]' . $nom_fichier . '[/img]';
				}
				else //droite (right)
				{
					$code = '[img position="droite" titre="'. $titre . '" description="' . $description . '"]' . $nom_fichier . '[/img]';
				}


Il ne reste plus qu'à parser ce code avec preg_replace et le tour est joué ! Merci pour ce qui on tenté de m'aider !
0