j'ai un soucis avec un lien html destiné à afficher une info-bulle tirée d'une base.je le code comme çà:
<a class="bulle" href="javascript:void(0);" onclick="AffBulle('<?php $ref='altere';$res=mysql_db_query($db,"select * from dico where mot='$ref'");$tempo = mysql_fetch_array($res); echo $tempo[2];?>')">altere</a>
l'erreur affichée au clic est que l'objet ne gére pas cette propriété.erreur qui découle d'un js dont voiçi le code:
var posX=0;posY=0;
var xOffset=10;yOffset=10;
function AffBulle(texte) {
contenu="<table class='tab'><tr><td align='right'><table class='tab2'><tr><td>"+texte+"</td></tr></table><a href='javascript:void(0)' onclick='CacherBulle()'><i>Fermer</i></a></td></tr></table> ";
var finalPosX=posX-xOffset;
if (document.layers) {
document.layers["bulle"].document.write(contenu);
document.layers["bulle"].document.close();
document.layers["bulle"].top=posY+yOffset;
document.layers["bulle"].left=finalPosX;
document.layers["bulle"].visibility="show";
}
if (document.all) {
bulle.innerHTML=contenu;
document.all["bulle"].style.top=posY+yOffset;
document.all["bulle"].style.left=finalPosX;
document.all["bulle"].style.visibility="visible";
}
else if (document.getElementById) {
document.getElementById("bulle").innerHTML=contenu;
document.getElementById("bulle").style.top=posY+yOffset;
document.getElementById("bulle").style.left=finalPosX;
document.getElementById("bulle").style.visibility="visible";
}
}
function PositionSouris(e) {
if (document.all) {
posX=event.x+document.body.scrollLeft;
posY=event.y+document.body.scrollTop;
}
else {
posX=e.pageX;
posY=e.pageY;
}
}
function CacherBulle() {
if (document.layers) {document.layers["bulle"].visibility="hide";}
if (document.all) {
document.all["bulle"].style.visibility="hidden";
}
else if (document.getElementById){
document.getElementById("bulle").style.visibility="hidden";
}
}
if (document.layers) {
window.captureEvents(Event.MOUSEMOVE);window.onMouseMove=PositionSouris;
document.write("<LAYER name='bulle' top=0 left=0 visibility='hide'></LAYER>");
}
if (document.all) {
document.write("<DIV id='bulle' style='position:absolute;top:0;left:0;visibility:hidden;z-index:50;'></DIV>");
document.onmousemove=PositionSouris;
}
else if (document.getElementById) {
document.onmousemove=PositionSouris;
document.write("<DIV id='bulle' style='position:absolute;top:0;left:0;visibility:hidden;z-index:50;'></DIV>");
}
là non plus je ne vois pas l'erreur.en fait, je me suis servi de ce code sans php et il fonctionnait.
quand je passe le php, le js et le script de connection au validateur de webexpert il ne trouve aucune erreur nulle part.seulement quand je clique sur le lien il me retourne ceçi:
erreur de script: code 0
ligne 53(le lien du début)
) attendu.
j'ai aussi vérifier ma base, au cas ou, pas de pbs.si quelqu'un comprend quelque chose, je suis preneur.
__________________________
ils ne savaient pas que c'était impossible,alors ils l'ont fait.
Salut,
ALors j'ai aps testé ton code (je suis pas sur mon PC en ce moment)... Mais je peux te donner un conseil : Sépare le code PHP du code JS!!!
Par exemple, exécute tout le code PHP AVANT cet lien, et ne mets dans la partie JS que la variable qui t'intéresse ($tempo[2] semblerait-il...)
Tu devrais obtenir quelque chose comme ceci:
<?php
$ref='altere';
$res=mysql_db_query($db,"select * from dico where mot='$ref'");
$tempo = mysql_fetch_array($res);
?>
<a class="bulle" href="javascript:void(0);" onclick="AffBulle('<?php echo $tempo[2]; ?>')">altere</a>
J'ai pas testé mais ca devrait déjà etre plus propre (sans garantie du résultat...). Je me demande ausis si les simple guillemets autour des balises de code PHP ne gènent pas son exécution? Dans ce cas, fais l'inverse: génère tout le lien à partir de code PHP
__________________________ FAQ PHP
Déjà, je te conseil de suivre la méthode de Windu. Ca donne un code nettement plus propre que ton code.
D'ailleur ton code donne une impression que je n'ai pas trop : On dirait que tu mélange JS et PHP.
On a l'impression que tu n'as pas tout a fait compris le fonctionnement du php.
Le php Construit ta page HTML !! Donc il va générer ton code HTML, et ton code JavaScript.
C'est ce code, généré par PHP, qui va être ensuite executé sur le navigateur du client.
Donc c'est inutile de tasser tout ton code php dans ta balise <a>. De toute facon la seule chose qui restera au finale dans ta page c'est ce que tu aura écrit avec la commande echo ou print.
Donc au final, si tu as des problèmes de JavaScript, il ne faut pas regarder le PHP mais le JavaScript.
Donc tu ouvre ton navigateur, tu va sur la page ou tu as le problème, et tu affiche le code source de ta page. La tu ne verra plus de php, mais seulement le HTML généré (avec le JavaScript généré dedans évidemment).
Si Le javascript généré ne correspond pas a ce que tu attendais, c'est que ton php ne fonctionne pas bien. Par contre si le JavaScript est bien ce que tu voulais, et bien il faut que tu corrige ton code JavaScript.
Donc fais le test, et dis nous le résultat.
Si au final c'est le JavaScript qui merde, ne nous montre plus de php !!
Si par contre c'est le php qui merde, ne nous parle plus d'erreurs JavaScript, mais présente nous plutôt le code généré par php.
Tu ne devrais jamais avoir de JavaScript directement dans une page HTML !! Le JavaScript dans le fichiers JavaScript, et le HTML dans le fichiers HTML. Chacun sa place et tout le monde est heureux.
Après, il te suffit d'utiliser un peu de gestion d'évennements et un peu de DOM en JavaScript pour repérer dans ta page le lien avec l'id "un_nom" et de lui attribuer l'évenements 'onclick' dynamiquement.
évidement, si t'es pas habitué, tu peu simplifier, en utilisant l'attribut onclick, mais D'une, il faut que ton lien fonctionne si le JavaScript est pas actif (au pire des cas il doit amener à une page indiquant que le JavaScript n'étant pas activé la fonction n'est pas possible).
Et de deux, il faut que tu es le moins possible de JavaScript dans tes pages.
les infos sont les mêmes, non?les variables du premier contiennent les mêmes valeurs.ou ce situe le pb du second, tiré de php5 de micro-application.
en tout cas je vais suivre vos conseils pour la séparation des codes.
__________________________
ils ne savaient pas que c'était impossible,alors ils l'ont fait.
Je suis jamais sûr pour ce qui est des connexions à MySQL (à force d'utiliser des classes on en oublie le fonctionnement des fonctions de base )! mais dans le deuxième exemple, il manque l'id de connexion (qui se nomme $lk dans le premier exemple...)!
Cf. ce lien pour la fonction mysql_connect, et celui-ci pour mylsq_select_db
__________________________ FAQ PHP
Pour tes deux exemples, les deux marchent. seulement le deuxième est moins propre.
Qui a t'il de mieux dans le premier ?
Les variables contenant les valeurs :
C'est toujours mieux de placer les valeurs dans des variables (en début de fichier par exemple) et ensuite d'utiliser les variables.
Pourquoi ?
1) En cas de changement de la valeur, tu n'as a la changé qu'une fois dans ton fichier. Si tu utilise la valeur a pleins d'endroits, c'est pratique (pour ton exemple, si tu fais plusieur connection à la base de données).
2) Le nom de variable sera peut-être nettement plus significatif que la valeur elle même. Si ta valeur est un nombre par exemple, il sera plus agréable de voir :
fonction ($nombre_de_bannanes);
que
fonction (25);
Utilisation de l'identifiant de connexion
Quand tu établis une connexion MySQL, la fonction de connection retourne un identifiant de connexion. Cet identifiant permet de savoir de quel connexion MySQL tu parle. C'est très utile si tu utilise plusieurs connexions.
Dans le premier de tes exemple, tu récupère l'identifiant de connexion dans la variable $lk
Tu pourra ensuite l'utiliser pour définir la base de données sur laquelle tu travail :
$db = mysql_select_db('docmemo', $lk);
Si tu ne spécifie pas l'identifiant de connexion dans la fonction mysql_select_db(), php va chercher a trouver une connexion déjà établie à MySQL, et s'il en trouve pas, il va chercher d'établir une connexion avec MySQL en utilisant les parametre :
login : root
pass : rien
Donc T'as des chance qu'il trouve pas ta connexion si t'utilise pas l'identifiant de connexion, ou si tu as plusieurs connexion, il peut se tromper de connexion.... la merde quoi.
Donc voila, je pense que ca te fera déjà avancer dans la comprehenssion de php. Si t'as pas tout compris, demande, on t'expliquera plus
c'est limpide, plus que dans le bouquin cité.merci à tous les deux.A+ au détour d'un prochain topic.
__________________________
ils ne savaient pas que c'était impossible,alors ils l'ont fait.
Ps: je te répond à pkoi on met les valeurs de connection en dehors de la fonction. En cas d'erreur, il n'y a aucun moyen que le visiteur vois tes variables. C'est une question de sécurité princiapelement.
__________________________
A tous les membres, dite non à la (drogue...) sms-mania !
Avant de poster, vérifiez si la réponse n'est pas dans la FAQ ou un tutorial.