De MySQL à JavaScript en passant par PHP

Eléphant du PHP | 60 Messages

22 mai 2009, 18:40

Bonjour.

Je suis en train d'écrire un script PHP qui doit récupérer des données dans une BD MySQL pour générer du code JavaScript.
Je précise avant tout que le code JavaScript fonctionnait très bien avant que j'y mette du PHP, le but étant de stocker les textes dans une BD.

Le problème se situe au niveau des sauts de lignes :
Dans MySQL, le champ concerné est de type text.
Je récupère chaque donnée via PHP et je l'injecte dans de le JavaScript, mais ce dernier ne comprend pas les sauts de ligne. J'ai essayé aussi bien en tapant les sauts de ligne dans la BD qu'en les remplaçant par des \n que JavaScript est sensé comprendre. Ca ne marche dans aucun cas.

Voici le code :

Code : Tout sélectionner

$req = "SELECT Texte FROM Phrase"; $res = mysql_query($req); for($comp = 0;$comp < mysql_numrows($res);$comp++) { echo "TabQuestions[".($comp + 1)."] = \"".mysql_result($res, $comp, 'Texte')."\";\n"; }
Chaque texte ainsi inséré dans le tableau JavaScript contient un saut de ligne, c'est là que ça coince.
Le \n à la fin ne pose pas de problème, lui, il est correctement interprété.

Merci d'avance
Ils ne savaient pas que c'était impossible, alors ils l'ont fait...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 mai 2009, 20:18

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "PHP débutant".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 3607 Messages

22 mai 2009, 23:10

Montre nous le code source javascript généré par ton php (un petit ctrl + U )...

Eléphant du PHP | 245 Messages

23 mai 2009, 09:07

j'ai pas très bien compris ce que tu voulais obtenir, donc excuse moi si je tombe à coté de ce que tu veux, mais tu peux essayer ce code:

$req = "SELECT Texte FROM Phrase";
$res = mysql_query($req);
for($comp = 0;$comp < mysql_numrows($res);$comp++)
{
$texte=str_replace("\n","\\n",mysql_result($res, $comp, 'Texte'))

echo "TabQuestions[".($comp + 1)."] = \"".$texte."\";\n";
}
ça devrait remplacer les sauts de lignes par des sauts de lignes interprétés par javascript.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 mai 2009, 09:30

En fait, javascript interprète les retours à la ligne dans le code, comme des fins d'instructions (le point-virgule en fin de ligne est en effet facultatif, mais perso, je trouve quand même ça plus clair :))

Du coup, quand avec php tu génère le code javascript suivant :
<script type="text/javascript">
  var maVariable = 'un texte avec 
un retour à la ligne';
</script>
Javascript génère une erreur, puisque pour lui, il s'agit de deux instructions, la première s'arrêtant avant d'avoir refermé la chaine.

La solution d'enneite te permet de transformer les retours à la ligne présents dans ta chaine initiale, afin que php ne les interprète pas (\\n) et donc ne génère pas de renvoi à la ligne dans le code js. En revanche, il va ainsi pouvoir écrire des "\n" dans la chaine javascript, qui ne seront pas considérés comme une fin d'instruction, mais bien un retour à la ligne dans la chaine :
<script type="text/javascript">
  var maVariable = 'un texte avec \n un retour à la ligne';
</script>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 60 Messages

26 mai 2009, 14:23

Bonjour et merci pour vos réponses.

Ton code marche très bien, enneite. J'avais effectivement pensé à utiliser cette fonction, mais j'avais mal réglé les paramètres.

Merci bien.

Sinon, zeus, j'ai hésité à mettre cette question dans le forum débutant à cause du fait que je mélange PHP, MySQL et JavaScript.

Cordialement
Ils ne savaient pas que c'était impossible, alors ils l'ont fait...