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 :

[Conception] Comment faire pour bloquer une valeur pendant 24H


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 97
    Points : 64
    Points
    64
    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 : 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
     
    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 !!

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    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

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    si tu fais ca :
    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 :

    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.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    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 : 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
    <?
    $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 : 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
     
    $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!!

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/11/2012, 19h28
  2. Réponses: 5
    Dernier message: 27/04/2009, 16h15
  3. Réponses: 5
    Dernier message: 07/04/2009, 19h00
  4. Réponses: 9
    Dernier message: 09/03/2007, 15h01
  5. Réponses: 1
    Dernier message: 31/10/2006, 11h15

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