IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Lien entre html et php? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut Lien entre html et php?
    Bonjour,


    J'aimerai afficher dans un tableau une série de médicaments avec leurs heures de prise. Mais bon, avant de faire ça, je dois commencer par sélectionner le patient pour lequel je souhaite voir la fiche de traitement (=l'ensemble des médicaments qu'il prend). Et je n'y parviens pas. Le soucis doit venir de cette ligne $reponse = $bdd->query('SELECT * FROM abonnes where nom = "$nom"'); , car quand je met $reponse = $bdd->query('SELECT * FROM abonnes where nom = "Bertrand"'); cela fonctionne correctement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    <div id="body">
    
     <div id="content">
    
    <h2>Traitement</h2>
    <p>
    <br />
    <br/ >
      <form method="post" action="repos.php">                                //repos.php signifie qu'on va rester sur la même page
       <p>
           <label for="nom">Nom :</label>
           <input type="text" name="nom" id="nom" />                      // ici je sélectionne la personne
            <input type="submit" value="Valider" />
        
         
       </p>
    </form>
    
    <?php
    try
    {
    	// connexion à la base fonctions
    	$bdd = new PDO('mysql:host=localhost;dbname=fonctions;charset=utf8', 'root', 'root');
    }
    catch(Exception $e)
    {
    	
            die('Erreur : '.$e->getMessage());
    }
    
    
    $reponse = $bdd->query('SELECT * FROM abonnes where nom = "$nom"');                     // ça ne marche pas non plus avec ".$nom.". Par contre, ça fonctionne si je met le nom d'une personne...
    
    
    
    while ($donnees = $reponse->fetch())
    {
    ?><table border = 2px>
    	<tr>
    	<th>
    	</th>
    	<th>
    	08:00
    	
    	</th>
    	<th>
    	12:00
    	</th>
    	<th>
    	20:00
    	</th>
    	<th>
    	21:00
    	</th>
    	</tr>
    	<tr>
    	<td>
    	<?php echo $donnees['medicament']; ?>
    	</td>
    	<td>
    	
    	<?php if ($donnees['heure']=="08:00"&& $donnees['medicament']=="amiodarone")
    	 {echo "X";} else  {echo " ";}?>
    	<td>
    	<td>
    	</td>
    	<td>
    	</td>
    	</tr>
    	<tr>
    	<td>
    	<?php echo $donnees['medicament']; ?>
    	</td>
    	<td>
    	
    	<?php if ($donnees['jour']=="16") {echo "X";} else  {echo " ";}?>
    	<td>
    	<td>
    	</td>
    	<td>
    	</td>
    	</tr>
    	</table><?php
     // echo '<b>'.$donnees['nom'].' '.$donnees['medecin'].'</b> ('.$donnees['medicament'].')'.$donnees['heure'].' '.$donnees['jour'].' '.$donnees['mois'];  
     // echo ' <i>date de naissance : '.$donnees['date_naissance'].'</i><br>';  
        } 
    
    $reponse->closeCursor(); 
    
    ?>
    
    </div>
    
    
    
    
    </html>
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Ca ne marche pas parce que tu envois '$nom' ou '.$nom.' comme une chaine de caractere et ta base de donnee ne trouve personne qui s'appelle '$nom' ou '.$nom.'

    Il faut bien visualiser qui va interpreter quoi, dans tes exemples :
    $reponse = $bdd->query('SELECT * FROM abonnes where nom = "$nom"');
    $reponse = $bdd->query('SELECT * FROM abonnes where nom = ".$nom."');

    PHP remarque tu as une chaine de caracteres delimitee en rouge par des simples quotes et ne s'occupe donc pas de ce qu'il y a a l'interieur (n'interprete pas ta variable).
    Ta base de donnees vois les doubles quotes en bleu et considere que ce qui est a l'interieur est une chaine de caractere et essaye donc de trouver un nom = "$nom", qui n'existe pas.

    Essaye ca :
    $reponse = $bdd->query('SELECT * FROM abonnes where nom = "'.$nom.'"');

  3. #3
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    ok merci ! C'est vrai que c'est logique que php cherche "$nom".


    Pour l'autre problème que j'ai, c'est que je ne sais pas comment faire pour afficher un médicament par ligne. J'aurai voulu mettre en abscisse les heures de prises (ça c'est bon) et en ordonné les différents médicaments pris, mais je ne sais pas comment faire. Pour l'instant, j'ai réussi à en afficher un seul par table. Une boucle for? ou alors jouer avec le while (j'ai essayé mais pas réussi)?



    Sur cette image, j'aurai voulu avoir dafalgan sous amiodarone (ou l'inverse), dans le même tableau
    Nom : Capture.PNG
Affichages : 817
Taille : 8,2 Ko

    D'avance merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ca depend de la structure de ta base de donnees. Avec une requete comme celle que tu presentes (SELECT * FROM abonnes WHERE nom = 'Bertrand'), tu ne pourras avoir qu'un seul medicament par abonne. Si tu veux pouvoir affecter plusieurs medicaments a un abonne il te faut plusieurs tables et des jointures pour le faire proprement.

  5. #5
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    actuellement, ma base de donnée est comme ceci :

    une seule table avec dedans :

    nom (patient)
    medicament
    heure
    jour
    mois
    année
    date_de_naissance
    medecin

    Dois-je faire une table par personne? ça me parait être la solution mais ceci impliquerait 200 tables... .

  6. #6
    Invité
    Invité(e)
    Par défaut
    Non, pas une table par personne. Idealement il te faudrait une table avec tes patients, une table avec tes medicaments, et une table pour les prescriptions (qui ferait le lien entre les patients et les medicaments).

    Ta table patient ressemblerais a quelque chose du genre : id|nom|prenom|date_naissance|... ta table medicaments a : id|libelle|... et les presciptions a : id|id_patient|id_medicament|heure|jour|mois|annee|... Je t'invite a te renseigner sur les jointures en SQL, c'est une notion fondamentale si tu veux travailler avec des bases de donnees relationnelles (ca sonne barbare mais ce n'est pas tres complique).

    Avec ta structure actuelle il faut que tu dupliques les informations de tes patients pour chaque medicament, si tu veux formatter ton tableau en l'etat oui il va falloir jouer avec des boucles imbriquees.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Bonjour,

    pour la structure de la base de données, je suis entièrement d'accord avec Mrsky.
    Pour l'affichage dans un seul tableau, il faut mettre les balises table et th en dehors de la boucle afin qu'elles ne s'affichent qu'une fois.
    Christophe

    Pensez à mettre quand c'est le cas.

  8. #8
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Merci pour votre aide.

    Ceci vous parait-il cohérent?Nom : medoc.png
Affichages : 829
Taille : 39,2 Ko

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Pour les noms des tables j'essaie de garder une cohérence : tous au singulier.
    Je vous propose : patient, médicament et prescription
    La table prescription doit contenir :
    • PK id_prescription (auto-incrément)
    • FK id_patient
    • FK id_medicament
    • medecin
    • heure
    • jour
    • mois
    • année


    FK veut dire Foreign Key. Une clé étrangère permet de faire un lien entre deux tables. C'est votre relation.
    Christophe

    Pensez à mettre quand c'est le cas.

  10. #10
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    ok merci à vous deux ça fonctionne

    J'ai retiré date_naissance et medecin de la table medicament.
    J'ai donc ceci
    Nom : Capture.PNG
Affichages : 831
Taille : 24,3 Ko


    un dernier truc : au niveau de la requête sql, si je veux afficher une croix dans la case de 8 heures de la bonne personne qui prend le médicament "dafalgan" à 8 heures, je proposerai


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->$reponse = $bdd->query('SELECT nom, medicament.id_du_medicament, jour, denomination from listing_medicaments, medicament, patient where nom = "'.$nom.'"') ;

  11. #11
    Invité
    Invité(e)
    Par défaut
    Cette requête n'est pas correcte, tu devrais utiliser le mot clé 'JOIN' pour effectuer des jointures entre les tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'SELECT nom, medicament.id_du_medicament, jour, denomination FROM patient
    LEFT JOIN medicament ON patient.id_du_patient = medicament.id_du_patient
    LEFT JOIN listing_medicament ON medicament.id_du_medicament = listing_medicament.id_du_medicament
    WHERE nom = '.$nom
    Explication sommaire : On part de la table 'patient' car tu cherches par le nom du patient. Ce n'est pas du tout obligatoire mais je trouve que c'est plus clair à la lecture. On lie la table 'patient' avec la table 'medicament', la table 'medicament' avec la table 'listing_medicament'. On utilise 'LEFT JOIN' car nous voulons pouvoir sélectionner un patient même si il n'a pas de médicament attaché.

    Par contre cette requête ne va pas miraculeusement mettre une croix au bon endroit, ce qu'elle va te donner c'est la liste des prescriptions et des médicaments pour toutes les personnes qui correspondront à $nom. Si tu veux restreindre a un médicament spécifique tu dois ajouter une clause dans le WHERE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND listing_medicament.denomination = $denomination
    Et si tu veux restreindre a une heure spécifique, c'est une autre clause dans le WHERE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND medicament.heure = $heure
    Et ainsi de suite pour affiner tes requêtes.


    Quelques conseils plus généraux au passage :
    - Utilises des requêtes préparées quand tes paramètres proviennent de l'extérieur comme les $_POST par exemple, ou d'une base de données dont tu ne maîtrises pas le contenu. Tu peux faire cela ave mysqli ou pdo selon ta préférence mais c'est impératif pour éviter les injections SQL qui sont une énorme faille de sécurité (un utilisateur mal intentionné pourrait voler/détruire ta base de données).
    - Pour le nommage de tes tables, un bon usage du singulier/pluriel et des noms clairs aident à la maintenabilité du projet. Dans ton cas par exemple, ta table 'patient' pourrait s’appeler 'patients', ta table 'listing_medicaments' pourrait s'appeler simplement 'medicaments'. Pour les tables de jointures, en général on utilise le nom des tables liées, dans ce cas ce serait 'patients_medicaments'. C'est totalement optionnel et en aucun cas une règle élémentaire, mais c'est une assez bonne pratique.

  12. #12
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    au niveau de l'heure avec cette requête, j'ai comme résultat "8", et en sachant que dans ma base de donnée, il n'y a qu'une seule ligne qui est à 8 heures (testé avec phpmyadmin), c'est donc juste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $heure =$bdd->query('SELECT  heure FROM patient
    LEFT JOIN medicament ON patient.id_du_patient = medicament.id_du_patient  
    LEFT JOIN listing_medicaments ON medicament.id_du_medicament = listing_medicaments.id_du_medicament
    WHERE nom = "'.$nom.'" AND listing_medicaments.denomination = "'.$denomination.'"  AND medicament.heure = "8"');
    et pourtant les croix ne fonctionnent pas . Pourtant j'utilise bien la dénomination et l'heure. Je vous pas ce qui n'est pas juste.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xnls="http://www.w3.org/1999/xhtml">
     
    <head>
     
     
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" media="screen" type="text/css" title="non style" href="menu.css" /> 
     
    </head>
     
    <?php include('menu.php'); ?>
     
     
    <?php include ('entete.php');?>
     
     
    <div id="body">
     
     <div id="content">
     
    <h2>Traitement</h2>
    <p>
    <br />
    <br/ >
      <form method="post" action="repos.php">
       <p>
           <label for="nom">Nom :</label>
     
    	  <input type="text" name="nom" id="nom" />
     
            <input type="submit" value="Valider" /> 
        <?php $nom = $_POST['nom'];?>
     
       </p>
    </form>
     
    		<?php include ('fichier.php')?>		
    <?php
    try
    {
    	// connexion à la base fonctions
    	$bdd = new PDO('mysql:host=localhost;dbname=fonction;charset=utf8', 'root', 'root');
    }
    catch(Exception $e)
    {
     
            die('Erreur : '.$e->getMessage());
    }
     
     
    $reponse = $bdd->query ('SELECT nom, medicament.id_du_medicament, jour, denomination FROM patient
    LEFT JOIN medicament ON patient.id_du_patient = medicament.id_du_patient
    LEFT JOIN listing_medicaments ON medicament.id_du_medicament = listing_medicaments.id_du_medicament
    WHERE nom = "'.$nom.'"');
     
     
    ?>
    <table border = 2px>
    	<tr>
    	<th>
    	</th>
    	<th>
    	08:00
     
    	</th>
    	<th>
    	12:00
    	</th>
    	<th>
    	20:00
    	</th>
    	<th>
    	21:00
    	</th>
    	</tr>
     
     
     
    <?php
    	$denomination = $donnees['denomination'];
     
    $heure =$bdd->query('SELECT  heure FROM patient
    LEFT JOIN medicament ON patient.id_du_patient = medicament.id_du_patient  
    LEFT JOIN listing_medicaments ON medicament.id_du_medicament = listing_medicaments.id_du_medicament
    WHERE nom = "'.$nom.'" AND listing_medicaments.denomination = "'.$denomination.'"  AND medicament.heure = "8"');  //juste
     
    while ($donnees = $reponse->fetch())
    {
     
     
     
    	$medicament=$bdd->query('SELECT nom, medicament.id_du_medicament, jour, denomination FROM patient
    LEFT JOIN medicament ON patient.id_du_patient = medicament.id_du_patient
    LEFT JOIN listing_medicaments ON medicament.id_du_medicament = listing_medicaments.id_du_medicament
    WHERE nom = '.$nom.' AND listing_medicaments.denomination = $denomination');
     
    ?>
     
    	<tr>
    	<td>
     
    	<?php echo $donnees['denomination']; ?>
    	</td>
    	<td>
     
    	</td>
    	<td>
    	<?php
     
     
    	if ($heure=="8")
    	 {echo "X";} else  {echo " ";}?>
     
     
    	</td>
    	<td>
     
    	</td>
    	<td>
    	</td>
    	</tr>
     
     
    	<?php
     
        } 
     
    $reponse->closeCursor(); 
     
    ?>
    </table>
    </div>
     
     
    <?php include ('footer.php');?>
     
    </html>

  13. #13
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je suis très étonné que personne n’ait encore suggéré d’utiliser une requête préparée. C’est pourtant un bon moyen d’éviter les problèmes de guillemets.
    https://secure.php.net/manual/fr/pdo.prepare.php

    (Edit : ah si en fait, Mrsky l’a suggéré. J’avais pas vu, désolé )
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  14. #14
    Invité
    Invité(e)
    Par défaut
    Dans ton script, $heure représente le retour de la requête ligne 84 et tu dois utiliser une des methodes fetchX() pour en récupérer le résultat.

    J'ai l'impression vu le dernier code que tu es un peu perdu, quand c'est le cas je t'invite a utiliser var_dump() sur tes variables pour voir ce qu'elles contiennent et retrouver le fil de ton script

    Quel est le résultat final que tu veux obtenir ? Un tableau par patient qui liste tout te médicaments et qui met des croix quand le patient doit le prendre ?

  15. #15
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Effectivement, je suis complètement paumé... . Oui, c'est bien un tableau par patient qui liste tout te médicaments et qui met des croix quand le patient doit le prendre.

    Si j'ai bien compris (ça m'étonnerai mais bon...) je dois faire une boucle while dans une autre boucle while, et terminer la première boucle while juste avant le champ "heure" du tableau.

    En tout cas j'ai ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xnls="http://www.w3.org/1999/xhtml">
     
    <head>
     
     
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" media="screen" type="text/css" title="non style" href="menu.css" /> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery.autocomplete.min.js"></script>
    </head>
     
    <?php include('menu.php'); ?>
     
     
    <?php include ('entete.php');?>
     
     
    <div id="body">
     
     
     <div id="content">
     
     
     
     
    <h2>Traitement</h2>
    <p>
    <br />
    <br/ >
      <form method="post" action="repos.php">
       <p>
           <label for="nom">Nom :</label>
     
    	  <input type="text" name="nom" id="nom" />
     
            <input type="submit" value="Valider" /> 
        <?php $nom = $_POST['nom'];?>
     
       </p>
    </form>
     
    <?php
    try
    {
    	// connexion à la base fonctions
    	$bdd = new PDO('mysql:host=localhost;dbname=fonction;charset=utf8', 'root', 'root');
    }
    catch(Exception $e)
    {
     
            die('Erreur : '.$e->getMessage());
    }
     
     
    $reponse = $bdd->query ('SELECT nom, medicament.id_du_medicament, jour, denomination FROM patient
    LEFT JOIN medicament ON patient.id_du_patient = medicament.id_du_patient
    LEFT JOIN listing_medicaments ON medicament.id_du_medicament = listing_medicaments.id_du_medicament
    WHERE nom = "'.$nom.'"');
    //('SELECT * FROM patient, listing_medicaments where nom = "'.$nom.'"'); 
    //('SELECT nom, medicament.id_du_medicament, jour, denomination from listing_medicaments, patient where nom = "'.$nom.'"');
     
    ?>
    <table border = "2px">
    	<tr>
    	<th>
    	</th>
    	<th>
    	08:00
     
    	</th>
    	<th>
    	12:00
    	</th>
    	<th>
    	20:00
    	</th>
    	<th>
    	21:00
    	</th>
    	</tr>
     
     
     
    <?php
     
    while ($donnees = $reponse->fetch()){	
    $heure =$bdd->query('SELECT  heure FROM patient
    LEFT JOIN medicament ON patient.id_du_patient = medicament.id_du_patient  
    LEFT JOIN listing_medicaments ON medicament.id_du_medicament = listing_medicaments.id_du_medicament
    WHERE nom = "'.$nom.'"   AND medicament.heure = "8"');  
     
     
     
    while ($donnees = $reponse->fetch())
    {
     
     
     
    	$medicament=$bdd->query('SELECT nom, medicament.id_du_medicament, jour, denomination FROM patient
    LEFT JOIN medicament ON patient.id_du_patient = medicament.id_du_patient
    LEFT JOIN listing_medicaments ON medicament.id_du_medicament = listing_medicaments.id_du_medicament
    WHERE nom = '.$nom.' AND listing_medicaments.denomination = $denomination');
     
    ?>
     
    	<tr>
    	<td>
     
    	<?php echo $donnees['denomination']; ?>
    	</td>
    	<td>
     
    	</td>
    	<td>
    	<?php
    } 
     
    	if ($donnees['heure']=="8")
    	 {echo "X";} else  {echo " ";}?>
     
     
    	</td>
    	<td>
     
    	</td>
    	<td>
    	</td>
    	</tr>
     
     
    	<?php
     
        }
     
    $reponse->closeCursor(); 
     
    ?>
    </table>
    </div>
     
     
    <?php include ('footer.php');?>
     
    </html>

  16. #16
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Il y a un truc que je ne comprends pas bien dans la structure de cette table medicaments : les colonnes heure, jour, mois et annee représentent-elles uniquement la date de la dernière prise ? Ou y a-t-il une entrée dans cette table par prise du médicament ? Dans ce dernier cas il ne suffit pas de sélectionner l’heure dans la jointure, il faut aussi vérifier que le reste de la date coïncide.

    Il serait peut-être plus simple d’avoir un seule colonne datetime et d’utiliser les fonctions SQL de manipulation de date. Par exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM medicaments
    WHERE DATEDIFF(NOW(), datetime) = 0
    Cette requête n’afficherait que les prises de médicament du jour actuel.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  17. #17
    Invité
    Invité(e)
    Par défaut
    Ok, pas a pas donc

    Tu n'as besoin que d'une seule requete pour recupere toutes les informations dont tu as besoin, on utilisera ensuite une boucle pour ranger tout ca, puis une autre pour l'affichage. J'en profite pour utiliser une requete preparee car c'est indispensable niveau securite pour traiter une variable issue d'un formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <?php /* [...] */
    $sql = "SELECT denomination, heure FROM patient
      LEFT JOIN medicament ON patient.id_du_patient = medicament.id_du_patient
      LEFT JOIN listing_medicaments ON medicament.id_du_medicament = listing_medicaments.id_du_medicament
      WHERE patient.nom = :nom";
    $query = $bdd->prepare($sql);
    $query->execute(array(":nom" => $nom));
    $prescriptions = $query->fetchAll();
    /* var_dump($prescriptions); //le retour de la base de donnees */
     
    /* On veut un tableau avec un medicament comme cle et les horaires comme valeurs */
    $horaires = array();
    foreach ($prescriptions as $prescription) {
      /* Si c'est la premiere fois que la boucle parcours un certain medicament, on affecte un tableau vide. Ca sert a eviter les notices PHP quand on voudra affecter les valeurs et c'est plus propre */
      if (!isset($horaires[$prescription["denomination"]])) {
        $horaires[$prescription["denomination"]] = array();
      }
     
      /* J'ajoute l'heure pour pouvoir generer les croix plus tard. */
      $horaires[$prescription["denomination"]][] = $prescription["heure"];
    }
     
    /* var_dump($horaires); //le tableau de donnees final */
    ?>
     
    <!-- On ouvre le tableau -->
    <table border="2px">
     
    <!-- On cree l'entete du tableau -->
      <tr>
        <th></th>
        <th>08:00</th>
        <th>12:00</th>
        <th>20:00</th>
        <th>21:00</th>
      </tr>
     
    <!-- On utilise $horaires cree plus tot pour generer le reste du tableau -->
    <?php
    foreach ($horaires as $medicament => $heures) {
      /* On utilise in_array() pour determiner si l'heure voulue concerne ce medicament */
      ?>
      <tr>
        <td><?php echo $medicament; ?></td>
        <td><?php if (in_array("8", $heures)) { echo "X"; } ?></td>
        <td><?php if (in_array("12", $heures)) { echo "X"; } ?></td>
        <td><?php if (in_array("20", $heures)) { echo "X"; } ?></td>
        <td><?php if (in_array("21", $heures)) { echo "X"; } ?></td>
      <tr>
      <?php
    }
    ?>
     
    <!-- On ferme le tableau -->
    </table>
    J'ai essaye de detailler au maximum, je t'invite a decommenter les lignes avec var_dump() pour voir ce que contienne les variables afin de mieux comprendre ce qu'il se passe. Il est possible de raccourcir ce code et d'avoir des horaires dynamiques mais chaque chose en son temps J'espere que ca ne fait pas trop d'un coup

  18. #18
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    J’ai une petite suggestion : dans la mesure où on ne joint que sur des clés étrangères, il me semble que le LEFT de LEFT JOIN n’est pas nécessaire. On pourrait utiliser à la place des jointures internes :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT denomination, heure FROM patient
      JOIN medicament ON patient.id_du_patient = medicament.id_du_patient
      JOIN listing_medicaments ON medicament.id_du_medicament = listing_medicaments.id_du_medicament
      WHERE patient.nom = :nom
    Voire même, puisque les colonnes ont les mêmes noms, des jointures naturelles :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT denomination, heure FROM patient
      NATURAL JOIN medicament
      NATURAL JOIN listing_medicaments
      WHERE patient.nom = :nom
    Ou alors il y a un piège et j’ai sauté dedans à pieds joints ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  19. #19
    Invité
    Invité(e)
    Par défaut
    Tu as totalement raison

    Il faudra juste considérer que n'avoir aucun retour peut signifier soit que le nom du patient n'existe pas, soit qu'il n'a pas de prescriptions.

  20. #20
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    je prends le temps de bien regarder à tout ça


    en tout cas merci à vous deux

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Lien entre html et css
    Par aertys dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 23/09/2016, 20h13
  2. Petite explication basique entre HTML/CSS/PHP ?
    Par jerem432 dans le forum Langage
    Réponses: 8
    Dernier message: 07/06/2013, 12h59
  3. Faire un lien entre flash et php
    Par xzéna dans le forum Flash
    Réponses: 1
    Dernier message: 12/11/2012, 11h56
  4. Lien entre un fichier php et un fichier js.
    Par argon dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/04/2009, 11h15
  5. Problème marge entre html et php
    Par dom59111 dans le forum Langage
    Réponses: 3
    Dernier message: 29/10/2007, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo