Vous n'êtes pas identifié(e).
Ah d'accord merci, je vais regarder dans ce sens alors. Merci bien Jc xxxx
Ah tiens je ne connaissais pas cette methode de PDO. Elle sert a quoi?
oui j'ai fait quelque chose comme ca et cela n'a pas marche; j'ai aussi teste ton code ci dessus et la rien ne s'affiche non plus au niveau des adresses. Ce code va me rendre dingue. Je continue mes tests et des que je trouve une solution (on croise les doigts) je la poste.
Ah la la :S
Lorque je sors la requete du foreach, il n'y a plus aucune resultat qui s'affiche au niveau des liens $adresseOrg. Je continue a chercher et je reviens si je trouve une solution.
D'accord, je teste ca.
Merci bien Jc.
Il me semble que si tu as fait
postume a écrit :1.$res = $req_Dom_Gen->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
2.$res1 = $req_Dom_Gen1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);il me semble que tu ne l'as pas fait pour ta requête qui récup $adresseOrg.
oups non en effet, je l'ai pas fait :S
je fais ca dans la boucle du foreach tu penses? car le $k qui correspond a l'organisme est dans le foreach et j'en ai besoin pour la requete qui recupere $adresseOrg (c'est peut etre meme pour ca que je n'ai pa pense a le faire :S)
Si la réponse est oui alors tu peux faire cela :
foreach ($baseRef as $index => $BD){
if ($index==0){$nomBase=$BD['Bd_Native'];}
if ($index==1){$adresseDebut=$BD['adresseWebDom_debut'];}
if ($index==2){$adresseFin=$BD['adresseWebDom_fin'];}
}
printf('<li>%s</li>',"<center><"."<a href=\"$adresseDebut.$domaine.$adresseFin\">$nomBase</a>"."></center>");
unset($index,$BD);
Je vais adapter ca dans le second ca qui me bloquait et je te dis si cela marche, si tu as encore un peu de temps biensur car je ne voudrais pas te deranger trop longtemps.
Merci pour tout en tout ca.
Jc, en regardant ma BD de plus pres, je me suis rendue compte que dans tous les cas, cette requete ne va renvoyer qu' un seul resultat a chaque fois (le test que j'avais fait en renvoyait plusieurs mais c'etait juste un test pour voir si jamais j'ai plusieurs enregistrements, ce que cela donnerait et si toutes les valeurs seraient renvoyees). Donc le pb est resolu pour ce foreach
Me reste a resoudre le pb du second foreach pour le $adresseOrg que j'ai poste precedemment. Celui la est plus difficile car c'est une requete inclue dans un foreach et le $adresseOrg renvoye est toujours le meme.
la il m'ecrit pour la solution que tu me proposes:
Je suis vraiment frustree car je n'arrive pas a trouver de solution lol.
cela ne marche toujours pas helas:( cette fois ci, seule la 1ere valeur est renvoyee, c'est tres byzarre. Je vais peut etre essaye ta methode car la je suis depassee lol.
Concernant les requêtes, ca me fait plaisir qu'elles resolvent le problème de lenteur qu'avait la première, mais je ne m'attendais pas à tant d'écart, je trouve ça même abusé.. mais bon tant mieux pour toi. Si les 2 nouvelles sont autant performantes, choisi la 3e car elle t'offre un tri sur tes résultats^^.
Concernant le unset, faut mettre des parenthèses que j'avais oublié, mais ca tu as du déjà le faire sinon tu aurait eu une erreur d'execution.
Par contre j'ai commencé à faire des tests de mon coté et j'ai pas ce problème pour le moment. Je vois ca de près et je te tiens au courant.
Et bien deja imagine qu'avec tous les foreach que j'avais dans mon code, ca prenait meme pas 2 sec, c'etait tres rapide aussi alors c'est vrai qu'avoir une requete unifiee qui soit plus rapide que des requetes separees, c'est tres interessant a exploiter, cela vient des index que tu as mis sur ta requete je pense, cela a augmente considerablement la vitesse de la requete; dans la requete unifiee que j'avais faite moi, je n'avais mis aucun index, ce qui explique surement la lenteur d'execution.
Oui j'ai vu l'erreur et en effet j'ai rajoute les parentheses pour le unset ($BD).
Merci encore pour tout.
Merci t'es sympa avec moi
Alors avec ton foreach, tu n'as pas le choix, tu dois garder ton print à l'intérieur. En le laissant à l'interieur donc, le unset $DB; doit résoudre ton problème d'affichage sur les lectures suivant la première, et doit donc te générer une sortie à chaque enregistrement de ta boucle.
Tiens moi au courant
Helas non ca ne resoud pas le pb, comme je te l'avais explique, j'avais essaye de faire le print a l'interieur avec le unset comme tu m'as montre mais cela m'affiche les resultats que pour le 1er organisme, pas tous les autres
Je vais essayer d'y reflechir un peu plus.
Merci en tout cas, tu es syper sympa.
2eme requete tout aussi rapide ^^
Je devrais peut etre m'y mettre alors
Voici pour la 1ere requete super rapide:
Essaye ceci et dit moi si ca fonctionne^^
foreach ($baseRef as $BD){
$nomBase=$BD['Bd_Native'];
$adresseDebut=$BD['adresseWebDom_debut'];
$adresseFin=$BD['adresseWebDom_fin'];
print "<a href=\"$adresseDebut.$domaine.$adresseFin\">$nomBase</a>";
}
unset($BD);
oui cela marche tres bien, c'est ce que j'avais fait au depart (et cela marche de la meme facon meme sans le unset). En revanche, ce foreach va s'afficher que pour le 1er organisme et non tous les autres, c'est pour ca que j'ai sorti le print du foreach et cherché a rentrer les valeurs du foreach dans une variable pour les afficher a l'exterieur de la boucle, c'est tres enervant.
Tant fait pas pour les requetes, je vais les retester
Sinon pour le foreach que tu as cite, je mets en fait le print a l'exterieur du foreach, car si je le mets a l'interieur, tout s'affiche certes, mais seulement pour le 1er organisme et non pour tous les organismes tu vois, donc je le mets a l'exterieur et la cela d'affiche pour chaque organisme certes, mais seule la derniere valeur est affichee et non la liste. C'est un vrai cauchemard pour ces liens
la second requete a ete un peu plus rapide pour donner le meme resultat a savoir une grosse page blanche. C'est byzarre. Je sais pas si cela peut t'aider. En tout cas la requete me semblait bonne. Je l'ai essaye 2 fois mais meme resultat. Si tu as besoin d'un autre test, n'hesite pas, j'ai ma bd sur mon ordi.
Alors je viens d'essayer la 1ere requete sur phpmyadmin, cela a pris une bonne minute mais au final, une enorme page blanche (pas de message mysql disant "no rows" ) c'est la 1ere fois que j'ai une page comme ca qui s'affiche.
J'essaie la seconde.
Pas de problemes pour les requetes Jc, je vais les tester de suite et je te donne le temps d'execution, s'il y en a un.
En revanche (et c'est vrai j'ai oublié de te repondre), le unset ne marche pas ni dans le 1er cas, ni dans le second.
Par exemple dans le second cas, tout marche bien, c'est a dire j'affiche la page html quand l'id_Prot appartient aux 2 tables. En revanche, lorsque l'id_Prot n'appartient qu'a la table OCC_DC, pour le 1er organisme concerné, cela affiche parfaitement les id_Prot en lien avec l'autre page $adresseOrg mais pour le second organisme concerné, cela affiche parfaitement toujours les id_Prot mais en lien avec la page $adresseOrg qui concerne le 1er organisme, donc a chaque fois, c'est le meme $adresseOrg qui est récuperé a savoir celui du 1er organisme et non celui de l'organisme en question
Idem pour le 1er cas:
seule la derniere valeur du foreach est renvoyée
PS:lorsque j'aurais un peu de temps, j'adapterai mon code a ton traitement php car comme je le disais, il me semble en effet beaucoup plus simple ^^
Bonjour Jc,
J'ai finalement compris ce que tu faisais (cela m'a pris du temps desolee lol ^^)
Mais tu sais j'ai derriere une base de donnees tres consequente (c'est pour un grand labo) donc les requetes unifiees prennent enormement de temps (plus de 30min sur mon ordi et encore...) donc il vaut mieux dans mon cas que je passe par des requetes separees (je gagne enormement de temps ainsi, de l'ordre de 2sec par demande selon $domaine et $fdr et $organisme sur le formulaire). Je garderai les requetes unifiees pour des bases de donnees plus petite.
Donc la j'ai fait mes requetes separees, les ai mis dans un tableau que j'ai trie selon la cle organisme et cela marche vraiment super bien et c'est rapide surtout.
Sinon ta derniere intervention m'interesse car c'est le seul hic qui me pose probleme pour une petite requete que je rajoute en plus de mes resultats.
Comme tu l'auras compris, je classe les id_Proteine de la table OCC_DC et OCC_NVDC_PAR_DC en fonction de l'organisme.
Le truc, c'est qu'un id_Prot de la table OCC_DC peut aussi appartenir a la table OCC_NVDC_PAR_DC.
Donc en plus, je dois faire un test pour chaque id_Prot de la table OCC_DC, a savoir s'il appartient aussi a la table OCC_NVDC_PAR_DC.
Pour cela pas de probleme, la requete marche tres bien.
Donc si l'id_Prot appartient aux 2 tables, je fais un lien vers une page html (pour cela pas de pb non plus)
Par contre si l'id_Prot appartient que a la table OCC_DC, je fais une requete en fonction de l'organisme a laquelle il appartient pour afficher un autre lien que je recupere de la table WEB_ORGANISM et la je n'arrive a afficher que le lien du 1er organisme et pas les autres (decidement j'ai toujours le meme probleme).
Voici mon code php:
echo '<h2><center><div style="color:#0000FF;">Known Occurrences:</h2></center></div>';
//On recupere le lien de chaque organisme
$lienOrg = $db->query(("SELECT DISTINCT WEB_ORGANISM.adresseWebOrg_debut, WEB_ORGANISM.adresseWebOrg_fin
FROM WEB_ORGANISM
WHERE WEB_ORGANISM.organisme= '$k'"));
foreach ($lienOrg as $lien)
{
$adresseDebutOrg=$lien['adresseWebOrg_debut'];
$adresseFinOrg=$lien['adresseWebOrg_fin'];
}
foreach ($a as $v) { //$v est l'id_Proteine
//On teste si l'id proteine que l'on recupere contient des nouvelles occurrences
$testProtC = $db->query(("SELECT *
FROM OCC_NVDC_PAR_DC
WHERE id_Prot= '$v'"));
$nbRowC= $testProtC->rowCount();
//Si aucune occurrence, on affiche le lien de l'organisme
if ($nbRowC == 0)
{
$adresseOrg =$adresseDebutOrg.$v.$adresseFinOrg;
printf('<li>%s</li>',"<center><"."<a href=\"$adresseOrg\">$v</a>"."></center>");
}//Sinon on affiche la page html des Nouvelles Occurrences
else
printf ('<li>%s</li>',"<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/$v.html\">$v</a>"."></center>");
Donc tu vois, pour chaque $v (=l'id_Prot) qui n'appartient pas aux 2 tables, j'affiche le lien $adresseOrg correspondant a l'organisme ($k) a laquel appartient $v mais j'ai du mal.
Donc a ton avis, je cree un tableau vide avant la boucle qui permet de recuperer les adresseOrg puis je remplis le tableau mais comment j'affecte la bonne adresseOrg correspondant au bon $v selon son organisme?
Vraiment desolee, j'ai du mal avec ces tableaux.
Merci pour tout.
Bonjour Jc,
Alors j'ai adapté mon code a ce que tu m'as dit mais cela ne m'affiche toujours rien
Voila ce que j'ai écrit en requete d'apres ton modele:
Mais est ce que cela ne serait pas dans mon cas quelque chose du genre:
car je veux l'id prot de OCC_DC d'une part(avec OCC_DC.id_Dom ='$domaine') et l'id_Prot de OCC_NVDC_PAR_DC d'autre part(avec OCC_NVDC_PAR_DC.id_Dom='$domaine' et OCC_NVDC_PAR_DC.FDR='$fdr') le tout classes par organisme (chaque organisme a un id de OCC_DC et/ou un id de OCC_NVDC_PAR_DC), $domaine et $fdr etant ce que l'utilisateur rentre dans le formulaire.
ah ca y est je n'ai plus l'erreur (j'avais oublie une parenthese ). Par contre je n'ai aucun affichage. Je pense que je dois revoir la requete reunifiee (car je suis pas tout a fait sure que cela correspond car il me faut les id_Prot de OCC_DC et de OCC_NVDC_PAR_DC classes par organisme et ou les id_Dom='$domaine') ou alors cela vient de la fonction PHP d'affichage.
Dans la fonction display_prot, tu fais un foreach sur $row[0], c'est ca?
Alors j'ai essaye ta methode car il est vrai qu'elle est beaucoup plus simple que la mienne mais voila l'erreur que je n'arrete pas d'avoir :
ce qui correspond a la ligne:
C'est frustrant. Pourtant j'a fait exactement comme tu m'as dit
Sinon c'est pas grave je vais garder ma methode, tant qu'elle marche c'est l'essentiel.
Sinon pour la solution que tu m'as propose concernant le stockage de variables d'un foreach, le probleme, c'est que je peux avoir plusieurs resultats issus du foreach et si je sors le print du foreach, je n'aurais que la 1ere valeur du foreach et non l'ensemble. C'est pour cela que je cherche a stocker les resultats dans un tableau par exemple, de facon a ce que je puisse les utiliser quand je veux tu vois ce que je veux dire?
Je vais continuer a reflechir encore un peu. Merci pour tout en tout cas, c'etait une discussion passionnante, meme s'il y a encore quelques subtilites qui m'echappent.
A tres bientot
Bonjour Jc,
Encore et toujours merci pour ces reponses toujours aussi pertinentes Je teste immediatement ta solution et revient a toi pour te tenir informé du résultat.
PS:j'aime beaucoup ton site et la maniere dont tu l'as construit, tres joli formulaire
Bonjour Jc,
Je lis tes réponses avec beaucoup d'attention, les solutions que tu proposes sont toujours tres intéressantes et enrichissantes pour moi. Lorsque je teste ton code, voici ce que j'ai comme message:
Ce qui correspond a cette ligne:
En effet, comme tu l'as bien souligné, j'utilise PDO et les méthodes mysql ne marchent pas hélas. Meme pour tester les requetes vides, je dois passer par un foreach de la requete puis par un isset du résultat pour voir si j'ai quelque chose issu de la requete. Je suis sure qu'il y doit y avoir plus simple mais utilisant la PDO et PHP pour la 1ere fois, je pense ne pas encore avoir exploité toutes les possibilités qui s'offrent a moi. En tout cas je garde tes solutions en mémoire, je pense que je serai amené a travailler avec mysql et cela pourra donc m'etre tres utile de savoir exploiter les résultats comme tu le fais.
Par contre j'aurais une derniere question a te poser si tu veux bien:
Dans le post précédent ou j'ai écrit la solution qui regroupe toutes mes requetes par organisme:
Dans le dernier else, lorsque je dis qu'aucune nouvelle occurrence n'a été trouvé pour ce domaine dans cet organisme, je fais un foreach pour afficher un lien vers la base de donnée de référence. Or le résultat s'affiche la 1ere fois lorsqu'un organisme n'a aucune nouvelle occurrence mais je souhaiterai qu'il s'affiche a chaque fois qu'aucune nouvelle occurrence n'a été trouvée pour un organisme. D'ailleurs le message qui précéde ce foreach:
s'affiche bien a chaque fois, mais pas les résultats du foreach suivant, ce que je comprends pas.
Ma question est: est-il possible de stocker les résultats d'un foreach dans une variable de maniere a les recuperer quand on en a besoin?
Merci pour tout Jc.
PS: -j'ai tenu compte du message du modérateur.
-desolée pour l'absence de certains accents, c'est un ordinateur américain.