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 :

Confirmation de réservation au restaurant [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Confirmation de réservation au restaurant
    Bonjour,

    J'essaie de régler un problème, j'ai ma base de donnée qui fonctionne très bien et suis capable de rentrer toutes mes données de réservation à mon restaurant dans ma base de donnée qui inclus le nombres de personnes, la date, l'heures et le courriel du client.

    Maintenant, la seule chose qu'il me reste à faire serait de trouver une manière d'aviser le client que sa réservation à bien été faite ou que le restaurant est complet à la date et heure demandé.

    La portion que je voudrais de l'aide commence par $sql = mysql_query("SELECT SUM....., il me faudrait un exemple ou une personne qui pourrait bien me diriger pour que cela s'enregistre et me confirme que la réservation à bien été fait.

    Espérant avoir été assez clair, Merci!

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
     
    $link = mysqli_connect("localhost", "root", "password", "db");
     
    // Check connection
    if($link === false){
        die("ERROR: Could not connect. " . mysqli_connect_error());
    }
     
     
     
    // Escape user inputs for security
     
    $courriel = mysqli_real_escape_string($link, $_REQUEST['courriel']);
    $nombres = mysqli_real_escape_string($link, $_REQUEST['nombres']);
    $date = mysqli_real_escape_string($link, $_REQUEST['date']);
    $heures = mysqli_real_escape_string($link, $_REQUEST['heures']);
     
     
    // attempt insert inscription
    $sql = "INSERT INTO reservation (courriel, nombres, date, heures) VALUES ('$courriel', '$nombres', '$date', '$heures' )";
     
     
    if(mysqli_query($link, $sql)){
        header("Location: reservation.php");
     
    } else{
        echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    }
     
     
    $sql = mysql_query("SELECT SUM(CAST(nombre as AS UNSIGNED) AS total) FROM reservation WHERE date=$date");
    $row = mysql_fetch_array($sql);
    $total = $row['total'];
     
    if ($total > 46) {
     echo ' <i>Le restaurant est complet, veuillez choisir une autre heure ou journée</i><br>';
    }
    else 
    {
     echo "Votre réservation à bien été complété avec succès!";
    }
     
     
    // close connection
    mysqli_close($link);
     
    ?>

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Apparemment c'est la requête SQL qui pose souci, donc communiquez aussi la description des tables concernées

    Encadrez la partie code avec les balises CODE accessibles dans la barre d'icones (symbole #) ca facilite la lecture

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Apparemment c'est la requête SQL qui pose souci, donc communiquez aussi la description des tables concernées

    Encadrez la partie code avec les balises CODE accessibles dans la barre d'icones (symbole #) ca facilite la lecture
    Voici mes deux codes comme demandé espérant le tout conforme et que vous pourrez bien me guider et m'aider,

    Merci!

    Mon dossier pour me connecter à ma base de donnée.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?php
     
    $link = mysqli_connect("localhost", "root", "root", "restaurant");
     
    // Check connection
    if($link === false){
        die("ERROR: Could not connect. " . mysqli_connect_error());
    }
     
     
     
    // Escape user inputs for security
     
    $courriel = mysqli_real_escape_string($link, $_REQUEST['courriel']);
    $nombres = mysqli_real_escape_string($link, $_REQUEST['nombres']);
    $date = mysqli_real_escape_string($link, $_REQUEST['date']);
    $heures = mysqli_real_escape_string($link, $_REQUEST['heures']);
     
     
    // attempt insert inscription
    $sql = "INSERT INTO reservation (courriel, nombres, date, heures) VALUES ('$courriel', '$nombres', '$date', '$heures' )";
     
     
    if(mysqli_query($link, $sql)){
        header("Location: reservation.php");
     
    } else{
        echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    }
     
    $sql = mysql_query("SELECT SUM(CAST(nombre as AS UNSIGNED) AS total) FROM reservation WHERE date=$date");
    $row = mysql_fetch_array($sql);
    $total = $row['total'];
     
    if ($total > 46) {
     echo ' <i>Le restaurant est complet, veuillez choisir une autre heure ou ournée</i><br>';
    }
    else 
    {
     echo "Votre réservation à bien été complété avec succès!";
    }
     
     
    // close connection
    mysqli_close($link);
     
    ?>

    Ma base de donnée

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    -- phpMyAdmin SQL Dump
    -- version 4.7.0
    -- https://www.phpmyadmin.net/
    --
    -- Host: localhost:3306
    -- Generation Time: Jan 21, 2018 at 06:19 PM
    -- Server version: 5.6.34-log
    -- PHP Version: 7.1.5
     
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
     
    --
    -- Database: `restaurant`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Table structure for table `reservation`
    --
     
    CREATE TABLE `reservation` (
      `nombres` varchar(10) NOT NULL,
      `date` date NOT NULL,
      `heures` time NOT NULL,
      `courriel` varchar(50) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    --
    -- Dumping data for table `reservation`
    --
     
    INSERT INTO `reservation` (`nombres`, `date`, `heures`, `courriel`) VALUES
    ('9', '2018-01-23', '17:00:00', 'marc.giguere@gigmarc.com'),
    ('10', '2018-01-24', '20:00:00', 'marc.giguere@gigmarc.com');
     
    --
    -- Indexes for dumped tables
    --
     
    --
    -- Indexes for table `reservation`
    --
    ALTER TABLE `reservation`
      ADD KEY `index` (`nombres`);
    COMMIT;
     
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "INSERT INTO reservation (courriel, nombres, date, heures) VALUES ('$courriel', '$nombres', '$date', '$heures' )";
    Vous stockez des nombres en format texte ? !!
    Du coup vous êtes obligé de transformer votre texte en UNSIGNED pour faire la somme ! Pas optimal comme truc ça !
    Sans compter que, apparemment, vous ne vérifiez pas la qualité des données donc vous pouvez enregistrer dans nombres (pourquoi au pluriel ? ) 'Trois' ou 'bidule' et donc obtenir le chiffre zéro dans votre transformation !

    2) Je trouve bizarre d'enregistrer une réservation avant de savoir si elle pourra être honorée !

    3) Vous comptez les réservations faites pour une heure précise mais si M. Dupont réserve pour 19h30 et M. Durand pour 19h45, il y a fort à parier que lorsque M.Trucmuche réservera pour 20h00, MM. Dupont et Durand n'auront pas quitté leur table qui sera pourtant comptée vide !

    En conclusion, je pense que vous devez complètement revoir votre système de réservations !

    A) Modifiez les types de vos colonnes pour enregistrer des nombres (INTEGER puisqu'il s'agit de personnes ; on ne va pas prendre une demie personne ! ), des dates (DATE) et des heures (TIME) ou bien directement une colonne date-heure (DATETIME).

    B) Lors de la demande de réservation, vérifiez d'abord que le nombre de places demandées est disponible par rapport à ceux qui ont déjà réservé pour une période comprise entre, par exemple, DT - 45 mn et DT + 45 mn (DT étant le DATETIME de la réservation demandée), si vous considérez qu'une table est occupée durant 45 minutes en moyenne. Une réservation déjà enregistrée pour 30 mn avant celle demandée entraînera une table occupée et il ne faut pas occuper une table alors qu'elle est déjà réservée pour 30 mn plus tard.

    C) Pensez à contrôler la qualité des données transmises par le client :
    - vérifier que son adresse électronique (adrel) est bien formée (quelquechose@domaine.extension) ; il y a une fonction PHP pour ça (filter_var) ;
    - vérifier que le nombre de personnes prévues est bien un entier ;
    - vérifier la date et l'heure si c'est en saisie manuelle et formatez au format SQL (AAAA-MM-JJ hh:mm:00) avant de mettre la variable dans la requête.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je plussoie les recommandations de CinePhil sur la côté conception. Je renchéris sur la vérification du nombre de places : ce n'est pas parce qu'il reste 3 places dans le resto qu'il y a une table pour 3 de disponible.

    D'un point de vue purement technique : Si tu fais la connexion avec mysqli_connect, les échappement avec mysqli_real_escape_string ( bon réflexe) et l'insertion avec mysqli_query, il faut aussi faire le reste des interrogations de la base avec mysqli.
    Et ça pourrait être une bonne idée de faire les vérifications du type "il reste de la place" avant de faire l'insertion en base.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    ce n'est pas parce qu'il reste 3 places dans le resto qu'il y a une table pour 3 de disponible
    J'avais même oublié ce "détail", tiens !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MCD] Réservation de tables et de commandes dans la restauration
    Par eMarion dans le forum Schéma
    Réponses: 5
    Dernier message: 08/04/2011, 12h04
  2. [MCD] Restaurant : Menus, produits et réservation
    Par BLJ.CHAUVIN dans le forum Schéma
    Réponses: 15
    Dernier message: 05/07/2010, 10h11
  3. Sauvegarde / Restauration
    Par Sitting Bull dans le forum Administration
    Réponses: 2
    Dernier message: 13/06/2003, 13h46
  4. Confirmation de supression d'enregistrement
    Par Lux interior dans le forum XMLRAD
    Réponses: 3
    Dernier message: 25/04/2003, 16h01
  5. [Kylix] Demande de confirmation Kylix Delphi
    Par mailstef dans le forum EDI
    Réponses: 3
    Dernier message: 21/10/2002, 10h17

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