[PHP] Lien URL dans variable PHP

Résolu/Fermé
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - Modifié par patrice86 le 23/05/2011 à 09:33
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - 24 mai 2011 à 10:36
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.'>'
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
23 mai 2011 à 09:41
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
0
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
0
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
0

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

Posez votre question
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
23 mai 2011 à 10:02
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.
0
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 ")
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
23 mai 2011 à 10:30
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
0
Regarde le code généré à l'aide de ton explorateur. Tu verras bien ce qui n'est pas correct.
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
23 mai 2011 à 13:27
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
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
23 mai 2011 à 14:49
Je n'ai toujours pas réussi à trouver de solution à mon problème.

Une idée svp ?
0
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 ?
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
23 mai 2011 à 15:35
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.
0
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 ?
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
Modifié par patrice86 le 23/05/2011 à 16:30
ç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
0
Ç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>' );   
}
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
Modifié par patrice86 le 24/05/2011 à 09:01
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
0
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.
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
Modifié par patrice86 le 24/05/2011 à 09:24
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...
0
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 !
0
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)
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
Modifié par patrice86 le 24/05/2011 à 10:12
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); 
}
0
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é.
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
24 mai 2011 à 10:36
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..
0