Tableau Dynamique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Tableau Dynamique

par arkilon » 13 avr. 2007, 15:04

Merci beaucoup pour ta réponse et voici la/ma solution :
<?
$requete_medocs = "SELECT DISTINCT nommedic FROM medicament";
$resultat_medocs = mysql_query($requete_medocs, $connect_pharma);

//Composition d'un tableau ne contenant que les noms de médicaments
$les_medocs = array();
while ($ligne = mysql_fetch_assoc($resultat_medocs))
{ $les_medocs[] = $ligne['nommedic'];
}

$requete = "SELECT quantite, nompatient, nommedic, ordo_num
FROM medicament AS m, patient AS p, ordonnance AS o
WHERE p.numpatient = o.idpat AND o.nummedic = m.nommedic";
$resultat = mysql_query($requete, $connect_pharma);

//Composition du tableau à 2 dimensions qui permettra l'affichage
$tableau_affichage = array();
while ($ligne = mysql_fetch_assoc($resultat))
{ $nompatient = $ligne['nompatient'];
$nommedic = $ligne['nommedic'];
$tableau_affichage[$nompatient][$nommedic] = $ligne['quantite'];
}


?>
<table border="1">
<tr>
<td>&nbsp;</td>
<?
//Afichage de la première ligne du tableau : les noms des médicaments
foreach($les_medocs as $un_medoc)
{ ?><td><?=$un_medoc;?></td><?
}
?>
</tr>
<?
//Affichage de toutes les lignes correspondant aux patients
foreach($tableau_affichage as $patient=>$medocs)
{ ?>
<tr>
<td><?=$patient;?></td>
<?
foreach($les_medocs as $un_medoc)
{ if(!empty($medocs[$un_medoc]))
{ ?><td><?=$medocs[$un_medoc];?></td><?
}
else
{ ?><td>-</td><?
}
}
?>
</tr>
<?
}
?>
</table>
Et la ca marche nikel merci encore pour le coup de main et pour le temps consacré à mon probléme :)

par Ryle » 13 avr. 2007, 14:48

Le problème, c'est qu'il n'y a pas de notion de tableau croisé en html. Il s'agit uniquement de mise en page, et c'est donc à toi de préparer les éléments correctement pour pouvoir les afficher comme tu le souhaites, sachant que la construction d'un tableau html se fait uniquement par ligne et de gauche à droite.

En php en revanche, tu peux réaliser un tableau à plusieurs dimensions (ou tableau de tableau) et préparer un peu plus proprement l'affichage. Ainsi tu pourrais faire un tableau associatif contenant la liste des personnes auxquels tu associerais un 2nd tableau associatif associant le nom du médicament a la quantité (et un nom bidon pour répérer l'ordonnance). Quelque chose dans ce goût là en somme :

Code : Tout sélectionner

Array ( Arkilon => Array ( xxx => 5555, Aspirine => 3, Daphalgan => 0, Doliprane => 0, ... ), Ines => Array ( xxx => 5556, Aspirine => 0, Daphalgan => 0, Doliprane => 5, ... ), ... )
(On peut aussi indexer avec le n° de l'ordonnance et coller le nom ensuite, ce numéro devant être je suppose unique, cela permet d'éviter les risques d'homonymes dans les noms)

A partir de la, il te suffit de parcourir ce tableau (avec foreach()) pour afficher ligne par ligne les valeurs dans des <td>. :)

Reste donc à construire ce tableau, ce que tu dois pouvoir faire à partir de la requête avec la jointure. Il te suffit de parcourir les enregistrements retournés et de les socker dans des tableaux du genre :
$tableau = array(); // déclaration du tableau

while (...) { // boucle sur les enregistrements
  $nompatient = ..; // récupération des valeurs
  $nommedic = ..;

  if(!isSet($tableau[$nompatient])) // si on a pas encre crée le sous tableau pour cette personne
    $tableau[$nompatient] = array();

  $tableau[$nompatient][$nommedic] = $quantite;  // on renseigne la quantité pour le médicament concerné

  $tableau[$nompatient]['champOrdonnace'] = $ordo; // éventuellement le numéro d'ordo
}
// et en principe, une fois tous les enregistrements parcourus, on doit retrouver quelque chose proche du tableau ci dessus :
echo '<pre>';
print_r($tablrau);
echo '</pre>';

par arkilon » 13 avr. 2007, 13:43

La boucle DO (Pour) qui me premet d'afficher plusieurs résultats automatiquement ou région répété dans DreamWeaver.

Oki pour les TR ou les TD dont je dois m y prendre comme une buse :)

Personne à un ptite exemple (code) de ce que je veux faire, j'ai fait plusieurs post sur ce sujet et j ai pas ou trés peu de réponse, si il est impossible de faire ce que je veux vous pouvez me le dire :)

Ou je m'exprime peut être mal auquel cas je peu essayer de réexpliquer correctement il n'y à pas de souci.

Je viens de créer la tableau à la main pour vous montrer :

Image

Ma question c'est comment arriver à ca ??? en automatique???

Faut il faire une seule requête ?
Faut il en faire 2, 1 qui recupére l'ensemble des medics et 1 la prescription (Nom patient, Nom medic, num ordo & quantité) ??
Comment j'intégre ca dans le code Html / Php ?

par Hermès » 13 avr. 2007, 12:28

Ca restera des tr et des td dans tous les cas...
Qu'est-ce que tu appelles les "do" ?

par arkilon » 13 avr. 2007, 12:21

Une petite Information mon tableau j'essaye de le construire en Html avec des TD TR ... Mais j'ai des problémes avec les DO qui à priori selon Dreamweaver ne peuvent s'imbriquer ?

Je m'y prend surement mal y a til un moyen de générer un tableau différement avec PHP ?

par arkilon » 13 avr. 2007, 10:51

Plop salut tout d'abord merci pour ta réponse.

J'ai essayé la requête avec OUTER JOIN en effet ca fonctionne mais cela me donne le même résultat que ma requête c'est à dire que cela ne me ressort pas tous les médicaments existant dans la base et les quantités ne coincident pas avec le nom du pation/nom medicament.

Je débute en PHP et ne comprend donc pas tout, ce que je ne vois vraiment pas c'est tout d'abord comment construire le tableau avec les regions répété et tout (le DO While). Pour la requête ca me sort bien ce que je veux mais c'est au niveau de l'agancement des données que cela ne va pas et que je péche cruellement depuis plusieurs mois maintenant.

Je ne vois pas comment construire le tableau avec toute la liste des médicaments en horizontal (TABLE MEDICAMENT) et qu il fasse coinsidé la quantité avec le bon nom du patient, en quelque sort un tableau dynamique croisé.

Pour moi dans ma tête il faudrait pouvoir dire que telle colone a comme identifiant le nom du medic, que telle ligne a comme idetifiant le nom du patient et que la quantité est inséré a l'intersection de ces 2 identifiants mais je ne sait pas du tt le faire en PHP.

Voila je c pas si il existe un tuto sur les tableaux croisés dynamique (Pas trouvé), si c'est bien faisable ?

Merci d'avance pour votre aide
Si jamais je travail sous Dreamweaver MX mais je connais tout de même quelque peu le code PHP.

Re: Tableau Dynamique

par Ryle » 13 avr. 2007, 10:00

Le but est d'afficher l'ensemble de la Table médicament et non pas seulement les médicaments préscris. Aprés faut que la quantité arrive au point d intercection entre le patient et son medicament
Je n'ai pas regardé en détail, mais je dirais qu'il te faut pour cela faire une jointure externe dans ta requête (OUTER JOIN) pour lier les tables sur lesquelles tu requêtes, et ainsi ramener tous les enregistrements de ta table médicament, même s'il n'y a rien d'associer dans les autres...

A tester, mais ca devrait ressembler à un truc du genre :

Code : Tout sélectionner

