Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/07/2006, 23h42   #1
Membre à l'essai
 
Inscription : septembre 2003
Messages : 79
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 79
Points : 24
Points : 24
Par défaut [Conception] Comment faire pour bloquer une valeur pendant 24H

Bonsoir,

je souhaiterais avoir votre avis sur, comment procéder, pour bloquer une
valeur (classe)qui se trouve dans un champ d'une table pendant 24h !!

j'ai une table qui s'appelle 'classe'

id_class
nom
---------------------------------
1 --6ème
2 --5ème
3 --""
4 --""
---------------------------------

jai une table qui s'appelle 'donnée_prof':

id_donnée
classe
prof
hdebut
hfin
---------------------------------
1 -- 1--806 --8 --10

Je souhaiterais que la classe 1, dans la table 'donnée_prof' soit indisponible pendant 24h .

voici le code que j'ai sur ma page:
Code :
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
 
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "Entree") && ($classe != $class_dp)) {
 
  $insertSQL = sprintf("INSERT INTO donnée_prof (jour, classe, hdm, hds, prof, heure, hfc, hr, choix, id_etab, id_seq) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['jour'], "int"),
                       GetSQLValueString($_POST['classe'], "int"),
                       GetSQLValueString($_POST['hdm'], "double"),
                       GetSQLValueString($_POST['hds'], "double"),
                       GetSQLValueString($_POST['prof'], "int"),
                       GetSQLValueString($_POST['heure'], "double"),
                       GetSQLValueString($_POST['hfc'], "double"),
                       GetSQLValueString($_POST['hr'], "double"),
                       GetSQLValueString($_POST['choix'], "text"),
                       GetSQLValueString($_POST['id_etab'], "text"),
                       GetSQLValueString($_POST['id_seq'], "int"));
 
  mysql_select_db($database_connect, $connect);
  $Result1 = mysql_query($insertSQL, $connect) or die(mysql_error());
 
  $insertGoTo = "admin.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
 
}else if($classe = $class_dp){
echo "<script langage='javascript'>";
echo "alert('cette classe est indisponible pendant 24h')";
echo "</script>";
'$class_dp' est un <input type=text> ou la valeur de classe de donnée_prof, est récupéré et répété.


Bon, c'est un peu fouilli, mais ca marche !!!

lorsque la classe est saisi une 2eme fois , jai une boite alert qui m'indique que la classe est indisponible pendant 24h !! mais c'est tout

ce qui serait idéal, c'est que lorsque le prof revient sur la page d'ajout, cette classe là ne soit plus proposé dans la liste déroulante !!(toujours pendant 24h, puisque le prof indique l'heure de fin)

à votre avis, dois je créer une table avec des champs date-début et date-fin ? et faire une jointure sur la table donnée_prof ??

merci à tous

zut, dans ma hate ,je crois que je me suis trompé de rubrique !!

1000 Excuses au modérateur si c'est le cas !!
lolodelp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 00h21   #2
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Moi je pense que ton idée de champs date est pas mal. Il suffit après de tester le champ date pour savoir si ca fait plus de 24h ou pas.

Ou tu peux aussi utiliser un champ en y stockant un timestamp et après ce sera du calcul de durée, mais moins pratique que le champ date je pense, vu les fonctions qui sont disponibles.

Pour ta table Horaire, hmmm ouais et dans ce cas il faudrait retirer les champ heure dans la table prof pour eviter la redondance.table heure qui contiendrait un id, heure_deb,heure_fin, et l'id de la classe.et pour récuperer les infos sur le prof qui occupe la salle : jointure.

Et comme ca tu peux gérer un emploi du temps pour les salles dans ta table...

Enfin ce n'est que ma facon de voir les choses
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 10h00   #3
Membre à l'essai
 
Inscription : septembre 2003
Messages : 79
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 79
Points : 24
Points : 24
Merci pour ta réponse, je pense que je vais faire comme ça !!!

Je pensais créer une table heure comme ceci:

heure:
-------------------------------
id_h smallint (4)
datedebut date (xxxx-xx-xx)
datefin date (xxxx-xx-xx)
id_donnee smallint (4)

-------------------------------

donnée_prof:
-------------------------------
id_donnee
classe
prof
hdebut
hfin
-------------------------------

ce qui me donnerait en gros quelque chose du style :

heure (id_h, datedebut, datefin, #id_donnee)
donnée_prof (id_donnee, classe, prof, hdebut, hfin)

Pensez que cela soit une bonne solution ?

sachant que, par exemple, 1 prof selectionne une classe le lundi de 8h a 10h ,la classe sera bloqué pendant 24h, et elle sera de nouveau disponible le mardi à partir de 10h

Si je réalise ma jointure, puis-je effectuer une comparaison de date, dans ma requete ?

je vais chercher voir comment faire..

Merci pour votre réponse
lolodelp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 13h10   #4
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
si tu fais ca :
Citation:
heure (id_h, datedebut, datefin, #id_donnee)
donnée_prof (id_donnee, classe, prof, hdebut, hfin)
Tu as des redondances et franchement c'est pas le top.
Donc je te conseillerai ceci :

Citation:
heure (id_h, datedebut, datefin, #id_donnee)
donnée_prof (id_donnee, classe, prof)
Pas besoin d'avoir l'id des données si tu mets les heures dans la table données.
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 15h46   #5
Membre à l'essai
 
Inscription : septembre 2003
Messages : 79
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 79
Points : 24
Points : 24
OK, je viens de la créer, maintenant j'ai écris un script à la main,
(avant de faire une requete qui va aller chercher ses deux champs) qui me compare 2 variables .
voici ce que ca ma donné :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
$date_debut="07/07/2006";
$date_fin="08/07/2006";
 
 
$date_debut=mktime(0,0,0,substr($date_debut,3,5),substr($date_debut,0,2),substr($date_debut,-4));
$date_fin=mktime(0,0,0,substr($date_fin,3,5),substr($date_fin,0,2),substr($date_fin,-4));
 
$date = ($date_fin-$date_debut);
echo $date;
if ($date != 86400){
echo "<script langage='javascript'>";
echo "alert('cette classe est indisponible')";
echo "</script>";
}elseif($date = 86400 ){ 
echo "cette classe est à nouveau dispo";
}
?>
en fait si la variable date n'est pas égale a 86400s ca ne me donne pas la main , je pense que j'approche du but là !!!
plus qu'a créer une autre condition du genre
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
$requete = "SELECT date_debut,date_fin from heure,donnée_prof WHERE heure.id_donnee=donnée_prof.id_donnee";
 
if (!($resultat = mysql_query($requete))) {
echo "erreur requete";
exit(1);
} 
$ligne = mysql_fetch_array($resultat);
 
while($ligne) {
 
echo $ligne ["date_debut"], "<br> ", $ligne["date_fin"],"<br>", $ligne["classe"],"<br>";
 
$ligne = mysql_fetch_array($resultat);
}	
 
if (($date != 86400) && ($classe != 1)){
echo "<script langage='javascript'>";
echo "alert('cette classe est indisponible')";
echo "</script>";
}elseif(($date = 86400 ) && ($classe = 0)){ 
echo "cette classe est à nouveau dispo";
}
?>
par exemple ca pourrait peut etre marcher ,je dois pas être bien loin de la solution!!
lolodelp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h41.


 
 
 
 
Partenaires

Hébergement Web