Pb : display par javascript en php...

Fermé
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 - 22 oct. 2007 à 18:04
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 - 23 oct. 2007 à 19:58
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..

8 réponses

Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
23 oct. 2007 à 11:56
et c'est bien normal...
1
phédra60 Messages postés 30 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 24 mai 2008 17
23 oct. 2007 à 16:02
Salut Jean_2!
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.
1
phédra60 Messages postés 30 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 24 mai 2008 17
22 oct. 2007 à 18:51
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.
0
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
23 oct. 2007 à 11:06
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...
0

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

Posez votre question
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
23 oct. 2007 à 17:38
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" ;}
}
0
phédra60 Messages postés 30 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 24 mai 2008 17
23 oct. 2007 à 19:36
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:
<?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.
0
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
23 oct. 2007 à 19:44
merci, je teste de suite...
0
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
23 oct. 2007 à 19:58
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..
0