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 :

Calendrier de réservation sans login. Pb Ajax & Pb BDD


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 56
    Points : 24
    Points
    24
    Par défaut Calendrier de réservation sans login. Pb Ajax & Pb BDD
    Voilà j'ai fait un calendrier de réservation.
    J'ai deux problème.

    Le premier :
    - Au clic sur la date, je charge une page en ajax avec la méthode .load() je voulais faire une vérification en javascript or load() empêche le chargement de script, j'ai éssayer de contourner le problème avec .getScript() :echec, j'ai essayer avec .get() le script se charge mais ne s'éxecute pas. Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      $('td').on('click', function() {
          var value = $('.daytitle', this).text(); // On récupère la date de la cellule
        // on charge le formulaire au click sur le td, on le charge dans la div du tableau
          $('#reservation').load('../views/formulaireajax.php', function() {
            $('.reservation #textcontent').text('Vous avez choisi le ' + value); // Une fois le formulaire chargé, on remplace le contenu de textcontent
              $.get(
                'validator-ajax.js',
                'false',
                "script"
              ).done(function(){});
     
          });
      });
    Deuxième problème beaucoup plus problèmatique, alors voilà j'ai pas coder en orienté objet, surement par flemme parce que c'est un petit projet j'en voyait pas l'utilité et ça me forcerait a refaire tout ou une grosse partie de mon code, or je crois que ça à fini par me bloquer. Mes réservations s'enregistre bien dans ma base de données le code est tout con, or j'aimerais empêcher une réservation de se faire le même jour à la même heure (oui oui c'est tout bête mais je beug). J'ai deux input
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                    <li>
                        <label for="ajax-time">Heure : </label>
                        <input type="time" name="heure" data-required data-min="4" data-name="heure" data-type="positiveInteger">
                    </li>
                    <li>
                        <label for="ajax-date">Date :</label>
                        <input type="date" name="date" data-required data-min="8" data-name="date" data-type="positiveInteger">
                    </li>
    Donc ma requête sql ressemble à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if(array_key_exists('submit', $_POST)){
     
        $nom =  htmlspecialchars(trim($_POST['nom']));
        $email =  htmlspecialchars(trim($_POST['email']));
        $numero =  htmlspecialchars(trim($_POST['numero']));
        $message =  htmlspecialchars(trim($_POST['message']));
        $heure =  htmlspecialchars(trim($_POST['heure']));
        $date = htmlspecialchars(trim($_POST['date']));
        $sql = "INSERT INTO reservation (email, heure, message, nom, numero, date) VALUES (?, ?, ?, ?, ?, ?)";
     
        $query = $pdo->prepare($sql);
        $query->execute([$email, $heure, $message, $nom, $numero, $date]);
     
    }
    J'ai essayer de créer une fonction pour liéer ma date avec l'heure pour empecher l'entrée en base de donnée impossible, alors je me dit qu'au final passer mes réservation en objet serait peut être la solution mais tout passer en objet seulement pour éviter un problème de doublon ??

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Ben le plus simple, c'est de définir les doublons dans ta base :

    1) mettre une clé d'unicité sur numero + date
    2) ecrire ta requete ainsi

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT IGNORE INTO reservation (email, heure, message, nom, numero, date) VALUES (?, ?, ?, ?, ?, ?)

    le IGNORE signifie : si une requête est un doublon tel que tu l'as défini grâce à ta clé d'unicité, alors... il ne fait rien, pas même un warning...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Heu.
    Est-ce qu’il ne faudrait pas contrôler qu’il n’y a pas déjà une réservation pour la même date/heure avant d’enregistrer plutôt que de faire en sorte de ne pas insérer un doublon ?
    S’il y a un contrôle bloquant le problème de la table ne se pose même pas.

    Je ne sais pas combien de temps dure une réservation ni sur quel support elle porte mais mettons qu’il s’agisse d’une salle et qu’elle dure 1 heure il ne faut pas qu’on puisse faire une réservation pour 12h00 puis une autre pour 12h05.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- Pose UNE SEULE QUESTION par discussion !
    Si tu en as plusieurs : ouvre plusieurs discussions.

    2-
    ...load() empêche le chargement de script...
    Ça, c'est TON interprétation...
    Comme tu ne montres pas quel script ne fonctionne pas, on manque de données pour répondre.

    3- "Orienté objet" ou pas, je ne vois pas le rapport...

    4-
    ...Donc ma requête sql ressemble à ça...
    Super... ZERO vérification

    5-
    ...j'aimerais empêcher une réservation de se faire le même jour à la même heure...
    Comme dit badaze, c'est un peu "léger" comme cahier des charges...
    • même jour : OK
    • même heure : 12h00 / 12h05 ? par quart d'heure ? demi heure ? heure entière ? (il faut définir le bon intervalle de temps)

    5- Tu mets 2 simples <input>.
    Ne serait-ce que visuellement : on ne peut pas savoir quels jours ni quels horaires sont disponibles.

    Pour bien faire :
    • on affiche un calendrier (mois/jours)
      - les jours "indisponibles" (hors jours ouvrés,....) sont grisés (on ne peut pas les sélectionner)
    • au clic sur une date, on affiche l'agenda du jour (heures)
      - les heures "indisponibles" (hors horaires d'ouverture) sont grisés,
      - les heures DEJA RESERVEES sont en rouge (par exemple)
      - les heures disponibles sont en vert (par exemple)

    calendrier + agenda du jour : ces affichages (grisé, rouge, vert) se font grâce à Ajax et requêtes en BDD pour récupérer les données.
    AUCUN risque alors de sélectionner une date/heure DEJA enregistrée.

    DANS TON CAS (2 simples input) :
    lors des sélection (date/heure), il faut faire un appel Ajax AVANT la soumission du formulaire :
    • on vérifie que ces date/heure ne sont pas déjà enregistré
    • sinon on affiche un message (et on empêche la soumission)



    6- [EDIT] A LA RIGUEUR...... (solution SIMPLE) :
    AU LIEU d'un <input> pour l'horaire :
    • on peut mettre une liste déroulante (<select>),
    • alimentée via Ajax (après sélection de la date) avec UNIQUEMENT les horaires disponibles (pour cette date).

    A priori : c'est très SIMPLE à réaliser.

    CE QUI N’EMPÊCHE PAS d'effectuer systématiquement la vérification en PHP AVANT l'INSERT !
    Dernière modification par Invité ; 18/08/2018 à 10h38.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 56
    Points : 24
    Points
    24
    Par défaut
    Ahah je savais que j'allais me faire linchée sur les vérifications php mais c'est parce que mes fonctions sont déjà toutes prête et j'ai plus qu'a les mettre je voulais débugguer ça avant de rajouter une 30ène de ligne au risque de m'enmêler les pinceau pour rien déjà qu'a la base je penser m'en sortir un minimum en sql et je vois bien que non.

    Alors j'ai pas fait de syntaxe colorique, pourquoi ?
    Parce que ce calendrier prend des réservation de devis donc au maximum 30min, donc si j'affiche un event sur la case ça risque d'etre sur-charger, et je veux pas bloquer la case non plus mais c'est vrai que c'est light je suis d'accord mais l'esprit simpliste y est pour quelque chose cette fois c'est pas simplement par flemmardise lol, c'est pour éviter au client de ce dire que si c'est rouge "il ne peut pas réserver"

    La clé unique j'ai essayer je pensais aussi que c'était une bonne idée, mais non : si j'entre deux fois la même date ça me bloque, si j'entre deux fois la même heure ça bloque aussi.
    Ce que je veux vraiment c'est que "Jeudi 24 septembre a 14h20" soit pas entré deux fois, si "Jeudi 24 septembre 14h21" est entré à la limite c'est pas trop un soucis, soit je rajoute une condition pour faire un interval de 15min entre chaque reservation ça me posera pas trop de soucis.

    La ce qui me boque je pense c'est que je n'ai pas stocker mes reservation dans un tableau, chaque reservation a un id, donc je pensais les récuperer comme ça les champs "date et heure" j'ai essayer de récuperer mon id avec un input hidden avec value id, enfin c'est vrai que le select est une solution sur laquel je peut me penché aussi.

    Le formulaire est chargé en ajax justement je peut continuer sur cette appel effectivement
    En fait c'est quelque chose comme ça que j'essaie de bidouiller mais qui me retourne jamais ce que j'attend quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function verifReservation(){
        global $pdo;
        $sql = '
        SELECT reservation.id, date, heure 
        FROM reservation';
        var_dump($sql);
    $query = $pdo->prepare($sql);
    $query->execute();
    $reservation = $query->fetchAll(PDO::FETCH_ASSOC);
    if($reservation != 0){
     
    }
    }

Discussions similaires

  1. Controle Calendrier sous Office sans Access
    Par Pantagruel92 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/12/2007, 23h43
  2. connexion sans login ni mot de passe
    Par g0up1l dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 31/05/2007, 20h29
  3. Connection mysql via ODBC sans login
    Par Aslan78 dans le forum C++Builder
    Réponses: 1
    Dernier message: 20/04/2007, 17h02
  4. Création de compte telnet sans login ni pwd
    Par peppena dans le forum Administration système
    Réponses: 2
    Dernier message: 05/07/2006, 14h01

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