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 :

datetime dans input


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2022
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2022
    Messages : 89
    Par défaut datetime dans input
    bonjour,

    Le sujet a déjà été abordé en parti mais je ne vois pas comment je peux l'adapter à mon code.
    D'un coté, j'ai un formulaire pour une réservation.
    Si je sélectionne le type de location et la ville, y'a pas de soucis, j'obtiens ben tous les résultats de ma BDD.
    Par contre, au niveau de la date, je bloque.
    En dehors que je pense que je dois faire une jointure sur ma table, il y'a cette histoire de donnée dans mon var_dump qui est différentes des données dans ma BDD
    J'aimerai faire apparaitre ttes les salles ou véhicules dispo selon si auparvant le select type est bien selectionné c'est a dire toutes celle qui ne sont pas enregistrées dans la base.
    Je pense que je fais faire 2 conditions, un pour les vehicules et un pour les salles. ( comme j'ai fais avant pour les types et les villes)



    Nom : table_locations.png
Affichages : 82
Taille : 180,5 Ko

    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     <fieldset>
                        <legend>Jour et heure de réservation</legend>
                        <div class="">
                            <label for="start_datetime" class="">Début</label>
                            <input type="datetime-local" class="" name="start_datetime" id="start_datetime">
                        </div>
                        <div class="">
                            <label for="end_datetime" class="">Fin</label>
                            <input type="datetime-local" class="" name="end_datetime" id="end_datetime">
                        </div>
     
                    </fieldset>
    page save.php ( je sais, j'aurai du l'appelé affichage et non save )
    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
     
     if (isset($_POST['start_datetime'])) {   // si on a reçu une valeur du formulaire
            $date = date('Y-m-d', strtotime(str_replace('T', '', $_POST['start_datetime'])));
            if ($date !== '2022-12-31 14:50') {
                $heure = $conn->query("SELECT ");
                while ($ligne = $heure->fetch(PDO::FETCH_ASSOC)) {
     
                    echo "nom:" . $ligne['Id_salle'] . '<br>';
                    echo "nom:" . $ligne['Id_voiture'] . '<br>';
                    echo "lieu:" . $ligne['lieu']  . '<br>';
                    echo '<button>réserver</button><br><br>';
                }
            } else {
                echo 'error';
            }
        }
    Je n'arrive pas a comprendre .

    Merci par avance de l'aide apportée

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    Avec ceci $date = date('Y-m-d', strtotime(str_replace('T', '', $_POST['start_datetime']))); vous supprimez le temps (les heures et minutes) de la date, alors qu'une durée de location pourrait bien être dans le même jour mais seulement entre deux heures différentes, et donc vous devriez garder le temps $date=date('Y-m-d H:i:s', strtotime($_POST["start_datetime"]));.

    Pour faciliter un peu la tâche, essayez d'exécuter cette requête sous phpmyadmin pour mieux comprendre ce qui se passe.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    set @lieu=1;
    set @dateDebut="2023-01-17 13:00:00";
    set @dateFin="2023-01-18 13:00:00";
     
    select nom as 'Nom Salle',nom_lieu as 'Nom lieu'
    from salles s 
    inner join lieux l on l.id_lieu=s.id_lieu
    left join location loc on (s.idSalle=loc.idSalle ) 
    where s.id_lieu=@lieu
    and (
    	(DateDebut is not null and (DateDebut > @dateFin or DateFin < @dateDebut))
    	or DateDebut is null and DateFin is null
    )
    group by s.idSalle

    Ceci devrait vous afficher toutes les salles non louées (n'existent pas dans la table location) ou bien déjà louées (existent dans location) mais avec une période qui ne se croise pas avec la @dateDebut et la @dateFin.

    Les 3 premieres variables sont là juste pour simuler les valeurs, elles seront remplacés par les valeurs PHP lorsque vous exécutez une requête via le formulaire.

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2022
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2022
    Messages : 89
    Par défaut
    Effectivement j'ai supprimé les heures, grosse erreur de ma part.

    Quant aux variables en dur pour tester , pas de soucis, je les comprends.

    Je ne comprends pas la requête , je veux bien la tester dans SQL de phpMyadmin

    Je comprend que la fin quand tu dis que la date de début de la BDD est supérieur a la date fin de l'utilisateur et que la dateFin en BDD est inférieur à la date de début de l'utilisateur

    Ca fait longtemps que je n'ai pas manipulé des données dans différentes tables

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    Qu'est ce que vous ne comprenez pas dans la requête ?

    Le mot clé left join permet de joindre la table "location" pour récupérer les salles louées et aussi celles qui ne le sont pas (n'existent pas dans location).

    Si vous mettez inner join ceci vous renverra seulement les salles qui existent dans "location".

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2022
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2022
    Messages : 89
    Par défaut
    Je veux faire afficher toutes les salles et les voitures disponibles à l'heure demandé qui ne sont pas dans la table locations .( selon ma logique) car la table location, ce sont toutes les locations effectuées qui apparaissent dans cette table

    Ce n'est pas les commandes que je comprends pas mais les noms des tables.
    Tu parle de nom de salle mais l'agent ne choisis dans le formulaire que le lieu, le type qu'il désire et la date .

    pourquoi des s a la fin de certains valeurs?

    lieu 1 après inner a quoi il correspond? à moins que ca sois un l pour location?
    et left join avec location loc, il sors d'ou?
    idem le s.id_lieu

    le id_lieu oui, c'est l'id de mon lieu

    Group by, j'avoue ne jamais l'avoir utilisé auparavant.. apparemment c'est pour éviter les doublons
    Moi j utilisais distinct pour ne pas avoir les doublons
    Je crois comprendre la différence entre les 2 , distinct élimine les doublons dès le départ, quand a group by, c'est a la fin de la requête

    Vous éliminez également mon T de str_replace?
    Je l'avais mis car dans mon var_dump , j'ai un T et que j'ai pas dans ma base de données au niveau des heures

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 617
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par gabinou7 Voir le message
    Je veux faire afficher toutes les salles et les voitures disponibles à l'heure demandé qui ne sont pas dans la table locations .( selon ma logique) car la table location, ce sont toutes les locations effectuées qui apparaissent dans cette table
    Il me semble sage d'attendre d'avoir finalisé le modèle tabulaire (autre sujet en cours dans le forum modélisation/schéma) avant de s'attaquer aux requêtes
    Quoi qu'il en soit, pour vérifier qu'il n'existe pas de réservation pour la période envisagée, il faut faire un test de chevauchement

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * 
    from LOCATION as LOC
    where LOC.date_deb_location =< date_fin_envisagee
      and LOC.date_fin_location >= date_deb_envisagee


    Citation Envoyé par gabinou7 Voir le message
    Group by, j'avoue ne jamais l'avoir utilisé auparavant.. apparemment c'est pour éviter les doublons
    Moi j utilisais distinct pour ne pas avoir les doublons
    Je crois comprendre la différence entre les 2 , distinct élimine les doublons dès le départ, quand a group by, c'est a la fin de la requête
    DISTINCT sert à éliminer les doublons, GROUP BY sert à effectuer des regroupements pour calculer des agrégats tels que des sommes, moyennes, mini, maxi... et HAVING permet d'appliquer une restriction sur le résultat de ces calculs d'agrégats

Discussions similaires

  1. [4.x] Afficher input datetime dans Twig
    Par dubitoph dans le forum Symfony
    Réponses: 8
    Dernier message: 02/12/2018, 16h09
  2. Affichage champ datetime dans input type datetime-local
    Par ParisElliot dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/04/2017, 16h08
  3. [Utile]Rajout automatique dans input et verif date
    Par matpal dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/11/2004, 16h36
  4. utilisation de "LIKE" avec un type datetime dans r
    Par ericmart dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/11/2003, 14h58
  5. Réponses: 3
    Dernier message: 23/09/2003, 09h12

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