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 :

Form - récupérer des données depuis la bdd


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club Avatar de darlia
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 4
    Par défaut Form - récupérer des données depuis la bdd
    Bonsoir !

    J'espère que je suis dans la bonne catégorie du forum !
    Je suis débutante dans le monde du développement et je suis actuellement en cours de formation
    Dans le cadre de mes études, je dois développer une appli web de réservations de rendez-vous.

    Voici le contexte :
    Sur l'une des mes pages de formulaires de prise de rendez-vous, j'ai un formulaire qui se divise en 3 menus déroulants.
    • Choisir la ville
    • Choisir l'établissement
    • Choisir le professionnel

    J'ai déjà écris le php pour chaque formulaire afin qu'il affiche les données de la bdd.
    Je précise que chaque établissement est sensé correspondre à une ville (quelques-uns peuvent être dans la même ville), et que chaque professionnel est sensé correspondre à un établissement.

    Mon problème :
    Je souhaite faire en sorte que lorsque l'utilisateur choisit une ville, cela affiche la liste des établissements de cette même ville, et ensuite qu'une fois l'établissement choisi, cela affiche les professionnels travaillant dans ce même établissement.
    Je ne suis pas encore très douée en sql donc je ne sais pas comment faire. J'ai essayé beaucoup de choses mais rien à faire...

    Pourriez-vous m'aider s'il vous plaît ? Je désespère ^^'
    Ci-joint je mets des captures des tables concernées de ma bdd, le fichier php de ma page de formulaire, et le fichier php de l'action du formulaire.
    Merci par avance !
    Images attachées Images attachées       
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Bonjour, et bienvenue !

    Tu étudies, et ça me désole qu'on t'apprenne à produire du PHP "à papi" complètement obsolète, avec phpMyAdmin au lieu de MySQL Workbench, avec mysqli au lieu de PDO, avec des "SELECT *", avec du PHP immergé dans du HTML sans même la syntaxe alternative des structures de contrôle (https://www.php.net/manual/fr/contro...ive-syntax.php), avec un script 100% PHP contenant une balise de fermeture "?>" suivie d'une ligne blanche (cap), etc.

    La modélisation de la base n'a pas l'air bonne non plus, avec ces noms de communes dans des ENUM()

    Ton modèle de données :

    cities(idCity, cities)
    => Pourquoi une colonne "cities" et pas "city" (ou "cityName" qui a l'air de correspondre davantage à ta nomenclature) ? Cette colonne contient le nom d'*une* commune et devrait être de type ~TEXT/VARCHAR

    establishments(isEstablishment, establishmentName, #idCity)
    => Même remarque pour establishmentName qui est un ENUM

    professionals(idProfessional, lastName, firstName, login, password, #idEstablishment)
    => Ràs

    Mon problème :
    Je souhaite faire en sorte que lorsque l'utilisateur choisit une ville, cela affiche la liste des établissements de cette même ville, et ensuite qu'une fois l'établissement choisi, cela affiche les professionnels travaillant dans ce même établissement.
    Tu ne dis pas exactement à quel niveau tu bloques, simplement que tu n'es pas à l'aise avec SQL.

    À mon sens il faut oublier JavaScript et les sessions pour le moment, et faire simple avec un formulaire en plusieurs étapes. C'est nécessaire pour bien comprendre le principe. Ensuite tu pourras inclure d'autres outils comme JS pour améliorer l'"expérience utilisateur".

    Je te montre pour le choix de la commune qui libère le choix de l'établissement. Ensuite tu pourras poursuivre avec le choix du professionnel.

    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
    <?php
     
    include '../config/connexionBdd.php';
     
    $sql = 'SELECT ALL idCity, cities FROM cities ORDER BY cities ASC';
    $result = mysqli_query($mysqli, $sql);
    $cities = mysqli_fetch_all($result, MYSQLI_ASSOC); // PHP 8.1
     
    if (isset($_POST['city_id'])) { // Commune soumise ?
        // => On récupère les établissements
        $city_id = mysqli_real_escape_string($mysqli, $_POST['city_id']);
        $sql = <<<SQL
            SELECT ALL idEstablishment, establishmentName
            FROM establishments
            WHERE idCity = {$city_id} -- Etablissements de la commune soumise
            ORDER BY establishmentName ASC
            SQL;
        $result = mysqli_query($mysqli, $sql);
        $establishments = mysqli_fetch_all($result, MYSQLI_ASSOC);
     
        if (isset($_POST['establishment_id'])) { // Etablissement soumis ?
            // ...
        }
    }
    ?>
    <html>
        ...
        <form method="post">
            <div>
                Choix de la commune :
                <select name="city_id">
                    <?php foreach ($cities as $city): ?>
                        <option value="<?= htmlspecialchars($city['idCity']) ?>">
                            <?= htmlspecialchars($city['cities']) ?>
                        </option>
                    <?php endforeach ?>
                </select>
            </div>
            <?php if (isset($establishments)): ?>
                <div>
                    Choix de l'établissement :
                    <select name="establishment_id">
                        <?php foreach ($establishments as $establishment): ?>
                            <option value="<?= htmlspecialchars($establishment['idEstablishment']) ?>">
                                <?= htmlspecialchars($establishment['establishmentName']) ?>
                            </option>
                        <?php endforeach ?>
                    </select>
                </div>
            <?php endif ?>
            ...
        </form>
    </html>



    Nom : PHP-Close.png
Affichages : 101
Taille : 54,9 Ko

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Bonjour, ce que vous voulez est assez classique: ce sont des "dependent combo boxes" et les exemples ne manquant pas si vous faites une recherche sur Internet.
    Typiquement, on utilise Ajax pour rafraîchir la même page sans la recharger ou provoquer une redirection.
    Un exemple, non testé mais qui devrait expliquer le truc de manière suffisamment claire:
    https://www.cluemediator.com/dynamic...y-ajax-and-php

    A noter que dans les tutos il y a des mauvaises pratiques comme le fait de se connecter en root à la DB, et ce lien ne fait pas exception.

    Autre chose: en 2023 il n'est pas acceptable de stocker des mots de passe en clair. Le mot clé ici c'est hashing (et salting).
    Un tuto parmi d'autres: https://www.sitepoint.com/quick-tip-...ssword-in-php/

    Bon courage.

  4. #4
    Candidat au Club Avatar de darlia
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 4
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    Bonjour, ce que vous voulez est assez classique: ce sont des "dependent combo boxes" et les exemples ne manquant pas si vous faites une recherche sur Internet.
    [...]
    Bonjour !

    Merci pour votre réponse ! Par rapport au lien que vous m'avez envoyé oui c'est exactement ça !

    Par contre pour la connexion, oui je me connecte à ma bdd en root Mais étant donné que mon application est faite pour une évaluation scolaire, dois-je quand même changer le fait d'être en root ? Ou ce n'est pas très grave dans ce contexte ? Je précise que je dois ensuite héberger mon appli. Je ne connais pas encore toutes les mesures de ce qui touche à la sécurité... J'ai vraiment mis les pieds dans le plat depuis peu dans ce milieu, j'ai beaucoup à apprendre.

    Concernant le mot de passe, merci, je vais regarder votre lien pour mettre en application votre conseil !

    Bonne journée !

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Il faut bien comprendre que l'utilisateur root de la DB a plus de droits qu'un utilisateur ordinaire limité à une DB, il peut notamment lire et écrire des fichiers (au moins à certains endroits).
    Ca veut dire que s'il y a une faille dans votre code (pouvez-vous jurer qu'il n'y en a pas ?), par exemple une injection SQL, un attaquant pourrait uploader un webshell et faire plus qu'exfiltrer votre DB: ça peut aller jusqu'à la prise de contrôle du serveur lui-même. S'il est mutualisé, peut-être pas mais ça fait quand même des dégâts.

    Quant au fait de ne pas enregistrer les mots de passe en clair, c'est une problématique liée. Au cas où la DB fuite, le but est que les hackers n'aient pas des mots de passe immédiatement exploitables, afin de protéger les utilisateurs. Car beaucoup de gens réutilisent les mêmes mots de passe ailleurs...

  6. #6
    Candidat au Club Avatar de darlia
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 4
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Bonjour, et bienvenue !

    Tu étudies, et ça me désole qu'on t'apprenne à produire du PHP "à papi" complètement obsolète, avec phpMyAdmin au lieu de MySQL Workbench, avec mysqli au lieu de PDO, avec des "SELECT *", avec du PHP immergé dans du HTML sans même la syntaxe alternative des structures de contrôle (https://www.php.net/manual/fr/contro...ive-syntax.php), avec un script 100% PHP contenant une balise de fermeture "?>" suivie d'une ligne blanche (cap), etc.
    [...]

    Bonjour ! Merci beaucoup d'avoir pris le temps de me répondre et pour tes conseils !
    J'ai modifié mes ENUMS en VARCHAR, et le nom de ma colonne cities en cityName.
    Pour ce qui est de la façon dont je suis formée, peut-être qu'on m'apprends l'ancien pour mieux comprendre le nouveau par la suite ? Je ne sais pas...
    Par contre si si j'ai utilisé Mysql Workbench pour créer ma base de données, mais j'ai ensuite utilisé phpmyadmin pour gérer le reste.

    En tout cas j'ai suivi ton modèle : les options de villes s'affichent bien, par contre les options d'établissements sont vides, et idem pour les professionnels. Je ne comprends pas pourquoi ? J'ai cherché en vain. Je remets mon code : prendre-rdv-2.php, tu y verras plus clair que moi ^^
    PS : Pour les "<?php if (isset($variable)): ?>" je les avais mis en dehors de leur div, comme tu as montré, mais je ne voyais plus les label et select donc je les ai ensuite mis à l'intérieur des div.

    Merci par avance !
    Images attachées Images attachées  

Discussions similaires

  1. Récupérer des données depuis une BDD sur un serveur de mon site web
    Par kookitanou dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 30/10/2012, 10h52
  2. [MySQL] récupérer des données depuis une table mysql
    Par godbless dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/10/2008, 13h04
  3. Réponses: 1
    Dernier message: 09/09/2007, 12h09
  4. [FORM] Récupérer des données d'une page vers une autre
    Par smh_master dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 19/02/2007, 11h49
  5. Récupérer des données depuis un autre site
    Par cchampion2fr dans le forum Langage
    Réponses: 31
    Dernier message: 30/10/2006, 10h05

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