Page 1 sur 2

Syntaxe fonction (avec variable php)

Posté : 30 déc. 2005, 20:36
par spirou
Bonsoir à tous !!!

Désolé, encore un petit problème.

Je suis contraint d'utiliser du javascript, j'ai donc vu un topic sur une fonction qui me convient pour ce que je souhaite obtenir.

Seulement bien évidemment, ça ne fonctionne pas, je pense que c'est un problème de syntaxe, mais étant donné que je n'y connaît rien en ce domaine, si quelqu'un pouvait me dire où est mon erreur.
<?php 

if(isset($chemin))
{
		if(file_exists($chemin))
		{
				echo 
				'
				<script language="Javascript" type="text/javascript">
				function ajout(img)
				{
				document.form.desc.value += ("[")+img+("]")+' . $dest_img . '+("[/")+img+("]");
				}
				</script> 
				';
				echo $chemin;  // vérification 
				echo '<br /><input type="button" value="ajouter" style="width:150px" onclick="ajout(\'img\')" />'; 
		}
}
?>
$dest_img est une chaine de cette forme image.jpg

Merci d'avance :P

Posté : 30 déc. 2005, 20:56
par Dgse
Bonjour

Je t'envois ce que j'ai fais d'apres ton exemple si cela peut t'aider un tantinet.
<?php
$des_img="test.jpg";  // semblant d'image
$chemin="test";         // semblant du chemin
?>
<html>
<head>
<script language="Javascript" type="text/javascript"> 
function ajout(img,image) 
{ 
document.form.desc.value += ('[')+img+(']')+image+('[/')+img+(']'); 
} 
</script> 
</head>
<body>
<form name="form">
<?php 
if(isset($chemin)) 
{ 
if(file_exists($chemin)) 
{  
echo "<br/><input type=\"button\" value=\"ajouter\" style=\"width:150px\" onclick=\"ajout('img','".$des_img."')\">";
} 
} 
?> 
<textarea name="desc"></textarea>
</body>
</html>
@+ Dgse

Posté : 30 déc. 2005, 21:10
par spirou
Je te remercie, mais mon problème est que je dois mettre une variable php dans le javascript, je pense que mon problème se situe sur cette ligne :
document.form.desc.value += ("[")+img+("]")+' . $dest_img . '+("[/")+img+("]"); 
Car dans le code source, j'ai bien la valeur de $dest_img.

J'obtiens ceci, dans le code généré :

Code : Tout sélectionner

<SCRIPT language="Javascript" type="text/javascript"> function ajout(img) { document.form.desc.value += ("[")+img+("]")+image.jpg+("[/")+img+("]"); } </SCRIPT> <input type="button" value="ajouter" style="width:150px" onclick="ajout('img')" />
Il faut aussi mettre des quotes et des parenthèses pour image.jpg ?

Posté : 30 déc. 2005, 21:22
par spirou
Ah oui, c'était ça, il fallait mettre des quotes et parenthèses pour que ça fonctionne.
document.form.desc.value += ("[")+img+("]")+("' . $dest_img . '")+("[/")+img+("]");
Merci de ton aide :wink:

Posté : 30 déc. 2005, 21:27
par Dgse
Bonjour

j'ai pas Pensé pas que cela fonctionnerais de cette maniere :wink:


@+ Dgse

Posté : 30 déc. 2005, 21:37
par spirou
Bah, je sais pas trop comment faire alors, car il faut que ce js ne s'affiche que si la condition est vérifiée.

En plus, j'ai pas d'erreur dans ma page, pourtant je suis en XHTML strict

De plus j'ai plusieurs page en une, c'est à dire que suivant le lien cliquez par l'utilisateur (vérification avec get), seulement le code étant dans la condition s'affichera.

Si je mets le js dans le <head> de ma page, il sera sur toutes les pages, et il n'y a qu'une seule partie de ma page qui en a besoin.

Oups, j'ai pas vu que tu avais édité, désolé.

Posté : 30 déc. 2005, 21:47
par Cyrano
Et pourquoi pas plus simplement:
"document.form.desc.value += '[img]". $dest_img . "[\/img]";

Posté : 30 déc. 2005, 22:08
par spirou
J'ai essayé comme tu as dis, mais ça ne fonctionne pas.
echo 
				'
				<SCRIPT language="Javascript" type="text/javascript">
				function ajout(img)
				{
				document.form.desc.value += [img]'.%20$dest_img%20.%20'[/img];
				}
				</SCRIPT> 
				';
