1

Yep smile

Depuis quelques heures j'essaie de trouver une solution au problème que j'ai avec les apostrophes et les guillemets (même antislashées) : j'arrive pas à correctement "fermer" mes fonctions.

En gros ça me donne ça :

echo "<body onload='menu(10,10,200,300,\"" . menu() . "\")'>";

[...]

function menu(){
	$buffer = "";
	$r = mysql_query("SELECT * FROM `menu`");
	while($r2=mysql_fetch_object($r)){
		$buffer .= chr(149).' <a onclick=\"box(' . $r2->left . ',' . $r2->top . ',' . $r2->width . ',' .$r2->height . ','titre','texte')\">' . $r2->texte . '</a><br />'; // C'est là que ça foire
	}
	return $buffer;
}


Le problème c'est donc que j'ai pas assez de "types" de guillemets ou apostrophe pour encore entourer la chaine de caractère "titre" et "texte" : ça me renvoi toujours une erreur, et je vois difficilement comment m'en passer... Quelqu'un aurait une solution ?

2

deeph (./1) :
chr(149)." <a onclick=\"box(" . $r2->left . "," . $r2->top . "," . $r2->width . "," .$r2->height . ",'titre','texte');\">" . $r2->texte . "</a><br />";

?
en fait, dans des '...' tu as pas besoin d'échapper le " et inversement... (ou alors mes souvenirs sont pas bons)
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

3

Ouais mais là si je fait ça, ça va me découper mes fonctions n'importe comment (notamment la fonction box)...

4

gni ?
moi ça me donne ça :
<a onclick="box(titi,tutu,toto,plonk,'titre','texte');">snail</a><br />

je vois pas le probleme...
si tu as besoin de ' ben tu peux les ajouter
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

5

heu ? ton problème est juste que tu n'as pas échappé les bons caractères dans la chaine qui pose problème (c'est une chaine entre ' ' et tu échappes les ", comme dit kim c'est l'inverse qu'il faut faire).

P.S : le chr(149) c'est pas super valide dans de l'HTML, il y a l'entité &bull; qui est faite pour ça ^^

[edit] cross
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

Ouais mais au final ça me donne :
echo "
<body onload='menu(10,10,200,300,\"• <a onclick="box(titi,tutu,toto,plonk,'titre','texte');">snail</a><br />\")'>";


Ce que j'ai mis en orange n'est donc pas correct, puisque l'echo ne renverra que "<body onload='menu(10,10,200,300,\"&bull; <a onclick=", non ?

7

Ah ok je pense avoir compris le problème. Il y a deux choses auxquelles tu dois faire gaffe :

- Quand tu as deux (ou plus) niveaux d'imbrication, tu peux backslasher les backslashs
- Le caractère " est invalide dans un attribut HTML (backslashé ou non), tu dois l'écrire &quot;

Le plus simple serait je pense d'intervertir un peu tes " et tes ' pour arriver à ça :

echo '<body onload="menu (1, 2, 3, 4, \'&bull; <a onclick=&quot;box (1, 2, 3, 4, \\'a\\', \\'b\\');&quot;>snail</a><br />\')">';

(modulo erreurs, flemme de tester ^^)

[edit] btw c'est assez horrible comme code, si tu comptes l'utiliser ailleurs que pour une petite appli perso, je ne peux que te conseiller d'envisager un sérieux nettoyage grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

oui alors j'avais pas vu la première ligne, et là, je trouve ça... crade ^^
j'imagine ton truc qui a un menu de 10 liens, le <body> va être crade & gigantesque...

Ensuite, ta fonction "menu" existe en php & js... c'est moche, faudrait en renommer une, déjà...

Elle fait quoi ta fonction menu js ?
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

9

à mon sens y'aurait beaucoup plus que ça à changer pour que ce soit "propre", et j'aurais pas mis le renommage d'une fonction dans les choses à faire en priorité... mais c'est pas forcément sa question non plus ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

10

oui non mais je suis d'accord avec toi mais bon ^^
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

11

Ouais j'avais même pas fait gaffe au double nom mais apparemment ça marchais bien (sinon la fonction js crée un "cadre" qu'on remplit ensuite pour éviter les chargements, idem avec la fonction box()).

./7 > J'vais tester ça, merci smile

edit : Youhou ça marche grin Encore merci !

12

nan mais ça pose juste un problème de maintenance... et de lisibilité. Parce que plus c'est lisible, plus on arrive à maintenir, débugger, mettre à jour smile

Pour la fonction menu js, heuuuuuuuuu, je vois pas ce que tu évites comme chargement, vu que tout le contenu est déjà dans ton js & dans le body...

Encore, y'aurait du xmlhttprequest, je dis pas, mais dans ce cas, ta fonction (php) menu devrait pas être appelée comme ça.
Ensuite, le mieux serait aussi de mettre dans ton onload, mettre juste une fonction, que tu détailles dans un fichier js à part, ou dans un <script></script>

Là j'ai peur que tu gagnes pas de temps de chargement, par contre les navigateurs risquent d'avoir des soucis de mise en page smile
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

13

Enfaite je voulais qu'il n'y ai pas du tout de chargement (ce qui est le cas) : là c'est pas le cas mais je reçoit des données de la bdd et au lieu d'avoir à recharger ma page, c'est mis à jour dynamiquement avec le js smile Enfin c'est clair qu'il y a surement (beaucoup) plus propre mais pour le moment je pense que ça suffira (et c'est assez lisible je trouve quand les valeurs sont sous forme de variables).