[RESOLU] Afficher/cacher un texte dans un boucle while

Petit nouveau ! | 5 Messages

31 mai 2021, 10:05

Bonjour,

Je bloque sur un problème qui ne me paraissait au départ pourtant pas insurmontable... Je cherche à cacher et afficher une partie du texte avec un bouton dans une boucle while, mais j'ai essayé pas mal de méthodes et toujours sans succès, comment est-ce que je dois aborder la chose ?

Voici le code, le texte que je voudrais dans un premier temps cacher puis afficher avec un bouton est celui dans <div id='$row[computerid]'> seulement pour l'id sélectionnée

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
					$macname = $row['computermacname'];
					$values = explode(",", $macname);
					?>
					<script>
					function maFonction() {
					  var div = document.getElementById(<?php echo "$row[computerid]"; ?>);
					  if (div.style.display === "none") {
						div.style.display = "block";
					  } else {
						div.style.display = "none";
					  }
					}
					</script>
					<?php
					
				echo"
				     $row[computerid] - $row[computername] - Dernière connexion le: $row[contact] par $row[personne] - <button onclick='maFonction()'>Bouton</button>
				     <div id='$row[computerid]'  style='display:none;'>Numéro de série: $row[computerserial]<br /><br /><u>Adresses MAC:</u>
					 ";					 
						 for ($i = 1; $i <= 15; $i++) {
							if (isset($values[$i])){
								echo "$values[$i] </i><br />";
							}
						 }
						 if (isset($row['filepath'])){
							echo "<br /><font color='green'>FICHE DE PRET: </font>  <a href='http://wiki/glpi/front/document.send.php?docid=$row[docid]' target='_blank'>$row[filename]</a><br /><br /><br />";	
						 } else {
							echo "<br /><br /><br />";
						 }	
							echo "</div><br /><br />";
				endwhile; 
		}	  
				

Le code ne semble pas fonctionner car je ne récupère pas les bonnes ids dans ma fonction et je ne sais pas vraiment comment faire

Merci d'avance pour votre aide !
Modifié en dernier par Jenjak le 31 mai 2021, 13:36, modifié 1 fois.

Avatar du membre
Eléphant du PHP | 70 Messages

31 mai 2021, 11:44

Salut,

Je ne comprend pas vraiment où est ton problème. Ta fonction :
function maFonction() {
var div = document.getElementById(<?php echo "$row[computerid]"; ?>);
if (div.style.display === "none") {
div.style.display = "block";
} else {
div.style.display = "none";
}
}
Est t'elle correctement print ? comment est traduit document.getElementById(<?php echo "$row[computerid]"; ?>) ?
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Mammouth du PHP | 2703 Messages

31 mai 2021, 13:06

10 fonctions javascript avec le même nom, cela ne peut pas marcher.
il faut une seule fonction, en dehors de la boucle, et lui passer l'id en paramètre, cette fois ci dans la boucle.

Petit nouveau ! | 5 Messages

31 mai 2021, 13:30

Bonjour,

Merci à vous deux

Le document.getElementById(<?php echo "$row[computerid]"; ?>) ? se traduit dans le code source par des id un peu "au hasard" j'ai l'impression, du coup rien ne colle

Je ne connais pas du tout javascript alors je ne sais pas comment faire passer un id dans une fonction en dehors de la boucle malheureusement

Avatar du membre
Eléphant du PHP | 70 Messages

31 mai 2021, 14:42

Soit vous faite en sorte que le nom de la fonction change à chaque fois, ce que je ne recommande pas du tout car il y aurais X balise script en fonctions de vos X entité
Soit vous trouvez une manière plus harmonieuse pour faire ce dont vous avez besoin.

Je vous donne une possibilité : faite en sorte que les éléments que vous voulez afficher aient la même class, ensuite transformez votre DOM sélection par getElementsByClassNames ( qui vous donnera un array contenant chacun de ces éléments ) puis pour finir boucler sur le tableau pour afficher ces éléments

En JQuery, vous avez la possibilité de sélectionner les classes de cette manière $('.class'), puis de boucler dessus et les afficher avec prop element.prop("disabled")
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala