Pb : display par javascript en php...
Jean_2
Messages postés
245
Date d'inscription
Statut
Membre
Dernière intervention
-
Jean_2 Messages postés 245 Date d'inscription Statut Membre Dernière intervention -
Jean_2 Messages postés 245 Date d'inscription Statut Membre Dernière intervention -
Bonjour à vous,
Mon problème :
Je fait afficher des données en provenance d'une table MySQL. 2 champs : coordonnées et accès
Je voudrais qu'en cliquant sur "accès", ça m'affiche le contenu de mon champ pour la ligne considérée.
La le soucis, c'est que je peux cliquer sur n'importe quel "accès" de ma page, ça ne m'affichera que le contenu du champ en première ligne
exemple :
je voudrai, quand je clique sur ma dernière ligne :
accès
accès
accès
accès contenu du champ accès pour la ligne en question
mais là ça m'affichera :
accès contenu du champ de ma première ligne
accès
accès
accès
Voilà le script pour afficher et masquer ma ligne (ce script fonctionne bien):
function visibilite(thingId)
{
var targetElement;
targetElement = document.getElementById(thingId) ;
if (targetElement.style.display == "none")
{targetElement.style.display = "" ;}
else
{targetElement.style.display = "none" ;}
}
voilà ce qui pose problème... :
<?php echo $donnees['coordonees'];?> <a href="javascript:visibilite('divid');">Accès</a>
<div id="divid" style="display:none;"><?php echo $donnees['acces']; ?></div>
comme vous le voyez, ma balise <a> ne comporte pas de php, c'est ça qui foire...
merci de votre aide..
Mon problème :
Je fait afficher des données en provenance d'une table MySQL. 2 champs : coordonnées et accès
Je voudrais qu'en cliquant sur "accès", ça m'affiche le contenu de mon champ pour la ligne considérée.
La le soucis, c'est que je peux cliquer sur n'importe quel "accès" de ma page, ça ne m'affichera que le contenu du champ en première ligne
exemple :
je voudrai, quand je clique sur ma dernière ligne :
accès
accès
accès
accès contenu du champ accès pour la ligne en question
mais là ça m'affichera :
accès contenu du champ de ma première ligne
accès
accès
accès
Voilà le script pour afficher et masquer ma ligne (ce script fonctionne bien):
function visibilite(thingId)
{
var targetElement;
targetElement = document.getElementById(thingId) ;
if (targetElement.style.display == "none")
{targetElement.style.display = "" ;}
else
{targetElement.style.display = "none" ;}
}
voilà ce qui pose problème... :
<?php echo $donnees['coordonees'];?> <a href="javascript:visibilite('divid');">Accès</a>
<div id="divid" style="display:none;"><?php echo $donnees['acces']; ?></div>
comme vous le voyez, ma balise <a> ne comporte pas de php, c'est ça qui foire...
merci de votre aide..
8 réponses
Salut Jean_2!
Je vois un truc bizarre dans ton code:
Ca m'étonnerait que tu puisses mettre un echo dans une autre instruction, ici dans l'indice du tableau $données. J'ai pas très bien compris pourquoi t'as mis un echo, mais si $donnees est bien la variable contenant les données de ta base de données, tu dois utiliser le nom du champ de ta base de données contenant l'id que tu veux utiliser en indice du tableau $donnees. Par contre, je ne pense pas que niveau sécurité c'est très indiqué de mettre tes id présents dans ta base de données en clair dans ton site. Sauf si ce sont de simples entiers incrémentés à chaque occurence (ou ligne) de ta base de données. "echo" est une instruction qui sert à afficher des données à l'écran.
Tu as ici le manuel officiel du PHP:
https://www.php.net/
Tu cliques ensuite sur documentation, tu choisis la langue, et ensuite tu peux chercher des fonctions. Tu as un champ de recherche exprès pour. Tu peux aussi lire le manuel chapitre par chapitre.
Voici aussi un site qui m'a fait démarrer:
http://www.phpdebutant.org
Encore une fois, dis-moi si tout fonctionne dans ton script!
Vivien.
Je vois un truc bizarre dans ton code:
$donnees['echo id_dans_ma_table']
Ca m'étonnerait que tu puisses mettre un echo dans une autre instruction, ici dans l'indice du tableau $données. J'ai pas très bien compris pourquoi t'as mis un echo, mais si $donnees est bien la variable contenant les données de ta base de données, tu dois utiliser le nom du champ de ta base de données contenant l'id que tu veux utiliser en indice du tableau $donnees. Par contre, je ne pense pas que niveau sécurité c'est très indiqué de mettre tes id présents dans ta base de données en clair dans ton site. Sauf si ce sont de simples entiers incrémentés à chaque occurence (ou ligne) de ta base de données. "echo" est une instruction qui sert à afficher des données à l'écran.
Tu as ici le manuel officiel du PHP:
https://www.php.net/
Tu cliques ensuite sur documentation, tu choisis la langue, et ensuite tu peux chercher des fonctions. Tu as un champ de recherche exprès pour. Tu peux aussi lire le manuel chapitre par chapitre.
Voici aussi un site qui m'a fait démarrer:
http://www.phpdebutant.org
Encore une fois, dis-moi si tout fonctionne dans ton script!
Vivien.
Salut Jean_2!
Tes div ont bien toutes des id différents? Sinon je crois que c'est de là dont vient le problème. "id" est censé ,n'être utilisé que pour un seul élément. Si elles ont toutes le même nom, ton script ne va voir que la première. De plus, si ton script fonctionnait et que tes div ont toutes le même id, à chaque fois toutes les lignes seraient affichées! Tu dois donc donner par exemple le nom "divid1" à ta première div, "divid2" à ta deuxième, etc...
Pour pouvoir formater plusieurs éléments en CSS, il me semble que id fonctionne, mais pour le javascript, id représente un identificateur pour un élément.
Voici un lien pour t'aider:
http://fr.selfhtml.org/css/formats/global.htm
Dis-moi si ça fonctionne!
Vivien.
Tes div ont bien toutes des id différents? Sinon je crois que c'est de là dont vient le problème. "id" est censé ,n'être utilisé que pour un seul élément. Si elles ont toutes le même nom, ton script ne va voir que la première. De plus, si ton script fonctionnait et que tes div ont toutes le même id, à chaque fois toutes les lignes seraient affichées! Tu dois donc donner par exemple le nom "divid1" à ta première div, "divid2" à ta deuxième, etc...
Pour pouvoir formater plusieurs éléments en CSS, il me semble que id fonctionne, mais pour le javascript, id représente un identificateur pour un élément.
Voici un lien pour t'aider:
http://fr.selfhtml.org/css/formats/global.htm
Dis-moi si ça fonctionne!
Vivien.
j'ai remplacé divid par echo id_dans_ma_table (afin que mon id de div soit celui de ma table)
par
<a href="javascript:visibilite('<?php $donnees['echo id_dans_ma_table'] ?>');">Accès</a>
<div id="<?php $donnees['echo id_dans_ma_table'] ?>" style="display:none;"><?php echo $donnees['autoroute'] . " sortie " . $donnees['sortie']; ?></div>
mais maintenant, plus rien ne marche...
par
<a href="javascript:visibilite('<?php $donnees['echo id_dans_ma_table'] ?>');">Accès</a>
<div id="<?php $donnees['echo id_dans_ma_table'] ?>" style="display:none;"><?php echo $donnees['autoroute'] . " sortie " . $donnees['sortie']; ?></div>
mais maintenant, plus rien ne marche...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
oups, ah oui, j'avais oublié de le retirer (j'ai fais +ieurs tests...)
mais c'est pas ça qui fait foirer...
en fait, la fonction visibilite fonctionne (je l'ai trouvé sur le net et testé), avec ce code html :
<a href="javascript:visibilite('divid');">afficher/masquer</a><div id="divid" style="display:none;">contenu</div>
ce code je voudrai l'adapter pour que ça m'affiche un "contenu" spécifique (correspondant à la valeur d'un champ de ma table, "autoroute") pour chaque ligne de ma requete...
je dois donc remplacer divid par qqchose en rapport avec id_de_ma_table...
voilà merci pour votre aide
ps : je vous remet la fonction :
function visibilite(thingId)
{
var targetElement;
targetElement = document.getElementById(thingId) ;
if (targetElement.style.display == "none")
{targetElement.style.display = "" ;}
else
{targetElement.style.display = "none" ;}
}
mais c'est pas ça qui fait foirer...
en fait, la fonction visibilite fonctionne (je l'ai trouvé sur le net et testé), avec ce code html :
<a href="javascript:visibilite('divid');">afficher/masquer</a><div id="divid" style="display:none;">contenu</div>
ce code je voudrai l'adapter pour que ça m'affiche un "contenu" spécifique (correspondant à la valeur d'un champ de ma table, "autoroute") pour chaque ligne de ma requete...
je dois donc remplacer divid par qqchose en rapport avec id_de_ma_table...
voilà merci pour votre aide
ps : je vous remet la fonction :
function visibilite(thingId)
{
var targetElement;
targetElement = document.getElementById(thingId) ;
if (targetElement.style.display == "none")
{targetElement.style.display = "" ;}
else
{targetElement.style.display = "none" ;}
}
Bon, Jean_2, j'te propose un script. Je pense que pour chaque div contenant "accès", lorsque tu cliques sur ce lien, ça t'affiche un contenu... Voici donc le script que je te propose:
Vivien.
<?php $sql="SELECT autoroute FROM maTable"; // $sql contient ta requête SQL. Attention à la casse (majuscules ou minuscules), ça peut être important selon ton SGBD. $req=mysql_query($sql) or die ('Erreur SQL! <br/> requete: '.$sql.'<br/> erreur: '.mysql_error()); // Ici tu exêcutes la requête sur ta BDD (ici sur MySQL) et là, et si elle échoue ( "or die" en anglais), elle effectue ce qui est entre les parenthèses de " or die()". mysql_error() permet d'afficher (en français si j'me souviens bien!) l'erreur. C'est une aide vraiment précieuse. //Si tout fonctionne comme il faut, alors le résultat de la requête est mis dans la variable $req. //Ensuite tu fais ta boucle: while ($donnees=mysql_fetch_array($req)) // mysql_fetch_array est ce que l'on appelle un "curseur". C'est comme un curseur graphique, comme celui de la souris par exemple. Celui-ci se positionne sur la première ligne du tableau au premier appel, puis avance d'une ligne à chaque appel (sauf si tu lui demandes autrechose). { //Et là (si j'ai bien compris ce que tu voulais faire), tu affiches une div, avec l'identifiant de ton champ en id de la div. Bon, si tes identifiants n'ont aucune signification particulière (informations personnelles d'un utilisateurs, ou informations confidentielle), je ne pense pas que ça pose un problème. Faudrait voir avec les autres utilisateurs qui s'y connaissent en sécurité. Au pire, tu peux rajouter un champ en clé primaire, champ contenant un integer, avec incrémentation automatique. echo "<a href='javascript:visibilite(\"$donnees['echo id_dans_ma_table']\");'>Accès</a>"; echo "<div id='".$donnees['champ_identifiant']."' style='display:none;'>"; echo $donnees['autoroute']; // Accents à éviter en indces de tableau et noms de champs. echo "</div>"; } ?> Ta fonction javascript: function visibilite(thingId) { var targetElement; targetElement = document.getElementById(thingId) ; if (targetElement.style.display == "none") { targetElement.style.display = "inline"; // ou block, ça dépend... Ca marchera ptète avec ça. } else { targetElement.style.display = "none" ; } }
Vivien.
en fait, chez moi, ma requete fonctionne et mon soucis, c'est juste l'affichage...
j'ai donc collé tes echo (en rajoutant ou retirant quelques éléments en gras... (PS: le echo en gras, je l'ai retiré. j'ai bien eu raison ???)
j'ai mis 2 fois mon champ identifiant normal aussi ? oui je penses...
{
<?php> echo "<a href='javascript:visibilite(\"$donnees['echo mon_champ_identifiant']\");'>Accès</a>";
echo "<div id='".$donnees['mon_champ_identifiant']."' style='display:none;'>";
echo $donnees['autoroute'];
echo "</div>";
}
?>
}
la page ne s'affiche plus :
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\wamp\www\...monsite...
pourtant, je suis sur que la solution est toute proche...
merci pour ton aide..
j'ai donc collé tes echo (en rajoutant ou retirant quelques éléments en gras... (PS: le echo en gras, je l'ai retiré. j'ai bien eu raison ???)
j'ai mis 2 fois mon champ identifiant normal aussi ? oui je penses...
{
<?php> echo "<a href='javascript:visibilite(\"$donnees['echo mon_champ_identifiant']\");'>Accès</a>";
echo "<div id='".$donnees['mon_champ_identifiant']."' style='display:none;'>";
echo $donnees['autoroute'];
echo "</div>";
}
?>
}
la page ne s'affiche plus :
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\wamp\www\...monsite...
pourtant, je suis sur que la solution est toute proche...
merci pour ton aide..