gestion absences/presences en php

Eléphant du PHP | 150 Messages

30 mars 2011, 10:08

Bonjour,
J'ai un petit problème :
Je suis étudiant en dut Réseau et télécommunication et dans le cadre de mon stage de 2ème année je dois réaliser un site qui gère les absences et présences avec une base de données mais je ne sais pas du tout comment commencer.
J'aimerais que vous me donniez des suggestions.
Merci d'avance.
Tony
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 mars 2011, 13:05

Bonjour,

Commence d'abord par concevoir et créer la base de données. Aide-toi en utilisant des logiciels de conception comme : Avec MySQL Workbench tu peux construire le schéma de la base de données et en exporter le code SQL sous MySQL de WampServer en utilisant l'interface PHPMyAdmin.

Dans ton cas tu ne précise pas de quelle type de gestion d'absences/présences il s'agit. Mais je vais te donner une ébauche de gestion des absences/présences d'élèves pour une séance de cours par exemple:

identification du temps de présence à contrôler pour une séance de cours:
  • * nom de la séance
    * la date de la séance
    * horaire (tranches horaires) ex: 8:00/12:00, 14:00/18:00 ou 8:00/10:00, 10:00/12:00, ...
identification des élèves participant à cette séance de cours :
  • * nom élève
Le croisement entre l'horaire de la séance de cours et la liste des élèves donne naissance aux informations d'assiduité relevées pour les élèves à savoir : présence ou absence.
voici donc les information identifiant une assiduité:
  • * nom élève
    * nom séance
    * assiduité qui peut être soit : présent ou absent
Donc on dispose pour ce système de 3 supports d'information distincts : la séance, les élèves et le relevé d'assiduité. Donc 3 tables dont 2 principales : les tables "séance" et "élève" et la troisième table "assiduité" qui est issue de l'association des 2 premières tables, constitue une relation entre séance et élève.
La relation entre séance et assiduité est le nom de la séance (on peut utiliser des codes identificateurs abrégés au lieu des noms texte long)
La relation entre élève et assiduité est le nom de l'élève (on peut utiliser des codes identificateurs abrégés au lieu des noms texte long)

Voila. Selon cette conception et conformément aux normes de modélisations des bases de données, on se doit de construire un modèle relationnel correctement formé, qui ressemble à celui-ci:
  • Table Seance (idSeance texte(20) (clé primaire), nom texte(255), date date/heure, idProf texte(20), ...)
    Table Eleve (idEleve texte(20)(clé primaire), nom texte(45), prenom texte(45), idGroupe texte(20), ...)
    Table Assiduite (idSeance texte(20)(clé étrangère de Seance.idSeance), idEleve texte(20)(clé étrangère de Eleve.idEleve), present booleen (vrai ou faux) par défaut faux) (clé primaire = idSeance + idEleve)
Voici un jeu d'essai qui valide la structure de données au sein de ce système relationnel:
Les séances:
idSeance -------- nom ------------------ date --------------- idProf
-------------------------------------------------------------------------------
PHP-NIV-1 ------- PHP Niveau 1 ------- 30-03-2011 ------- M. LEPROF
PHP-NIV-2 ------- PHP Niveau 2 ------- 18-04-2011 ------- Mme LAPROF

Les élèves (par exemple d'un groupe nommé "BTS-INF-A1"):
idEleve --------------- nom -------------- prenom ----- idGroupe
---------------------------------------------------------------------------
BTS-INF-A1-01 ------- LABELLE --------- Aline ------- BTS-INF-A1
BTS-INF-A1-02 ------- BONHOMME ----- Olivier ----- BTS-INF-A1
BTS-INF-A1-03 ------- JAMAISLA-------- Stéphane --- BTS-INF-A1
...

L'assuiduité des élèves du groupe "BTS-INF-A1" relevée pendant le cours "PHP-NIV-1":
idSeance -------- idEleve ---------------- present
--------------------------------------------------------
PHP-NIV-1 ------- BTS-INF-A1-01 ------- 1
PHP-NIV-1 ------- BTS-INF-A1-02 ------- 1
PHP-NIV-1 ------- BTS-INF-A1-03 ------- 0 (=> absent)
...

Voici la requête SQL qui vérifie la cohérence du modèle en listant les élèves absents par groupe et séances dans le temps:
SELECT e.idGroup, e.idEleve, e.nom, e.prenom, s.date, s.idSeance
FROM eleve e JOIN assiduite a ON e.idEleve = a.idEleve JOIN seance s ON s.idSeance = a.idSeance
WHERE a.present = 0
ORDER BY e.idGroup, e.nom, e.prenom, s.date, s.idSeance
Ce qui donne le résultat suivant:
idGroupe ------- idEleve ----------- nom ---------- prenom ------ date ---------- idSeance
------------------------------------------------------------------------------------------------------
BTS-INF-A1---- BTS-INF-A1-03 ---JAMAISLA-----Stéphane -----30-03-2011--- PHP-NIV-1
...
... (les autres absents)
...


Voila. J'espère que cela aidera.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

31 mars 2011, 14:58

Merci beaucoup.
Cela m'aide beaucoup comprendre mieux comment cela marche car j'ai déjà fait des base de donné en cours et on les reliait avec du php mais la je voyais vraiment pas comment commencer.
Ce que tu as décris ressemble à mon projet :

j'ai commencer à faire une esquisse en html de ce que cela va donner sur le site pour m'aider.
<html>
	<head>
		<title> Absence/présence élèves </title>
		<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
		 <link rel="stylesheet" href="style.css">
					
		<table BORDER=1 BGCOLOR="#CCCCCC">
		
			<tr>
			<td>Nom - Prenom</td><td>8h00 - 10h00</td><td>10h00 - 12h00</td><td>13h30 - 15h30</td><td>15h30 - 17h30</td>
			</tr>
			<tr>
				<td>
					
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" class="r1">absent(e)</option>
				</td>
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
			</tr>
			
			<tr>
				<td>
					
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
			</tr>
			<tr>
				<td>
					
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
				</td>
					<td><select name="abs_prs" >
					<option  value="present(e)" >présent(e)</option>
					<option  STYLE='color:red' id='select1' value="absent(e)"  title="1" >absent(e)</option>
				</td>
			</tr>
			
			<tr>
				<td>
				Formateur
				</td>
				<td>
					Formateur : <br/>
					<select name="Formateur" >
					<option  value="null" >choix ...</option>
					<option  id='select1' value="Mme Anneau"  title="1" >Mme Anneau</option>
					<option  id='select1' value="Mme Chambers"  title="2" >Mme Chambers</option>
					<option  id='select1' value="Mr Deal"  title="3" >Mr Deal</option>
					<option  id='select1' value="Mr Marion"  title="4" >Mr Marion</option>
					<option  id='select1' value="Mme Roux"  title="5" >Mme Roux</option>
					<option  id='select1' value="Mme Sukhvinder"  title="6" >Mme Sukhvinder</option>
					<option  id='select1' value="Mr Valema"  title="7" >Mr Valema</option>					
					<option  id='select1' value="Mme Viard"  title="8" >Mme Viard</option>
					<option  id='select1' value="Mr Zahraoui"  title="9" >Mr Zahraoui</option>
				</td>
				<td>
					Formateur : <br/>
					<select name="Formateur" >
					<option  value="null" >choix ...</option>
					<option  id='select1' value="Mme Anneau"  title="1" >Mme Anneau</option>
					<option  id='select1' value="Mme Chambers"  title="2" >Mme Chambers</option>
					<option  id='select1' value="Mr Deal"  title="3" >Mr Deal</option>
					<option  id='select1' value="Mr Marion"  title="4" >Mr Marion</option>
					<option  id='select1' value="Mme Roux"  title="5" >Mme Roux</option>
					<option  id='select1' value="Mme Sukhvinder"  title="6" >Mme Sukhvinder</option>
					<option  id='select1' value="Mr Valema"  title="7" >Mr Valema</option>					
					<option  id='select1' value="Mme Viard"  title="8" >Mme Viard</option>
					<option  id='select1' value="Mr Zahraoui"  title="9" >Mr Zahraoui</option>
				</td>
				<td>
					Formateur : <br/>
					<select name="Formateur" >
					<option  value="null" >choix ...</option>
					<option  id='select1' value="Mme Anneau"  title="1" >Mme Anneau</option>
					<option  id='select1' value="Mme Chambers"  title="2" >Mme Chambers</option>
					<option  id='select1' value="Mr Deal"  title="3" >Mr Deal</option>
					<option  id='select1' value="Mr Marion"  title="4" >Mr Marion</option>
					<option  id='select1' value="Mme Roux"  title="5" >Mme Roux</option>
					<option  id='select1' value="Mme Sukhvinder"  title="6" >Mme Sukhvinder</option>
					<option  id='select1' value="Mr Valema"  title="7" >Mr Valema</option>					
					<option  id='select1' value="Mme Viard"  title="8" >Mme Viard</option>
					<option  id='select1' value="Mr Zahraoui"  title="9" >Mr Zahraoui</option>
				</td>
				<td>
					Formateur : <br/>
					<select name="Formateur" >
					<option  value="null" >choix ...</option>
					<option  id='select1' value="Mme Anneau"  title="1" >Mme Anneau</option>
					<option  id='select1' value="Mme Chambers"  title="2" >Mme Chambers</option>
					<option  id='select1' value="Mr Deal"  title="3" >Mr Deal</option>
					<option  id='select1' value="Mr Marion"  title="4" >Mr Marion</option>
					<option  id='select1' value="Mme Roux"  title="5" >Mme Roux</option>
					<option  id='select1' value="Mme Sukhvinder"  title="6" >Mme Sukhvinder</option>
					<option  id='select1' value="Mr Valema"  title="7" >Mr Valema</option>					
					<option  id='select1' value="Mme Viard"  title="8" >Mme Viard</option>
					<option  id='select1' value="Mr Zahraoui"  title="9" >Mr Zahraoui</option>
				</td>
			</tr>
			<tr>
			<td>
				Matière
				</td>
				<td>
					Matière : <br/>
					<select name="Matière" >
					<option  value="null2" >choix ...</option>
					<option  id='select1' value="Anglais"  title="1" >Anglais</option>
					<option  id='select1' value="Communication"  title="2" >Communication</option>
					<option  id='select1' value="Culture"  title="3" >Culture</option>
					<option  id='select1' value="Droit"  title="4" >Droit</option>
					<option  id='select1' value="Economie générale"  title="5" >Economie générale</option>
					<option  id='select1' value="Gestion"  title="6" >Gestion</option>
					<option  id='select1' value="Informatique"  title="7" >Informatique</option>
					<option  id='select1' value="Management"  title="8" >Management</option>
					<option  id='select1' value="Management des entreprises"  title="9" >Management des entreprises </option>
					<option  id='select1' value="Marketing"  title="10" >Marketing</option>		
				</td>
				<td>
					Matière : <br/>
					<select name="Matière" >
					<option  value="null2" >choix ...</option>
					<option  id='select1' value="Anglais"  title="1" >Anglais</option>
					<option  id='select1' value="Communication"  title="2" >Communication</option>
					<option  id='select1' value="Culture"  title="3" >Culture</option>
					<option  id='select1' value="Droit"  title="4" >Droit</option>
					<option  id='select1' value="Economie générale"  title="5" >Economie générale</option>
					<option  id='select1' value="Gestion"  title="6" >Gestion</option>
					<option  id='select1' value="Informatique"  title="7" >Informatique</option>
					<option  id='select1' value="Management"  title="8" >Management</option>
					<option  id='select1' value="Management des entreprises"  title="9" >Management des entreprises </option>
					<option  id='select1' value="Marketing"  title="10" >Marketing</option>		
				</td>
				<td>
					Matière : <br/>
					<select name="Matière" >
					<option  value="null2" >choix ...</option>
					<option  id='select1' value="Anglais"  title="1" >Anglais</option>
					<option  id='select1' value="Communication"  title="2" >Communication</option>
					<option  id='select1' value="Culture"  title="3" >Culture</option>
					<option  id='select1' value="Droit"  title="4" >Droit</option>
					<option  id='select1' value="Economie générale"  title="5" >Economie générale</option>
					<option  id='select1' value="Gestion"  title="6" >Gestion</option>
					<option  id='select1' value="Informatique"  title="7" >Informatique</option>
					<option  id='select1' value="Management"  title="8" >Management</option>
					<option  id='select1' value="Management des entreprises"  title="9" >Management des entreprises </option>
					<option  id='select1' value="Marketing"  title="10" >Marketing</option>		
				</td>
				<td>
					Matière : <br/>
					<select name="Matière" >
					<option  value="null2" >choix ...</option>
					<option  id='select1' value="Anglais"  title="1" >Anglais</option>
					<option  id='select1' value="Communication"  title="2" >Communication</option>
					<option  id='select1' value="Culture"  title="3" >Culture</option>
					<option  id='select1' value="Droit"  title="4" >Droit</option>
					<option  id='select1' value="Economie générale"  title="5" >Economie générale</option>
					<option  id='select1' value="Gestion"  title="6" >Gestion</option>
					<option  id='select1' value="Informatique"  title="7" >Informatique</option>
					<option  id='select1' value="Management"  title="8" >Management</option>
					<option  id='select1' value="Management des entreprises"  title="9" >Management des entreprises </option>
					<option  id='select1' value="Marketing"  title="10" >Marketing</option>	
				</td>
				
				
			</tr>
		</table>

	</body>
</html>

Sinon est ce que tu pense que c'est possible de demander une personne et que cela affiche le nombre d'heure de présence dans l'établissement et le nombre d'heure d'absences?
Et aussi mon tuteur m'a demander de prendre en compte l'année courante :
exemple : un élève de BTS AG de 1ère année cette année devra être en BTS AG de 2ème année l'an prochain.
C'est possible ?
Merci d'avance.
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

31 mars 2011, 22:03

Sinon est ce que tu pense que c'est possible de demander une personne et que cela affiche le nombre d'heure de présence dans l'établissement et le nombre d'heure d'absences?
Et aussi mon tuteur m'a demander de prendre en compte l'année courante :
exemple : un élève de BTS AG de 1ère année cette année devra être en BTS AG de 2ème année l'an prochain.
C'est possible ?
Merci d'avance.
Pour calculer le nombre de présences et d'absences d'un élève il suffit de compter dans la table "assiduité" et pour prendre en compte l'année de formation il suffit de se baser sur la date de la séance dont on contrôle l'assiduité. Voici les 2 requêtes qui répondent à ce traitement:
###############################################
# Nombre de présences des élèves pour l'année en cours
###############################################
SELECT e.idEleve, e.nom,  e.prenom, COUNT(a.present) as nbre_presences
FROM eleve e JOIN assiduite a ON e.idEleve = a.idEleve JOIN seance s ON s.idSeance = a.idSeance
WHERE a.present = 1 AND YEAR(s.date) = YEAR(Now())
GROUP BY e.idEleve, e.nom, e.prenom
###############################################
# Nombre d'absences des élèves pour l'année en cours
###############################################
SELECT e.idEleve, e.nom,  e.prenom, COUNT(a.present) as nbre_absences
FROM eleve e JOIN assiduite a ON e.idEleve = a.idEleve JOIN seance s ON s.idSeance = a.idSeance
WHERE a.present = 0 AND YEAR(s.date) = YEAR(Now())
GROUP BY e.idEleve, e.nom, e.prenom
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

01 avr. 2011, 11:14

encore merci.
Mais pour l'année courante c'était une question à part.
est ce que un étudiant qui est en BTS AG 1ère année peut passer automatiquement en 2éme année l'an prochain sans toucher la base de donnée?
Tony
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Eléphant du PHP | 150 Messages

01 avr. 2011, 11:41

et dans ta table Assiduite il manque pas un "idAssiduite" ? et c'est pas plutôt "RefSeance" à la place de "idSeance" ? et comment tu fais pour définir "idSeance + idEleve" en clé primaire?
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

01 avr. 2011, 12:16

Bonjour,

Bon, le modèle que je t'ai proposé n'est qu'un exemple très simplifié et non complet, il faut donc le reconstruire à tête reposée. En revanche il présente une vue globale sur l'approche conceptuelle d'un tel cas.

Pour répondre à tes questions, voyons la structure de la table "assiduite" qui peut être comme ça en SQL:
--
-- Structure de la table `assiduite`
--

CREATE TABLE IF NOT EXISTS `assiduite` (
  `idSeance` int(11) NOT NULL,
  `idEleve` int(11) NOT NULL,
  `present` tinyint(1) NOT NULL DEFAULT '0',
  UNIQUE KEY `idAssiduite` (`idSeance`,`idEleve`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


L'id Séance identifie la séance et l'id Eleve identifie l'élève, elles sont tous les deux des clés étrangères.
Pour ce qui est du nom "idSeance" ou "refSeance" tu peux l'appeler comme tu veux, le principal est de savoir que le champ "idSeance" dans la table "assiduite" n'est que le sosie typique qui joue le rôle de clé étrangère (jointure) qui fait le lien dans la table Séance avec la clé primaire "idSeance". Et de même pour le champ idEleve.

En ce qui concerne la clé primaire de la table "assiduite", elle n'en a pas car elle n'en a pas besoin puisqu'elle n'est pas référencée relationnellement dans d'autres tables qui ont besoin de ses données, son simple rôle est d'associer une séance à un élève pour comptabiliser ses présences et absences dans le temps, c'est elle donc qui fait référence aux tables séance et élève.

Dans le modèle conceptuel: l'assiduité est une association et l'élève et la séance sont des entités. Car les informations d'assiduité ne peuvent pas exister sans l'association d'un élève et d'une séance de cours. Contrairement, les informations de la séance et de l'élève existent sans l'existence de l'assiduité.

L'association "assiduite" est donc une table qui enregistre les couples de références d'une séances et d'un élève et il n y a aucune table dans le modèle qui a besoin de référencer la table "assiduite". Donc elle n'a pas de clé primaire ou d'identifiant relationnel comme les tables/entités.

Mais, pour que les couples (idSeance, idEleve) soient uniques pour ne pas risquer d'enregistrer des doublons d'état de présence d'un élève pour une même séance, on a besoin de placer un index unique sur ces 2 champs. Ce qui est réalisé par l'instruction : UNIQUE KEY `idAssiduite` (`idSeance`,`idEleve`)

Et c'est ça la différence entre une clé primaire (jouant un double rôle relationnel et d'unicité d'index) et un index unique (jouant simplement un rôle d'unicité d'index)

Je rappelle aussi qu'un index joue un rôle d'accès rapide aux enregistrements en cas de recherche.
Et qu'une clé primaire/clé étrangère joue le rôle de jointure relationnelle entre tables
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

01 avr. 2011, 13:45

Bonjour,

Bon, le modèle que je t'ai proposé n'est qu'un exemple très simplifié et non complet, il faut donc le reconstruire à tête reposée. En revanche il présente une vue globale sur l'approche conceptuelle d'un tel cas.

Pour répondre à tes questions, voyons la structure de la table "assiduite" qui peut être comme ça en SQL:
--
-- Structure de la table `assiduite`
--

CREATE TABLE IF NOT EXISTS `assiduite` (
  `idSeance` int(11) NOT NULL,
  `idEleve` int(11) NOT NULL,
  `present` tinyint(1) NOT NULL DEFAULT '0',
  UNIQUE KEY `idAssiduite` (`idSeance`,`idEleve`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


L'id Séance identifie la séance et l'id Eleve identifie l'élève, elles sont tous les deux des clés étrangères.
Pour ce qui est du nom "idSeance" ou "refSeance" tu peux l'appeler comme tu veux, le principal est de savoir que le champ "idSeance" dans la table "assiduite" n'est que le sosie typique qui joue le rôle de clé étrangère (jointure) qui fait le lien dans la table Séance avec la clé primaire "idSeance". Et de même pour le champ idEleve.

En ce qui concerne la clé primaire de la table "assiduite", elle n'en a pas car elle n'en a pas besoin puisqu'elle n'est pas référencée relationnellement dans d'autres tables qui ont besoin de ses données, son simple rôle est d'associer une séance à un élève pour comptabiliser ses présences et absences dans le temps, c'est elle donc qui fait référence aux tables séance et élève.

Dans le modèle conceptuel: l'assiduité est une association et l'élève et la séance sont des entités. Car les informations d'assiduité ne peuvent pas exister sans l'association d'un élève et d'une séance de cours. Contrairement, les informations de la séance et de l'élève existent sans l'existence de l'assiduité.

L'association "assiduite" est donc une table qui enregistre les couples de références d'une séances et d'un élève et il n y a aucune table dans le modèle qui a besoin de référencer la table "assiduite". Donc elle n'a pas de clé primaire ou d'identifiant relationnel comme les tables/entités.

Mais, pour que les couples (idSeance, idEleve) soient uniques pour ne pas risquer d'enregistrer des doublons d'état de présence d'un élève pour une même séance, on a besoin de placer un index unique sur ces 2 champs. Ce qui est réalisé par l'instruction : UNIQUE KEY `idAssiduite` (`idSeance`,`idEleve`)

Et c'est ça la différence entre une clé primaire (jouant un double rôle relationnel et d'unicité d'index) et un index unique (jouant simplement un rôle d'unicité d'index)

Je rappelle aussi qu'un index joue un rôle d'accès rapide aux enregistrements en cas de recherche.
Et qu'une clé primaire/clé étrangère joue le rôle de jointure relationnelle entre tables
ok je comprend mieux.Je peux bien mettre mon champs présent à "1" ?
Car je veux que par défaut quand on veut faire un enregistrement des absences si on ne désigne aucun absent l'élève soit présent.

Sinon je n'est pas compris à quoi sert le "tinyint" c'est pour dire que c'est un petit entier? et aussi la dernière ligne "ENGINE=InnoDB DEFAULT CHARSET=latin1" : à quoi sert elle? Parce que moi quand je code je met rien à la fin :
CREATE TABLE ELEVES(
IdEleve SERIAL NOT NULL UNIQUE PRIMARY KEY ,
Nom VARCHAR( 20 ) NOT NULL ,
Prenom VARCHAR( 20 ) NOT NULL ,
IdClasse VARCHAR( 20 )
);
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

01 avr. 2011, 17:38

Sinon je n'est pas compris à quoi sert le "tinyint" c'est pour dire que c'est un petit entier?
Oui c'est ça, un entier court.
et aussi la dernière ligne "ENGINE=InnoDB DEFAULT CHARSET=latin1" : à quoi sert elle? Parce que moi quand je code je met rien à la fin
ce sont des directives pour MySQL.
ENGINE=InnoDB : permet de définir la table avec le moteur indexé utilisant la méthode "innoDB" qui supporte le modèle relationnel comme entre autres la déclaration des clé étrangères et de leur actions de modification et suppression en cascade. L'ancienne méthode indexée non relationnelle est "MyISAM"
Mais ne t'inquiète pas, sous les récentes versions de MySQL le mode "innoDB" est fixé par défaut sur le serveur MySQL, donc même si on ne précise pas cette directive, la table sera innoDB.

DEFAULT CHARSET=latin1 : permet de définir le codage de caractère par défaut. Ici c'est latin1 mais tu peux mettre d'autres formats d'encodage comme : utf8_general_ci.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

04 avr. 2011, 09:35

DEFAULT CHARSET=latin1 : permet de définir le codage de caractère par défaut. Ici c'est latin1 mais tu peux mettre d'autres formats d'encodage comme : utf8_general_ci.
mais quand tu crée une base il te demande le format d'encodage donc on va pas le redéfinir à chaque fois !?
Et d'ailleurs il faut prendre quel langage ?
et pour mon champs présent je peux bien le mettre à 1 par défaut?
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

04 avr. 2011, 10:21

mais quand tu crée une base il te demande le format d'encodage donc on va pas le redéfinir à chaque fois !?
Et d'ailleurs il faut prendre quel langage ?
utf8_general_ci, mais tu n'es pas obligé de mettre ces directives à chaque create.
et pour mon champs présent je peux bien le mettre à 1 par défaut?
Oui si tu veux.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

04 avr. 2011, 10:30

mais quand tu crée une base il te demande le format d'encodage donc on va pas le redéfinir à chaque fois !?
Et d'ailleurs il faut prendre quel langage ?
utf8_general_ci, mais tu n'es pas obligé de mettre ces directives à chaque create.
moi j'ai pris "latin1_swedish_ci" tu pense qu'il faut que je change ? ça marchera quand même avec mon site?
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

04 avr. 2011, 23:19

Je t'invite à lire ce sujet intéressant sur l'encodage de caractères

Bonne lecture :wink:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 150 Messages

05 avr. 2011, 09:37

Je t'invite à lire ce sujet intéressant sur l'encodage de caractères

Bonne lecture :wink:
Merci pour ce cours très instructif!! =D>
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9:

Eléphant du PHP | 150 Messages

13 avr. 2011, 08:45

bonjour, j'ai un autre problème : je n'arrive pas à avoir la liste de mes élèves avec cette requête :
 <?php
function ListeEleves($connex) 
{
   $sql="SELECT* FROM ELEVES;";
   $resu=pg_exec($connex,$sql); 				
  return $resu;
} 
?>
ça m'affiche :
		
 <html>

	<head>
		<title> Eleves : liste </title>
		<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
	</head>



	<body>

		<center>
			<h1> Liste des Eleves </h1>
			<Table Border=2 bgcolor=yellow>
				<tr>
					<td bgcolor=white> Liste des Eleves </td>
				</tr>
							</table>

		</center>
	</body>
</html>
mais il n'y a pas d'élèves alors que j'en est rentrer dans la base.
quel est le problème?
Tu veux mourir? OK!! Mais pas dans ma voiture, alors attache ta ceinture !! :pouce:
Tony :boire9: