aide formulaire avec base mysql

Rechercher

aide formulaire avec base mysql

Par hubby  -  7 reponses  -  Le 08/04/2010 09:00  -  Editer  - 

Bonjour à tous. Voilà je suis débutant (même novice) en php et dans le cadre d'un site internet pour une pharmacie je souhaiterai construire un formulaire en php dans lequel il y aurait une liste déroulante, dans laquelle se trouve les dates de garde. Pour cela j'ai un table sur mysql avec les entrée ID, 2010 (Dates en 2010), Pharmacie, adresse, cp, Tél. Je souhaiterai à la sélection de la date souhaitée dans la liste déroulante afficher sur la même page la pharmacie correspondante (ainsi que les autres infos la concernant) à la date choisie. J'ai essayer quelques scripts trouvé çà et là sur internet mais rien ne fonctionne. Jefais mes essais sur wampserver. voici deux de mes essais mais rien ne s'affiche. Je ne souhaite pas rester débutant en php, mais pour qu'il en soit ainsi votre aide ainsi que vos explications dans la résolution de ce problème m'aideront certainement à faire un pas en avant.

Merci d'avance à tous!

encore merci de votre aide!

 

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 08/04/2010 10:25  -  Haut de page  - 

Salut,

il faudrait confirmer quelque chose avant d'aller plus loin : est-ce que ta table ressemble à ceci :

+-----------+---------------+------+-----+---------+----------------+
| Field     | Type          | Null | Key | Default | Extra          |
+-----------+---------------+------+-----+---------+----------------+
| ID        | int(11)       | NO   | PRI | NULL    | auto_increment |
| 2010      | date          | NO   |     | NULL    |                |
| Pharmacie | varchar(255)  | NO   |     | NULL    |                |
| adresse   | varchar(255)  | NO   |     | NULL    |                |
| cp        | varchar(5)    | NO   |     | NULL    |                |
| Tel       | varchar(10)   | NO   |     | NULL    |                |
+-----------+---------------+------+-----+---------+----------------+

Si c'est le cas, il y a un problème assez majeur: comment feras-tu en 2011, puis en 2012 ? Tu vas ajouter une nouvelle colonne ? Ou bien créer une autre table ?

La structure de tes données est à mon avis à revoir. Il faut isoler deux choses : d'abord la liste des pharmacies d'une part, et ensuite la liste des gardes : tu pourrais donc avoir non pas une mais deux tables. Sommairement, ça pourrait ressembler à ceci :

un table pharmacie_pha avec la structure suivante :

+-------------+---------------+------+-----+---------+----------------+
| Field       | Type          | Null | Key | Default | Extra          |
+-------------+---------------+------+-----+---------+----------------+
| pha_id      | int(11)       | NO   | PRI | NULL    | auto_increment |
| pha_nom     | varchar(255)  | NO   |     | NULL    |                |
| pha_adresse | varchar(255)  | NO   |     | NULL    |                |
| pha_cp      | varchar(5)    | NO   |     | NULL    |                |
| pha_tel     | varchar(10)   | NO   |     | NULL    |                |
+-------------+---------------+------+-----+---------+----------------+

Et ensuite une table des gardes gardes_grd avec cette structure :

+-----------+---------------+------+-----+---------+----------------+
| Field     | Type          | Null | Key | Default | Extra          |
+-----------+---------------+------+-----+---------+----------------+
| grd_id    | int(11)       | NO   | PRI | NULL    | auto_increment |
| pha_id    | int(11)       | NO   | MUL | NULL    |                |
| grd_date  | date          | NO   |     | NULL    |                |
+-----------+---------------+------+-----+---------+----------------+

Note les noms des tables : elles ont un siffixe qu'on retrouve ensuite comme préfixe pour les noms de lerus colonnes respectives. Tu peux donc voir dans la table gardes_grd une colonne pha_id : c'est uen clé étrangère correspondant à la pharmacie de garde. Dans la seconde table, tu enregistres une garde en pointant sur la pharmacie correspondante. Tu n'auras de cette manière pas besoin de rép0éter plusieurs fois les détails d'une pharmacie.

Pour avoir les détails, tu devras alors effectuer une requête jointure et une clause pour isoler une année ou une date particulière. Par exemple pour trouver les pharmacies de garde le 5 avril 2010, la requête ressemblera alors à ceci :

SELECT ph.pha_nom, ph.pha_adresse, ph.pha_cp, ph.pha_tel
FROM pharmacie_pha ph
  INNER JOIN gardes_grd gd ON ph.pha_id = gd.pha_id
WHERE YEAR(gd.grd_date) = '2010-04-05';

S'il y a des éléments que tu ne comprends pas bien, n'hésite pas à poser des questions. Si tu débutes complètement, j'ai idée que certains points te semblent complètement chinois : indique lesquels et tu auras une traduction ;)

 

 

 

 

 
Par hubby  -  Le 08/04/2010 11:46  -  Haut de page  - 

Merci déjà pour ta réponse prompte!

en fait les tables que tu m'as gentiment préconisé existent déjà selon la structure que tu proposes, seul le nom des champs diffèrent quelque peu. En fait j'ai fait une bd sur bd access (openoffice), et je souhaiterai l'exploiter sur le site de la pharmacie où je travaille.

J'ai donc une table pharmacie avec comme champs: pharmacie, adresse, vill, code postal, numérotél

dans cet table pharmacie est la clé primaire

puis j'ai une table 2010, une table 2011...etc. construites de la façon suivante : Id, dates, pharmaciej'ai donc combiné la table 2010 et la table pharmacie pour obtenir toutes les pharmacie de garde en 2010, ce qu'il faudra que je refasse pour les autres années.

Sinon qu'en est-il ds scripts que j'ai proposé sont-ils corrects? ils ne renvoient pas de résultat voici la fameuse table sur laquelle je travaille:

ID 2010 PHARMACIE Adresse Ville CodePostal NuméroTéléphone 1 2010-01-03 TRAN-CHARRE 100 AVENUE DE LA DIVISION LECLERC CHATENAY-MALABRY 92290 0147023457 2 2010-01-10 SAMAAN 27 AVENUE LEON BLUM LE PLESSIS ROBINSON 92350 0146300961 3 2010-01-17 DANG VU 13 AVENUE ALBERT THOMAS CHATENAY-MALABRY 92290 0146321431 4 2010-01-17 COPEL-HURVY 12-14 RUE DE VERDUN CHATENAY-MALABRY 92290 0143506011 5 2010-01-24 LEGRAND 48-50 RUE EDMOND ABOUT LE PLESSIS ROBINSON 92350 0143500465 6 2010-01-31 BOUST 84 RUE BERNARD ISKE LE PLESSIS ROBINSON 92350 0146304551 7 2010-02-07 COPEL-HURVY 12-14 RUE DE VERDUN CHATENAY-MALABRY 92290 0143506011 8 2010-02-14 LEROUGE-AUCLAIR 16 GRAND PLACE LE PLESSIS ROBINSON 92350 0146310338 9 2010-02-21 HINGUANT 24 RUE DU MOULIN FIDELE LE PLESSIS ROBINSON 92350 0146300388 10 2010-02-28 BOUST 84 RUE BERNARD ISKE LE PLESSIS ROBINSON 92350 0146304551 11 2010-03-07 GEORGES 100 RUE JEAN LONGUET CHATENAY-MALABRY 92290 0146610470 12 2010-03-14 COVELIERS 40 RUE JEAN LONGUET CHATENAY-MALABRY 92290 0143505162 13 2010-03-21 TRAN-CHARRE 100 AVENUE DE LA DIVISION LECLERC CHATENAY-MALABRY 92290 0147023457 14 2010-03-28 BERTHELOT 16 AVENUE DE LA LIBERATION LE PLESSIS ROBINSON 92350 0146301157 15 2010-04-04 LE LIEVRE 2 RUE AUGUSTE RENOIR CHATENAY-MALABRY 92290 0146319999 16 2010-04-05 STRAUB 80 AVENUE DE LA REPUBLIQUE LE PLESSIS ROBINSON 92350 0147029823 17 2010-04-11 SAMAAN 27 AVENUE LEON BLUM LE PLESSIS ROBINSON 92350 0146300961 18 2010-04-18 DANG VU 13 AVENUE ALBERT THOMAS CHATENAY-MALABRY 92290 0146321431 19 2010-04-25 FLECK 9 AVENUE DU GENERAL DE GAULLE LE PLESSIS ROBINSON 92350 0146301306 20 2010-05-01 DI MARIA MAHIOU 6 SQUARE HENRI SELLIER CHATENAY-MALABRY 92290 0146312495 21 2010-05-02 CHAMBON 11 BIS AVENUE DU PLESSIS CHATENAY-MALABRY 92290 0146608814 22 2010-05-08 HACHEMI 430 AVENUE DE LA DIVISION LECLERC CHATENAY-MALABRY 92290 0146323377 23 2010-05-09 LEGRAND 48-50 RUE EDMOND ABOUT LE PLESSIS ROBINSON 92350 0143500465 24 2010-05-13 CHAIGNEAU 1 AVENUE DES FRERES MONTGOLFIER CHATENAY-MALABRY 92290 0146313824 25 2010-05-16 GOUABAULT 16-18 AVENUE DU BOIS CHATENAY-MALABRY 92290 0146300164 26 2010-05-23 GHILINI 23 RUE DU 24 AOUT LE PLESSIS ROBINSON 92350 0146310390 27 2010-05-24 COPEL-HURVY 12-14 RUE DE VERDUN CHATENAY-MALABRY 92290 0143506011 28 2010-05-30 LEROUGE-AUCLAIR 16 GRAND PLACE LE PLESSIS ROBINSON 92350 0146310338 29 2010-06-06 HINGUANT 24 RUE DU MOULIN FIDELE LE PLESSIS ROBINSON 92350 0146300388 30 2010-06-13 BOUST 84 RUE BERNARD ISKE LE PLESSIS ROBINSON 92350 0146304551
Mais je vais suivre ta suggestion pour la construction des tables comme cela on parlera de la même chose.J'imagine qu'il me faudra changer de moteur ds mysql pour travailler sur des tables liées: innobd je crois si je ne me trompe pas.

encore merci !

 

 

 

 
Par hubby  -  Le 08/04/2010 12:44  -  Haut de page  - 

comment faire pour que pha_id soit en mul?

 
Par Cyrano  -  Le 08/04/2010 16:24  -  Haut de page  - 

Pour la clé « MUL» en fait il faut utiliser le moteur InnoDB et non MyISAM et préciser la contrainte de clé étrangère dans la création de la table.

Ceci dit, ton code serait plus facile à lire si tu utilisais la barre d'outil de ce forum : à droite, il y a un symbole « « qui va outrir un pop-up : sélectionne le langage correspondant (ou Texte si c'est un tableau comme celui que tu as mis ou les descriptions des tables que j'ai montré plus tôt), colle ton contenu et clique sur le bouton [Insert]

Là j'ai pas trop le temps de regarder et surtout de réaligner tout pour comprendre, je suis au bureau et j'ai «un peu» de boulot ;)

 
Par hubby  -  Le 08/04/2010 21:53  -  Haut de page  - 

Donc en attendant de construire une base plus flexible voici la structure de celle dont je dispose et sur laquelle je souhaiterai extraire les dates, puis les placer dans une liste déroulante et suite au choix de l'une de ces dates par l'internaute qu'il puisse avoir accès au reste des infos de la table sur la pharmacie liée à cette date:

ID 2010 PHARMACIE Adresse Ville CodePostal NuméroTéléphon

2000 = (dates des jours de gardes).

j'envisage de suivre les conseil de cyrano quand à la structure de ma bd mais comme il faut que je rentre toute les dates à la mano cela va me demander du temps, mais il est évident que pour quelquechose de plus facile à manipuler par la suite ....

En attendant si toi cyrano ou quelqu'un d'autre peut me donner un coup de main...

merci d'avance!

 

 
Par hubby  -  Le 11/04/2010 22:55  -  Haut de page  - 

Voilà , j'ai donc travaillé sur le code de mon projet ce week-end, la liste déroulante fonctionne bien (sauf que le format des dates est en anglais, si quelqu'un sait comment les afficher dans la liste déroulante en français...). l'expression "date : " s'affiche, et normalement juste après la date choisi par l'internaute et les autres infos du tableau, sauf que là après l'expression "date:" je n'ai rien du tout absoluement rien alors si vous avez une idée...

rappel des champs de la table :

[ID][1] [2010][2] [PHARMACIE][3] [Adresse][4] [Ville][5] [CodePostal][6] [NuméroTéléphon][7]

et le script:

 
Par hubby  -  Le 11/04/2010 23:04  -  Haut de page  - 

Excusez moi je viens de trouver comment utiliser les balises.

Alors je reprends:

Voilà , j'ai donc travaillé sur le code de mon projet ce week-end, la liste déroulante fonctionne bien (sauf que le format des dates est en anglais, si quelqu'un sait comment les afficher dans la liste déroulante en français...). l'expression "date : " s'affiche, et normalement juste après la date choisi par l'internaute et les autres infos du tableau, sauf que là après l'expression "date:" je n'ai rien du tout absoluement rien alors si vous avez une idée...

rappel des champs de la table :

ID 2010 PHARMACIE Adresse Ville CodePostal NuméroTéléphon

<?php
$connexion=mysql_connect('localhost','root',"") or die ("Connexion impossible.");
$db=mysql_select_db('coursphp',$connexion) or die ("Base de données non accessible.");
echo '<p>Choisissez une date de garde:</p>';
echo"<form name='form1' action=",$_SERVER['PHP_SELF']," method='POST'>";
echo '<select name="date" id="menudates">';
$resultat=mysql_query('select * from pharmacie_de_garde_2010 order by ID') or die ("Requête non executée.");
while ($ligne=mysql_fetch_array($resultat))
{
echo '<option>'.$ligne["2010"].'</option>';
}
echo '</select>';
echo '<input type="submit" value="Afficher" name="go">';
echo '</form>';
if(!isset($_POST['date'])){
   exit;
}
//Les lignes suivantes affichent le détail d'un adhérent
// si l'utilisateur en a choisi un
$date = $_POST['date'];
$resultat2 = mysql_query("Select * from pharmacie_de_garde_2010 where ID=.$date") or die ("Requête non executée.");
$ligne2 = mysql_fetch_array($resultat2);
    echo "<br>";
    echo "<br>";
    echo '<b>date : </b>' .$ligne2["2010"].''.$ligne2['PHARMACIE'].''.$ligne2['Adresse'].''.$ligne2['Ville'].''.$ligne2['CodePostal'].''.$ligne2['NuméroTéléphone'].' <br>';
mysql_close($connexion);
?>

 

si vous avez des idées...

 

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |