Probleme d'affichage de contenu dynamique en js

Résolu
bilouts Messages postés 51 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 16 janvier 2009 - 18 nov. 2007 à 04:09
bilouts Messages postés 51 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 16 janvier 2009 - 20 nov. 2007 à 02:50
Bonjour,
J'ai eu beau creuser et encore creuser, je ne trouve pas. (meme sur javascriptfr :) )
Pour être bref, j'ai une page 'mes messages envoyés' contenant plusieurs options qui affichent les contenus sans rechargement de la page ;
lorsque je clique sur un message, j'ai un lien de type fonction comme suit : onClick='f(" <? echo $ligne['message']; ?>"); (sachant que $ligne['message'] est à la base enregistré sous la forme htmlspecialchars en php dans ma bdd).

Ensuite, ma fonction est la suivante (vraiment basique) :

function f(id)
{
document.getElementById('contenu_message').innerHTML=id
}

et le résultat est affiché dans une div avec id='contenu_message'.


Jusque la tout va bien, par contre, parfois, et sans que j'arrive à trouver pourquoi (à moins que les variables js est une taille maximum, ce qui m'étonnerais), l'affichage ne se fait pas dans la div :


voici un exemple qui marche et un autre qui marche pas (je montre le resultat 'code source' du navigateur) :

MARCHE:

[#


MARCHE PAS:

]


Je suis tout à fait dans l'embaras car les deux seraient sencés marcher ou ne pas marcher, mais un qui marche et l'autre qui marche pas,
ça me dépasse, alors si quelqu'un à une idée (meme toute petite) de la raison pour laquelle ça disfonctionne autant, je vous en serais reconnaissant.

Merci par avance


Corentin

12 réponses

dsaunier Messages postés 12 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 25 novembre 2007
19 nov. 2007 à 06:53
Bonjour Bilouts,
je te conseille d'etre au plus pres des normes html/xhtml et donc mets les attributs de tes balises entre double quote...
Ton pb provient de ton appel de fonction:
<script>
function f(id) {
    alert(id.toString());
}
</script>
[# r]    <!-- affiche ok()" -->
[# r]    <!-- Erreur javascript: unterminated string literal f("ok()"") -->
Le navigateur interprete ton javascript, et comme il suit en partie les normes, il trouve des double quote qui sont pour lui des delimiteurs de chaine.

Perso, pour du dev en javascript, j'utilise FireFox et l'extension Firebug qui permettent un debogage facile. De plus, j'active l'affichage des erreurs javascript ds IE lors des tests internavigateurs.

A+

ds
3
bilouts Messages postés 51 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 16 janvier 2009
20 nov. 2007 à 02:35
Bon hé bien je crois que mon problème est 'en partie' résolu :

echo "".html_entity_decode($ligne['objet'])."";

avec la fonction str_replace(""","’",$ligne['message']) qui me change les " en ', mais comme qui dirait c'est un peu balot (mais l'important est que ça marche), tous les messages ou des personnes auront mis des citations genre "vive moi", ça se transformera systématiquement à l'affichage en 'vive moi', ce que je n'aime pas trop sur le principe.

Je mets toutefois un 'réponse acceptée' et merci à vous deux.
3
bilouts Messages postés 51 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 16 janvier 2009
18 nov. 2007 à 04:23
Bon je me dis que vous voulez le code source php qui élucidera peut être quelques mystères (attention, codé à la barbare).

//je précise tout de même avant que $ligne['id_reception']=='0' lorsqu'un message est envoyé en broadcast à tous les membres

<!-- /////////////// affichage messages envoyés /////////////// -->










<?
echo"Supprimer, objet, envoyé à, date, heure
";


$i=0;

$requete = "SELECT * FROM identification";

$resultat = mysql_query($requete) or die ('Erreur '.$requete.' '.mysql_error());

while($ligne = mysql_fetch_assoc($resultat))
{
$rec_id[$i]=$ligne['id_identification'];
$rec_name[$i]=$ligne['login'];
$i++;
}



$requete = "SELECT * FROM messages WHERE type='envoi' and id_envoi='".$_SESSION['id_pers']."' order by date, heure desc";

$resultat = mysql_query($requete) or die ('Erreur '.$requete.' '.mysql_error());

while($ligne = mysql_fetch_assoc($resultat))
{
$z=0;
for($j=0;$j<$i;$j++)
{

if($ligne['id_reception']=='0')
{
if($z>0)
{break;}
$z++;

$d = explode("-", $ligne['date']);

$message_rec[$j]=html_entity_decode($ligne['message']);



$jour=$d[2];
$mois=$d[1];
$annee=$d[0];

$amois[0] = '/01/';
$amois[1] = '/02/';
$amois[2] = '/03/';
$amois[3] = '/04/';
$amois[4] = '/05/';
$amois[5] = '/06/';
$amois[6] = '/07/';
$amois[7] = '/08/';
$amois[8] = '/09/';
$amois[9] = '/10/';
$amois[10] = '/11/';
$amois[11] = '/12/';
$nmois[0] = 'janvier';
$nmois[1] = 'février';
$nmois[2] = 'mars';
$nmois[3] = 'avril';
$nmois[4] = 'mai';
$nmois[5] = 'juin';
$nmois[6] = 'juillet';
$nmois[7] = 'aout';
$nmois[8] = 'septembre';
$nmois[9] = 'octobre';
$nmois[10] = 'novembre';
$nmois[11] = 'decembre';

$mois_lettres= preg_replace($amois, $nmois, $mois);


?>

[# ");'>
<?
echo"]suppr.,
".$ligne['objet'].",
tous,
".$jour." ".$mois_lettres." ".$annee.",
".$ligne['heure']."

";

}

else if($ligne['id_reception']==$rec_id[$j] && $ligne['type']=='envoi')
{
if($z>0)
{break;}
$z++;


$d = explode("-", $ligne['date']);

$message_rec[$j]=html_entity_decode($ligne['message']);



$jour=$d[2];
$mois=$d[1];
$annee=$d[0];

$amois[0] = '/01/';
$amois[1] = '/02/';
$amois[2] = '/03/';
$amois[3] = '/04/';
$amois[4] = '/05/';
$amois[5] = '/06/';
$amois[6] = '/07/';
$amois[7] = '/08/';
$amois[8] = '/09/';
$amois[9] = '/10/';
$amois[10] = '/11/';
$amois[11] = '/12/';
$nmois[0] = 'janvier';
$nmois[1] = 'février';
$nmois[2] = 'mars';
$nmois[3] = 'avril';
$nmois[4] = 'mai';
$nmois[5] = 'juin';
$nmois[6] = 'juillet';
$nmois[7] = 'aout';
$nmois[8] = 'septembre';
$nmois[9] = 'octobre';
$nmois[10] = 'novembre';
$nmois[11] = 'decembre';

$mois_lettres= preg_replace($amois, $nmois, $mois);


?>

[# ");'>
<?
echo"]suppr.,
".$ligne['objet'].",
".$rec_name[$j].",
".$jour." ".$mois_lettres." ".$annee.",
".$ligne['heure']."

";

}
}
}
?>
</table>



















Voila
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
18 nov. 2007 à 12:04
Bonjour,

>>je me dis que vous voulez le code source php
    ben non. on n'a pas ta base de données dèjà !
          alors comment fait-on ?
    il vaudrait mieux la page html résultante
       et encore mieux : l'extrait de ce qui pose problème
       ( le minimum, mais tout ce qui est nécessaire )




<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dsaunier Messages postés 12 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 25 novembre 2007
18 nov. 2007 à 13:09
bonjour,
à vue de nez, essaye d'etre homogene pour les valeurs d'attribut de tes balises html, si tu ecris href="#" alors onclick="....", c'est plus propre. Ensuite, ta chaine contient des " et un ' qui pose pb. En faite en supposant que tu appelles ta fonction par onclick="f('ta chaine de caracteres');"  il faut que tu élimine les ', cad les &#039; ou que tu les remplace par la sequence d'echapement \' et cela marche.
0
bilouts Messages postés 51 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 16 janvier 2009
18 nov. 2007 à 15:39
Merci dsaunier pour ta réponse, j'essaye tout de suite. ;)


ps : pour bultez, difficile de donner plus de code que la, sachant que dans le premier post, vous avez les séquences qui posent problème, et dans le second, la quasi-totalité du code.
J'ai également donné la page résultante html (en tout cas la partie qui nous intéresse).
Pour la bdd, elle n'a rien à voir avec mon problème, il faut juste savoir que $ligne['objet'] est l'objet de mon message ; et $ligne['contenu'] est le contenu de mon message et en l'occurence ce qui pose problème, non en sortie de bdd, mais en déplacement par javascript.
0
bilouts Messages postés 51 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 16 janvier 2009
18 nov. 2007 à 15:47
Bon je viens d'essayer en faisant :

[# ");'>


Resultat Source html :

]


Le changement dans la chaine se fait bien, mais ne s'affiche toujours pas dans ma div contenu_message.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
19 nov. 2007 à 07:39
<script type="text/javascript">
function f(id1)
{    document.getElementById('contenu_message').innerHTML=id1    }
</script>

[# lien]








¡————————¡——————————————————————————————————————————————————————————¡
|FireFox |regarder la "console d'erreurs" |
| | Outils / Console d'erreurs |
| | |
| | et mieux, télécharger FireBug |
¦————————¦——————————————————————————————————————————————————————————¦
|Internet|activer le deboggage : Outils/options Internet/Avancés |
|Explorer| dans la liste, sous "Navigation" : décocher |
| | ° Afficher une notification de chaque erreur de script |
| | ° Désactiver le débogage de Scripts (Internet Explorer) |
| | |
| | et mieux, télécharger le Debogger IE |
¦————————¦——————————————————————————————————————————————————————————¦
|K—Meleon|regarder la "console d'erreurs" |
| | Outils / Console d'erreurs |
¦————————¦——————————————————————————————————————————————————————————¦
|Opera |regarder la "console d'erreurs" |
| | utils / Asole d'erreurs |
¦————————¦——————————————————————————————————————————————————————————¦
|Safari |regarder Debug / Show JavaScript Console |
| | |
| |modif Fichier "Support:\Documents and Settings\utilisateur|
| |\Application Data\Apple Computer\Safari\Preferences.plist"|
| | y ajouter <key>IncludeDebugMenu</key> |
| | <true/> |
!————————!——————————————————————————————————————————————————————————!








<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
bilouts Messages postés 51 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 16 janvier 2009
20 nov. 2007 à 00:58
Merci beaucoup pour votre investissement,

Je regarde tout de suite si ça marche, en tout cas, ça me semble logique ;)
0
bilouts Messages postés 51 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 16 janvier 2009
20 nov. 2007 à 01:44
alors en bref :


echo"[# ');">
<? echo html_entity_decode($ligne['objet']); ?>
]

->rien ne s'affiche dans le champ contenu


J'en déduit que c'est pour le moins étrange, même s'il est sur qu'il y a une raison à cela.
0
bilouts Messages postés 51 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 16 janvier 2009
20 nov. 2007 à 02:16
>Pour les resultats dans les consoles d'erreur, aucun resultat sous safari, par contre, sous firefox juste :

Erreur : document.getElementById("sanitizeItem") has no properties
Fichier source : chrome://browser/content/browser.js
Ligne : 1274

Manque de chance, c'est juste le javascript de l'apparence de mon navigateur, donc rien en rapport avec ma page....


Par contre, ce qui peut faire avancer le chmilblick, c'est que lorsque je fais :

function f(id)
{
document.getElementById('contenu_message').innerHTML=id
window.alert(id)
}

window.alert() ne se lance pas du tout dans le cas de mon message qui ne s'affiche pas.

Il doit donc bel et bien s'agir d'un problème de crochet, mais la grande question demeure : comme le régler?

Je vous remercie en tout cas pour votre aide.

Corentin
0
bilouts Messages postés 51 Date d'inscription dimanche 15 août 2004 Statut Membre Dernière intervention 16 janvier 2009
20 nov. 2007 à 02:50
j'ajoute tout de même que si quelqu'un à une réponse au problème javascript
(car c'est tout de même bête de répondre à mon problème par du php et je suis sur qu'il doit y avoir une solution javascript pour éviter les bugs de crochets (peut être avec une fonction spécifique?)
qu'il me le fasse savoir.

le problème est simple (puisque désormais localisé),
comment envoyer un message à travers une fonction ( f('mon message') ) ayant un contenu qui peut contenir des doubles crochets ( " ) ou des simples crochets ( ' ) ?
0
Rejoignez-nous