Probleme de recherche sur Array (PHP)

Résolu/Fermé
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 - 6 juin 2009 à 19:42
 le père - 6 juin 2009 à 22:41
Coucou,
je debute en PHP et j'essaie temps bien que mal de m'en sortir.
Pour faire simple j'essaie de créer un webmail, tout va bien pour la connexion et récupération, affichage des données et passage de variables.
La ou je bloque c'est sur la récupération d'une ligne de données dans un tableau
J'ai lu diverses docs, divers forum, cela a l'air pas très dur mais ...
chez moi lol ca marche pas :(
Donc la je désespère, si vous pouvez me donnez un peu d'aide ça serrait franchement sympa.

Bon alors pour être le plus clair possible je vais essayer de vous expliquer mon cheminement.

J'ai une première page chargé de ce connecter au serveur imap, de récupéré les données et pour certaines d'en faire des tableaux puis de les mettre en session.

$H_BodyHead = imap_body ($MaBox, $message);
$H_BodyHead = imap_utf8($H_BodyHead);
$H_BodyHead = utf8_decode($H_BodyHead);

ensuite j'envoie cela via une variable de session sous forme de tableau :

$_SESSION["SessMess"][] = array($H_BodyHead);

en bas de ma page tout mes messages son listé sous forme de lien afin que je puisse cliquer dessus et lire dans une autre page le message choisi.

<a href="<? echo $UrlPrincipal; ?>/liremail.php?id=<? echo $Bkey; ?>"</a>

PS : $Bkey étant la récupération des Msgno du serveur imap

Et voila ou est mon problème, je n'arrive pas a sélectionner dans ma variable "$_SESSION["SessMess"]" le message choisi.

Dans ma page de lecture de mail je voudrais trouver une fonction qui aille chercher dans ma variable "$_SESSION["SessMess"]" le numéro du message "$Bkey" et qui affiche ce fichu message.
J'ai testé diverses fonction php mais rien n'y fais, j'arrive a vérifier que le numéro de ligne est bien présent via
"array_key_exists" mais après pour dire a PHP qu'il doit afficher le message correspondant au numéro du message rien.

J'ai testé diverses truc comme :
foreach ($_SESSION["SessMess"] as $cle=>$valeur) {

Mais il m'affiche évidement toutes les clé et toutes valeur et si je tente un array_search il ne me trouve pas mon numéro de clé (logique je crois puisque il recherche les valeur et non les clés.

Bref la je suis perdue.
Si quelqu'un a une idée
A voir également:

4 réponses

Bonjour

Je n'ai pas tout compris de ce que tu cherches à faire, mais ceci me semble bizarre :

$H_BodyHead = imap_body ($MaBox, $message);
$H_BodyHead = imap_utf8($H_BodyHead);
$H_BodyHead = utf8_decode($H_BodyHead);

Ces 3 lignes de créent pas un tableau. Chaque ligne affecte une valeur à $H_BodyHead, la 3ème annule l'effet des 2 précédentes.
Je pense que tu aurais dû mettre $H_BodyHead[] = ... à chaque fois.

En suite
$_SESSION["SessMess"][] = array($H_BodyHead); me semble tout aussi bizarre
Selon ce que tu cherches à faire, c'est très probablement $_SESSION["SessMess"][] = $H_BodyHead; ou $_SESSION["SessMess"][] = $H_BodyHead;

Comme tu ne dis rien du tout (enfin, je n'ai pas vu..) sur la façon dont le numéro de message $Bkey est enregistré dans ta session, pas facile de t'aider à la retrouver...
0
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 3
6 juin 2009 à 22:04
Bonsoir,
oui effectivement mon code est bizarre et vu que je me prend la tete sur mon probleme j'ai du mal a l'expliquer.
Milles excuses.
donc pour reprendre effectivement deja j'ai quelques erreurs tel que celles relevés
En fait a :

$H_BodyHead = imap_body ($MaBox, $message);
$H_BodyHead = imap_utf8($H_BodyHead);
$H_BodyHead = utf8_decode($H_BodyHead);

je n'avais pas mentionné mais a la ligne suivante il y'a un tableau qui ne sert qu'a cette page :

$B_BodyHead = array('Message'=>$H_BodyHead);

puis plus bas j'ai inscrit ma variable de session qui a pour but de mettre tout les corps de message sous forme de tableau.
$_SESSION["SessMess"][] = array($H_BodyHead);

J'ai peu etre commis une erreur sur l'ecriture de ce morceau, j'ai bidouillé cela comme ca et visiblement cela ne posais pas de probleme pour la recuperation depuis j'ai changé pour ton code :

$_SESSION["SessMess"][] = $H_BodyHead;

(entre nous je vois pas de changement lorsque je demande un print_r dessus mais je te fais confiance.

ensuite une succession de bout de code qui me permet d'afficher une lsite des messages disponible dans ma bal.
cette liste s'affiche sans probleme et chaque message a son lien qui donne :

monsite/mapagedelecturedemail.php?id=$Bkey(le n° de message)

Pour repondre a ta question $Bkey correspond a ceci :

$Bkey = array('num'=>$Headers->Msgno);
(Msgno etant le numero du message dans la bal imap, ca c'est le serveur qui le gere)

Mon probleme est a la suite de cela.

Alors je vais essayer d'etre plus clair.

La page "mapagedelecturedemail.php" doit afficher le corps du message du lien precedent.
Donc si je clique sur le lien N°5 je veux que la page "mapagedelecturedemail.php" affiche le message N°5.

Et voila tout mon probleme car j'ai essayer plusieurs methode mais aucune ne fonctionne (je pense d'ailleurs que c'est mes lacunes qui sont en cause plus que le code lol.

Donc j'ai tenté des trucs comme cela :

if (array_key_exists($id, $_SESSION["SessMess"])) {

qui trouve sans soucis la clé, par exemple 5, comme dans mon exemple, mais apres?
Comment je peu faire comprendre a ce fichu PHP que je veux qu'il m'affiche la valeur correspondante a ma recherche.

J'espere avoir ete plus clair
Merci en tout cas
0
underscape Messages postés 57 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 14 août 2009 3
6 juin 2009 à 22:35
Bon et bien j'ai trouve :)

alors il y'a certainement plus propre, vu que c'est au pif que j'ai sortie ca...

if (array_key_exists($id, $_SESSION["SessMess"])) {

foreach($_SESSION["SessMess"] as $cle=>$valeur) {

//echo 'CLE : '.$cle[$id].' - VALEUR '.$_SESSION["SessMess"][$id].'<br>';
$CleMess = $cle[$id];
$ValMess = $_SESSION["SessMess"][$id];

}
}

echo $ValMess (ca affiche le corps de mon message)

Ouf...
Si cela peu aider quelqu'un
Enjoy
0
Tu ne donnes que des fragments de code sans relation entre eux, je n'y comprends pratiquement rien et le peu que je comprends me semble incohérent.. Peux-tu donner le script ?

Et quand tu dis que
$_SESSION["SessMess"][] = $H_BodyHead; donne le même résultat que $_SESSION["SessMess"][] = array($H_BodyHead); (si c'est bien ça que tu dis...) j'ai bien du mal à te croire
0