J'obtiens ceci dans mon code source

Code : Tout sélectionner

<SCRIPT language="Javascript" type="text/javascript"> function ajout(img) { document.form.desc.value += [img]image.jpg[/img]; } </SCRIPT>
Ce code me sert à insérer du bbcode dans un formulaire, mais je pense que vous l'aviez compris :lol:

Posté : 30 déc. 2005, 22:15
par Cyrano
Ben forcément : tu as des instruction JavaScript et des chaines de caractères non isolées : Essaye comme ceci:
echo "
                <SCRIPT language=\"Javascript\" type=\"text/javascript\">
                function ajout(img)
                {
                    document.form.desc.value += '[img]". $dest_img . "[\/img]';
                }
                </SCRIPT>
                ";
Je ne suis plus très sûr d'un détail: si c'est du XHTML, tu peux faire sauter l'attribut language="JavaScript", le type est suffisant.

Posté : 30 déc. 2005, 22:29
par spirou
Merci, ton code fonctionne :o

Par contre, j'ai pas compris pourquoi mettre un antislash dans [\/img].
Je ne suis plus très sûr d'un détail: si c'est du XHTML, tu peux faire sauter l'attribut language="JavaScript", le type est suffisant.
Oui, tu as raison, le type est obligatoire, mais ça fonctionne parfaitement si j'enlève le language.

Allez, vu que j'ai un spécialiste en face de moi :mrgreen:

Est-ce normal que lorsque je regarde mon code source, ma page se réactualise ?
J'avais envoyé des données précédemment.

Posté : 30 déc. 2005, 22:37
par Cyrano
Allez, vu que j'ai un spécialiste en face de moi :mrgreen:
Ben t'es pas gâté :langue:

Bon, d'abord l'anti-slash avant le slash : c'est précisément pour échapper le slash en JavaScript. Pour être tout à fait franc, j'ai jamais vraiment compris ce truc, mais c'est valide et ça fonctionne.

Si ta page se ré-actualise, c'est parce que quelque part dans ton code il y a une instruction qui ordonne de rafraichir la page, soit une balise meta, soit autre chose, mais ça ne vient sûrement pas de cette partie là.

Posté : 30 déc. 2005, 22:56
par spirou
Bah pourtant, je n'ai pas de balises meta dans mon code qui pourrait faire, ça.
Enfin de toute façon, ce n'est pas plus gênant que ça.
Bon, d'abord l'anti-slash avant le slash : c'est précisément pour échapper le slash en JavaScript. Pour être tout à fait franc, j'ai jamais vraiment compris ce truc, mais c'est valide et ça fonctionne.
Ok, de toute façon, le principal est que ça fonctionne, mais c'est bon de le savoir quand même.

Enfin, je sais j'exagère, maintenant que tout mon "petit bbcode" fonctionne, de quelle façon, je peux récupérer dans ma chaîne de caractères ce qui est compris par exemple entre et [ /b], je me doute qu'il va falloir que je lise le texte dans une boucle sous forme de array, mais après ...

Est-ce que explode est utilisable ici ?

Merci :P

Posté : 30 déc. 2005, 22:59
par Cyrano
Apr<es à mon avis, un preg_replace() sera probablement plus approprié

Posté : 30 déc. 2005, 23:16
par spirou
En fait, je venais de partir sur str_replace(), mais preg_replace() m'à l'air bien compliqué, je vais me plonger dedans.

Merci à tous.

:wink:

Posté : 31 déc. 2005, 11:19
par Dgse
Bonjour

de cette maniere pour les balise simple .

Code : Tout sélectionner

$find=array("[i]","[/i]","[b]","[/b]"," [u]","[/u]","[s]","[/s]"); $repl=array("<i>","</i>","<b>","</b>","<u>","</u>","<s>","</s>"); $nom de ta chaine = str_replace($find, $repl, $nom de ta chaine);
et pour les balise [img] si elle donne sur une url.
$nom de ta chaine = preg_replace("/\[img\]((http:\/\/|ftp:\/\/)[^'\"\\:\[\]<>]+)\[\/img\]/Ui","<img src='\\1' border='0'>",$nom de ta chaine);
$nom de ta chaine = preg_replace("/\[img align=([a-z]+)\]((http:\/|ftp:\/\/)[^'\\\:\[\]<>]+)\[\/img\]/Ui","<img src='\\2' align='\\1' border='0'>",$nom de ta chaine);
Et merci Cyrano pour l'info, je faisait de la maniere que j'ai decrite :wink:

@+ Dgse