Je ne sais pas vraiment comment m'y prendre mais j'espère que vous pourrez m'aiguiller.
Merci
----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.
azqsazqs
Messages postés83Date d'inscriptionjeudi 27 juillet 2006StatutMembreDernière intervention28 novembre 2010 17 juil. 2008 à 01:00
Ca fonctionnerait comme une sorte de BBcode sauf qu'au lieu de placer du html, ca placerait du php.
Je pense avoir trouver une solution un peu bizarre qui reviendrait à coupé le texte avec un explode() puis a intercaler ma fonction php.
Autre question (N°2) comment faire une recherche avec parenthèse capturante pour que lke contenue de la paranthèse soit stocké dans une variable ?
Merci
----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 17 juil. 2008 à 12:42
donne voir un exemple de chaine qui serait utilisé, ce serait plus simple pour comprendre.
Parce que ta regex là voudrait dire
(nimportequeltexte1)=(nimportequeltexte2) serait remplacé par
include ('blocks/(nimportequeltexte1).php?valeur=(nimportequltexte2)');
azqsazqs
Messages postés83Date d'inscriptionjeudi 27 juillet 2006StatutMembreDernière intervention28 novembre 2010 17 juil. 2008 à 13:54
Voici un exemple de texte:
La première partie de mon texte......
[form=Test]
La suite du texte...
ouon devrait avoir au final
La première partie de mon texte......
Le formulaire Test contenu dans une bdd mysql. (soit avec un include('form.php?value=Test'))
La suite du texte...
----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 17 juil. 2008 à 13:58
et les éléments que tu veux inclure sont forcéments de cette forme :
[page=value] ?
(crochet, nom de la page , égal, valeur de la variable value, crochet) ?
azqsazqs
Messages postés83Date d'inscriptionjeudi 27 juillet 2006StatutMembreDernière intervention28 novembre 2010 17 juil. 2008 à 14:18
oui
----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 17 juil. 2008 à 14:31
alors dans ce cas ton expression régulière devrait ressembler à
$sPattern = '#[([^\=]+)=([^\]+)]#i';
donc un petit
preg_replace_callback ($sPattern, taFunction, $sMessage);
et ensuite
function taFunction ($aMatches) {
ob_start ();
include ('blocks/'.$aMatches[1].'.php?valeur='.$aMatches[2]);
$sContent = $ob_get_clean ();
return $sContent;
}
Par contre si tes pages d'inclusions utilisent des variables initialisées dans ton code auparavant, ca va etre beaucoup plus chiant à mettre en place, puisqu'il faut les mettres dans le même scopage (pas d'appel d'include dans une fonction)
function form ($aMatches) {
ob_start ();
include ('blocks/'.$aMatches[1].'.php?valeur='.$aMatches[2]);
$sContent = $ob_get_clean ();
return $sContent;
}
mais apparamment ca marche pas. ca doit venir de la fonction, je n'ai aucune varible $aMatches créée.
----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.
function form($aMatches){
ob_start ();
include ('blocks/'.$aMatches[1].'.php?valeur='.$aMatches[2]);
$sContent = $ob_get_clean ();
return $sContent;
}
ca me donne le message suivants:
Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'form', to be a valid callback in C:\wamp\www\bastion\blocks\pages.php on line 9
----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.
function form ($aMatches) {
if (file_exists ('blocks/'.$aMatches[1]) && is_readable ('blocks/'.$aMatches[1])) {
ob_start ();
include ('blocks/'.$aMatches[1].'.php?valeur='.$aMatches[2]);
$sContent = ob_get_contents ();
ob_end_flush ();
return $sContent;
}
else
return $aMatches[0];
}
Tu es sur que les fichiers que tu veux charger existent ? J'ai mis une condition qui teste l'existence des fichiers avant leur chargement ou l'annulation sinon.
azqsazqs
Messages postés83Date d'inscriptionjeudi 27 juillet 2006StatutMembreDernière intervention28 novembre 2010 17 juil. 2008 à 16:08
la page existe bien elle a un code simple pour vérifier le fonctionnement
<?php
echo "OK !!";
?>
mais le message est toujours le même
Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'form', to be a valid callback in C:\wamp\www\bastion\blocks\pages.php on line 9
je pense qu'il manque les argument de la fonction form
----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 17 juil. 2008 à 20:44
alors là je pourrais pas te dire, sachant que mon code fonctionne !
Si tu enleve tout le contenu de la fonction form et que tu met juste un "return 'essai';", ca fonctionne ou pas ?
on affiche "essai" à la place de [form=Test], donc ca marche
le problème c'est que la Regex ne créé pas de varibles $aMatches c'est je pense la cause du problème
----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.
audayls
Messages postés373Date d'inscriptionsamedi 9 juillet 2005StatutMembreDernière intervention11 août 2008 20 juil. 2008 à 00:01
Salut,
Quelques petits renseignements :
- N'oublie pas les quotes dans le paramètre callback de ta fonction "preg_replace_callback".
- L'option de recherche "i" n'est pas nécessaire.
Ensuite pour ton code, j'ai essayé plusieurs fois de faire passer un code avec une variable ("test.php?valeur=test" par exemple) dans un include ou tout autre fonction et cela ne fonctionne pas ... Donc voici une petite parade à toi de l'adapter et de la sécuriser =) :
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 20 juil. 2008 à 00:17
Arf en effet j'avais pas vu qu'il ne mettait pas de quote sur l'appel de sa fonction ! bien joué ! :p
Pour ce qui est du passage de la variable valeur, l'appel de ?valeur=$var, ca marche pas c'est sur (je m'était aps penché dessus car ce n'était pas le problème abordé).
Dans son cas, s'il fait bien appel à la variable $_GET pour récuperer "valeur", en effet, ta méthode semble être la seule possible.
Si au contraire il se moque du nom de la variable ainsi que de son acces, il peux juste déclarer une variable du genre $valeur = $aMatches[2]; juste avant son inclusion.
avec ce script la valeur de $connect s'affiche correctement , mais je ne la retrouve pas quand la page form.php est incluse.
----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 21 juil. 2008 à 10:40
Je suis pas sur d'avoir compris ton message la :/
Quand tu dit que ca ne marche pas, qu'est-ce qui ne marche pas ? l'appel de la méthode ? l'inclusion ?
dans ton include, si tu fait un echo de $valeur, ca ne te retourne pas la valeur indiquée ?
azqsazqs
Messages postés83Date d'inscriptionjeudi 27 juillet 2006StatutMembreDernière intervention28 novembre 2010 21 juil. 2008 à 11:42
c'est "$texte_a_afficher = preg_replace_callback ('\[(.+?)=(.+?)\]', 'Replace', $texte_a_afficher);" qui pose problème
le reste fonctionne bien.
Pour le deuxième problème, je viens de voir que les variables initialiser avant l'include ne sont plus "existante" dans la page incluse
en gros:
<?php
echo $valeur //affiche la bonne valeur
Replace($aMatches); //$valeur est nulle dans la page incluse
echo $valeur //affiche la bonne valeur
?>
----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.