TheGorgo
Messages postés224Date d'inscriptionmercredi 23 mai 2007StatutMembreDernière intervention 8 septembre 2014
-
30 juil. 2007 à 23:52
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 2012
-
5 août 2007 à 13:13
Bonjour à tous,
Je cherche a créer un script pour mon forum, http://conteslegendes.free.frum (un pe de pub au passage).
Le but de ce script est de pouvoir afficher ou masquer des calques. Je m'explique :
Je voudrais que lorsque l'utilisateur insere la balise [spoil]/spoil, une fonction php remplace ces balises par le code html d'un calque div qui contient des arguments javascript qui permettent de l'afficher ou de le masquer.
Le probleme est que lorsque l'utilisateur insere deux fois la balise [spoil]/spoil et ben ca bug parce que la fonction javascript demande l'identifiant du calque qu'elle doit afficher et ces deux calques ont le meme identifiant.
ATTENTION : SPOILER - Cliquez ici pour voir ou cacher le contenu
", $t);
$t = str_replace("/spoil", "
", $t);
Voila. Donc en fait je voudrais savoir si il existe une fonction php qui compte le nombre de fois qu'apparait une occurence et qui les remplace une par une, ce qui me permettré de changer la variable $num a chaque fois.
TheGorgo
Messages postés224Date d'inscriptionmercredi 23 mai 2007StatutMembreDernière intervention 8 septembre 20141 1 août 2007 à 01:55
Donc, après plusieurs tentatives acharnées a essayer de comprendre pourquoi ca marchait pas, j'ai compris avec l'aide du manuel php que mes soucis venaient de foreach (parce qu'en fait foreach fait tout ce qu'il a a faire avec les colonnes du tableau et ensuite fait le reste)
ex :
$t[0] = 'Hello';
$t[1] = "Worlde";
$i = 0;
donc, j'ai utilisé la solution du for($i=0; $i<count($t);$i++)
mais j'ai fait quelques bidouilles juste avant et ca me donne ceci :
$t = str_replace("[spoil]", "¤[spoil]", $t);
// remplacement des balises [spoil] par ¤[spoil]
$t = explode("¤",$t);
// découpage en segments a partir du caractere "¤" ce qui me permet de garder les balises [spoil] dans les segments
$i = count($t);
// savoir combien de cases contient le tableau $t qui est créé
$n=0;
while($n<$i){
$num = rand();
// Num recoit un nombre au hasard a chaque deroulement de la boucle
$t[$n] = str_replace("[spoil
...
",$t[$n]);
$n++;
}
for($n=0;$n<$i;$n++){
$v .= $t[$n];
}
// Re concatenation de la chaine de caractere
$t = str_replace("/spoil", "
", $v);
// Remplacement des balises /spoil par des balises fermantes
Voila c'est pas tres glorieux mais ca marche. Je te remercie d'avoir porté ton attention sur mon sujet et pour l'aide que tu m'as apportée.
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 31 juil. 2007 à 10:56
Hello,
// spoiler
$t = explode('[spoil]', $t);
foreach($t as $value){
$num = rand();
$t = "
ATTENTION : SPOILER - Cliquez ici pour voir ou cacher le contenu
".$t;
$t = str_replace("/spoil", "
", $t);
}
avec ça tu as un tableau, tu le concatènes et c'est bon.
Par contre tu m'as l'air d'avoir des pbs avec tes " et tes '... j'ai pas corrigé mais bon. Et mets tes css dans une feuille à part.
à+
TheGorgo
Messages postés224Date d'inscriptionmercredi 23 mai 2007StatutMembreDernière intervention 8 septembre 20141 31 juil. 2007 à 13:33
J'avais pas du tout pensé à utiliser Foreach.
En tout cas je vais essayer et je te remercie pour ta réponse.
Pour les " et ' apparement je n'ai pas de pb.
Et, je ne peux pas mettre mes css ds une feuille a part parce que l'identifiant de chaque calque est généré dynamiquement. Je ne connais pas l'ID du calque a l'avance.
TheGorgo
Messages postés224Date d'inscriptionmercredi 23 mai 2007StatutMembreDernière intervention 8 septembre 20141 31 juil. 2007 à 14:57
mais en fait j'ai besoin d'echapper les ' aussi car sinon, il y a une erreur au moment de l'insertion dans la table mysql.
Et je ne comprend pas parce que le javascript fonctionne kan il un spoil ds un message. Mais, il ne fonctionne pas quand il yen a plusieurs.
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 31 juil. 2007 à 15:15
Il faut échapper les requêtes sql avec addslashes juste avant de les passer, pas dans le javascript... fais-voir ton code maintenant si t'as encore un pb ? et sans les styles, ça me fatigue les yeux :)
TheGorgo
Messages postés224Date d'inscriptionmercredi 23 mai 2007StatutMembreDernière intervention 8 septembre 20141 31 juil. 2007 à 20:56
La faille dans le code que tu m'as donné c'est que tu ajoute le code du calque au début du texte qui est découpé. Le probleme, c'est que si l'utilisateur poste du texte normal avant un spoil, un calque sera inseré avant ce texte. Mais, il ne sera pas fermé donc les autres calques seront inclus dans celui ci.
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 1 août 2007 à 12:28
Bon et bien tant mieux, même si ton code me paraît bien compliqué pour ce qu'il fait.
Par contre comme je te l'ai dit dans mon message précédent, foreach+l'incrémentation et for($i=1 ; $i<count($t); $i++) ont exactement le même comportement sur un tableau avec des clés de 1 à n, donc le problème "ne vient pas" de foreach.
à+
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 5 août 2007 à 13:13
Salut !
J'ai copié-collé le bout de code que tu as mis : ça me donne bel et bien Hello0World1 !!!
Je ne sais pas comment tu fais pour arriver à d'autres résultats... tu peux réessayer pour voir ?
à+