[PHP] Lien URL dans variable PHP [Résolu/Fermé]

Signaler
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
-
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
-
Bonjour bonjour tout le monde,

Je dvlp actuellement une application me permettant d'afficher tout les membres d'un groupe d'une LDAP.

Une fois tout les membres affichés, j'aimerai que lorsque je clique sur un des noms, je sois automatiquement redirigé vers la page concernant la personne.

Voici mon bout de code:

foreach($datadetailgroups as $detail) {
$memberArray = array();
foreach($detail['member'] as $member) {
$uid = ldapFast::dn2uid($member);
array_push($memberArray,ldapFast::uid2displayName($uid), '<a href"=/users/profil/?uid='uid'>');
}

$datagroupsNew[] = array(
'member' => implode("\n", $memberArray),
);
}
explication rapide:
je créer un tableau memberarray dans lequel je vient y ajouter tout les member qui font parti d'un groupe et array_push se charge de l'affichage. or je ne trouves pas comment faire un lien cliquable sur chaque nom.

J'affiche ensuite memberArray dans un tableau.
Une idée ?
Merci


20 réponses

Bonjour

Il faudrait que tu relises le B.A. BA des chaînes en PHP
'<a href"=/users/profil/?uid='uid'>' est incorrect. Tu aurais dû écrire
'<a href"=/users/profil/?uid='.$uid.'>'
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
Quand on dis que les stages sont fait pour apprendre ...
En effet, erreur toute bête pour commencer.
Il restes que à l'affichage j'obtiens ceci:

Kévin XXXX<a href"=/users/profil/?uid=XXXXXk>
au lieu d'avoir le Kévin XXXXX en lien.

Merci pour le lien le père
Là on tombe dans les problèmes HTML
le lien complet serait
<a href="qqchhose"> texte </a>
ile te manque :
- le " entre le lien et le >
- le texte, qui doit être le prénom mais ça, je suppose que tu peux l'obtenir avec ldapFast::quelque chose (ça dépend de comment ton objet est fait)
- le </a>

Ajoute tout ça et vérifie
Pardon , je viens de voir
foreach($detail['member'] as $member) {
$uid = ldapFast::dn2uid($member);
echo '<a href"=/users/profil/?uid='.$uid.'">';
array_push($memberArray,ldapFast::uid2displayName($uid));
echo '</a>';
}

Mais c'est une bien dangereuse méthode de combiner l'affichage et la mise dans un tableau en une seule opération quand on ne maîtrise pas trop.
Et pourquoi créer un tableau si c'est uniquement pour en faire un implode ensuite, il valait mieux concaténer les noms directement
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
J'ai récupérer se bout de code dans une des applications où je fais mon stage, pourquoi ils font comme ça... c'est leurs façon de faire.

J'ai essayé avec ton code, j'ai bien l'affichage des noms correctement mais toujours pas de lien.

Le echo ne fonctionne pas ici, je ne sais pas pourquoi.
Le echo fonctionne très probablement. Mais ce que j'affiche avec les echo, ce sont des balises HTML et c'est normal que tu ne les voies pas à l'affichage

Mais le lien était pourri parce que tu avais très très mal recopié leur code. c'est <a href=" et non pas <a href"= (inversion entre = et ")
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
Bon faut vraiment que je dorme plus la prochaine fois, des erreurs de débutants alors que c'est pas le 1er lien que je fais dans cette appli.

Je te remercie de ta patience le père, j'ai toujours le soucis des liens qui ne s'affichent pas mais je vais y regarder de plus près
Regarde le code généré à l'aide de ton explorateur. Tu verras bien ce qui n'est pas correct.
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
Voila ce que je peux voir avec Firebug

<td align="center">Edouard XXX, Olivier XXX, Alain XXX, Rodolph XXX, Frédéric XXX, Romain XXX, Patrice XXX, Nathalie XXX, Romain XXX, Kévin XXX, Maxime XXX, Edouard XXX</td>

juste un simple TD sans les liens
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
Je n'ai toujours pas réussi à trouver de solution à mon problème.