SELECT quantite, nompatient, nommedic, ordo_num FROM medicament AS m LEFT OUTER JOIN ordonnance AS o ON o.nummedic = m.nommedic, patient AS p WHERE p.numpatient = o.idpat

Tableau Dynamique

par arkilon » 13 avr. 2007, 09:16

Plop Plop je relance mon super sujet de roxxor ! Car je galére.

Donc je v expliquer le but du truc : Transformer une grille Excel au format Web, j'ai comme contrainte devoir le reproduire le plus fidelement possible.

Aprés y à 2 buts finaux :

[] Générer des stats du genre cbien de tel ou tel medicament ont était préscris... (J en suis po encore la mais j'aurai pas de souci).

[] Générer des étiquettes avec le nom du patient et le N° d'ordonnance.

Voici une image de la grille Excel que je dois copier :

Image

Donc voila je dois porter cette grille au format Web et ce le plus exactement possible, je v juste inverser les médicaments avec les nom des patients.

Mes Tâbles :

[] MEDICAMENT : Nummedic & Nommedic
[] PATIENT : Numpatient & Nompatient
[] ORDONANCE : Ordo_numinfo (qui me sert juste pour moi de clé prim), Num_ordo (saisie manuellement et peut etre saisies plusieurs fois par exemple pour un patient qui a 2 médicaments on saisis le même n° d'ordonnance pour les 2). Num_medic (en faite c le NOM), Idpat (c'est le N° du patient) & Quantité (c'est la quantité de tel ou tel medicament préscris).

Ma requête principale qui affiche la grille chimio : (req_insertionordo

Code : Tout sélectionner

SELECT quantite, nompatient, nommedic, ordo_num FROM medicament AS m, patient AS p, ordonnance AS o WHERE p.numpatient = o.idpat AND o.nummedic = m.nommedic
Le code du tableau :

Code : Tout sélectionner

<table width="897" height="57" border="1"> <tr> <td width="192">&nbsp;</td> <td width="188">&nbsp;</td> <td width="173"><span class="Style3">Ca repr&eacute;sente les quantit&eacute;s et il faudrait quel ce mette sous le bon nom de m&eacute;dicaments </span></td> <td width="486"><span class="Style3">Je voudrait que mes medicaments soit ici et en vertical et s etende vers --> </span></td> </tr> <?php do { ?> <tr> <td><?php echo $row_req_insertionordo['nompatient']; ?></td> <td><?php echo $row_req_insertionordo['ordo_num']; ?></td> <td><?php echo $row_req_insertionordo['quantite']; ?><span class="Style3">--></span></td> <td><?php echo $row_req_insertionordo['nommedic']; ?></td> </tr> <?php } while ($row_req_insertionordo = mysql_fetch_assoc($req_insertionordo)); ?> </table>
Fonctionnement et résultat actuel :

Adresse : http://arkidesign.ar.funpic.org/index.php

Vous pouvez vous lacher utilisé et tout y a pas de souci.

Méthode :

Donc je saisis tout d'abord mon patient si il n existe pas en allant sur saisir un patient avec son ordonnance.

Ensuite une fois validé vous le retrouvez dans le tableau juste en dessous.

Dans ce tableau a chaque patient 3 petites Icônes :

Image Permet de modifier le nom du patient en cas d erreur.
Image Permet de supprimer les patients.
Image Permet de préscrire le médicament.

Donc apres avoir cliqué sur Image vous allé prescrire le medic 1 par 1 donc vous choisissez le médicament dans la liste vous lui donné un numero d ordonnance puis une quantité.

Et ensuite en faisant Retour Index vous choisissez Affichage grille chimio et vous devez voir votre enregistrement.

Et c'est la que j'arrive pas a ordonner les donnees comme il faut. Au secours ObiWan !!!!

Le but est d'afficher l'ensemble de la Table médicament et non pas seulement les médicaments préscris. Aprés faut que la quantité arrive au point d intercection entre le patient et son medicament

Vraiment si kkun gére bien en PHP par pitié je need a mort de l'aide. Merci d'avance à ceux qui von perdre un peu de temps avec mon truc ^^