Une idée svp ?
N'utilise pas Firebug pour voir le source, utilise plutôt Affichage - code source de la page (ou ctrl U) (si tu as Firefox)
Il y a quelque chose qui me choque : on ne voit pas les <a href...> ni les </a>, mais on voit des virgules entre les noms qui ne sont pas du tout créées par le code dont on parle. Je pense que cet affichage vient d'ailleurs.

Peux-tu montrer tout le script, s'il n'est pas trop long ?
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
Le script fait 138 lignes.
J'obtiens la même chose en passant par afficher le code source de la page.

Les echos ne s'affichent pas en faite.
essai tout bête :
modifie array_push($memberArray,ldapFast::uid2displayName($uid)); en ajoutant 'a' :
array_push($memberArray,ldapFast::uid2displayName($uid).'a');
Qu'est -ce qui s'affiche ?
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
ça rajoute a.
edouard XXXXa

ps: je dvlp sous la forme MCV, enfin, j'ai un contrôleur avec toutes mes fonctions php et une vue pour chaque fonction
Ça confirme ce que je pensais : l'affichage se fait ailleurs. Donc les echo que je t'ai indiqués sortent certainement quelque chose, mais pas au bon endroit. La méthode uid2displayName se contente de rendre une chaîne, elle n'affiche pas.

Si ton 'MemberArray' ne sert qu'à l'affichage, tu peux t'en tirer comme ça :
foreach($detail['member'] as $member) {   
$uid = ldapFast::dn2uid($member);   
array_push($memberArray,'<a href="/users/profil/?uid='.$uid.'">'.ldapFast::uid2displayName($uid).'</a>' );   
}
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
En effet ça pourrait fonctionner mais ça ne fonctionne pas.

J'ai une supposition du pourquoi:
array-push sort un chiffre qui correspond au nombre de personnes.
implode transforme se chiffre en une chaine de caractere.

Donc en faite tout les noms que j'obtiens font partit d'une seule et même chaîne de caractères. Est-ce à cause de ça ? en revanche je ne sais pas


voila ce que j'ai à l'affichage:

<a href="/users/profil/?uid=xxxxxe">Edouard XXXXX</a>
....
c'est correcte et ça devrait fonctionner mais ça m'affiche le code en entiers
array-push sort un chiffre qui correspond au nombre de personnes. Ça on le sait, c'est dans la doc de la fonction array-push.
implode transforme se chiffre en une chaine de caractere. Non, implode met bout à bout tous les éléments du tableau (et non pas ce chiffre) en une seule chaîne.
Si tu as ça à l'affichage, c'est que ta fonction d'affichage fait appel à htmlentities ou htmlspecialchars, justement pour éviter qu'on insère des balises.
C'est toute la façon ont tu fabriques cet affichage qui est à revoir. Sans la totalité du script, pas facile.
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
Je n'ai nul part dans ma page php de htmlspecialchars ou htmlentities.

Là je dois avouer que je suis totalement perdu, 2 jours que je suis sur ce soucis.
ça devrait bien fonctionner avec ton code mais non, ça m'affiche encore et toujours a href... à l'écran.

est-ce que ça prend
'<a href="/users/profil/?uid='.$uid.'">'.ldapFast::uid2displayName($uid).'</a>'
comme une chaîne de caractère...
Le htmlspecialchars ni de htmlentities ne sont pas forcément directement dans ta page, ils peuvent être dans une fonction à laquelle ta page fait appel. Ou alors, il s'agit d'une troisième fonction à laquelle je ne pense pas mais qui a le même effet.

Tu ne peux pas trouver la partie de ton code ou a réellement lieu l'affichage ?

est-ce que ça prend
'<a href="/users/profil/?uid='.$uid.'">'.ldapFast::uid2displayName($uid).'</a>'
comme une chaîne de caractère...
Bien sûr, puisque c'est une chaîne de caractères !
Je ne connais pas la méthode MVC mais je viens de me renseigner rapidement. Il n'y a aucune raison qu'elle change les règles du PHP ou du HTML. Par contre, j'ai bien peur que ton code ne suffise pas, car tu dois faire appel à des bibliothèques.
Allons y quand même pour les 79 ligne, faute de mieux.
Et s'il te plaît utilise la balise code pour avoir une bonne présentation
(sélectionne ton code et clique sur la touche <> en haut de la fenêtre de saisie de la réponse)
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
Voici le code de la fonction:
public function detailGroupe() 
  { 
   if (!$this->user->hasCredential("groupsManagement", "read")) {$this->redirect("errors",'HTTP_403'); return 0;} 
  $timeStart = microtime(true); // Benchmark 
  
 if (!isset($this->get->groupeID) || !is_string($this->get->groupeID))  
 { 
  $this->redirect('LDAPadmin','detailGroupe');  
  return 0; 
   
 } 
  
  //Connexion à l'annuaire LDAP 
  $configs = loader::load("config"); 
   
  // Récupération des infos du groupe choisi depuis le LDAP 
  $search = '(cn='.$this->get->groupeID.')'; 
  $mode = 'admin'; 
  $base = $configs->ldap[0]['root_groups']; 
  $tri = array(); 
  $attributes= array('description', 'member',); 
  $attributesOut= $attributes; 
   
  //Récupération des comptes groups propre à l'utilisateur 
  $datadetailgroups = ldap::ldapGetData($search, $attributes, $mode, $base, $tri, $attributesOut); 
   
  $datagroupsNew = array(); 
   
  foreach($datadetailgroups as $detail) { 
   $memberArray = array(); 
    foreach($detail['member'] as $member) { 
    $uid = ldapFast::dn2uid($member); 
      }  
    array_push($memberArray,'<a href="/users/profil/?uid='.$uid.'">'.ldapFast::uid2displayName($uid).'</a>' );    
       
   //Tableau avec toute les infos d'un groupe 
    $datagroupsNew[] = array( 
     
    'id'               => $detail['id'], 
    'cn'       => $detail['cn'], 
    'description'     => $detail['description'], 
    'member'      => implode(", ",$memberArray), 
    'owner'      => $detail['owner'], 
    'supannGroupeAdminDN'   => $detail['supannGroupeAdminDN'], 
     ); 
    } 
   
  //Création d'un nouveau tableau avec comme valeur $datagroupsNew 
   $newgroups = new dataTable($datagroupsNew); 
    
  $newgroupsOptions = array( 
   'filter'     => '', 
   'filteredRow'   => '', 
   'searchString'  => '', 
   'tableAttribs'  => array('align' => 'center'), 
   'timeStart'    => $timeStart, 
   'getData'     => $this->get, 
   'optionsGrid'   => array( 
     array( 
      'label'     => 'Description du groupe', 
      'field'     => 'description', 
      'orderBy'    => 'description', 
      'attributes'  => array(), 
      'autoFillValue' => null, 
      'formatter'   => null, 
      ), 
     array( 
      'label'     => 'Membres', 
      'field'     => 'member', 
      'orderBy'    => 'member', 
      'attributes'  => array('align' => 'center'), 
      'autoFillValue' => null, 
      'formatter'   =>null, 
      ),  
     ), 
   ); 
  $newgroups->setOptions($newgroupsOptions); 
  $contenu = $newgroups->toHtml(); 
  $this->view->set('contenu', $contenu); 
}
Désolé, rien à en tirer. Il faudrait connaître les bibliothèques que tu utilises pour pouvoir leur indiquer que tu veux des liens, à supposer qu'elles puissent l'admettre.
Mais tu n'as pas utilisé ces bibliothèques par hasard, demande à la personne qui t'a dit de les utiliser.
Là je ne peux absolument plus t'aider, encore désolé.
Messages postés
1366
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
18 novembre 2020
124
Tu n'as pas à être désolè le père !

Même eux sont perdu dans leurs codes... :/

Je te remercie de ta patience, de tes explications et de tes aides ! Il faudrait plus d'internautes comme toi ^^

Dans le coup, je passes le sujet en 'résolu'.
Je vais essayer de fouiller parmis les fichiers qu'ils ont..