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

Langage PHP Discussion :

PDO = remplir balise select + recupérer l'option sélectionnée


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut PDO = remplir balise select + recupérer l'option sélectionnée
    Bonjour,

    Avertissement : je débute, mes connaissances en Php sont ... minuscules
    J'ai donc un petit formulaire, qui commence avec une liste déroulante pour choisir la catégorie.
    Les catégories, c'est une table de ma bdd.
    Donc, au chargement de la page, je créé un PDO pour aller me récupérer les libellés de mes catégories, pour que l'utilisateur puisse choisir.
    Jusqu'ici, tout va bien

    Oui mais ... et après ?
    Si je ne fais rien de +, là l'utilisateur peut bien choisir ce qu'il veut, c'est la 1ère catégorie qui est sélectionnée.
    J'ai fouillé le net, j'ai trouvé un truc, mais qui ne fonctionne pas, et je crois que c'est normal.

    Le code concerné :
    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
    <select id="categorieNews" name='categorieNews' 
                                                class='form-control' >
                                            <?php
                                            $db = Database::connect();
                                            $reqOptions = $db->query("SELECT * FROM categories_news");
                                            while($donnees = $reqOptions->fetch()) {
                                                echo '<option value="' . $donnees
                                                        ["libelle"] . '"';
                                                if ($_POST['categorieNews']==$donnees["libelle"]) {
                                                    echo " selected='selected'";
                                                }
     
                                                echo '>' . $donnees["libelle"] . '</option>';
     
                                            }
                                            $reqOptions->closeCursor();
                                            Database::disconnect();
     
                                            ?>
                                        </select>
    A l'évidence, je ne peux pas, à la fois et avec le même PDO, gérer le remplissage au 1er chargement de la page, et la récupération de l'option sélectionnée par l'utilisateur.
    Avouez, c'est ballot

    Bref, à part mettre mes catégories "en dur" (c'est tentant) auriez-vous une solution ?

    D'avance merci.

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour,
    En organisant son code, on est plus clair et cela ce lis plus facilement, ceci donne quoi ?

    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
     
    <?php
       $db = Database::connect();
       $reqOptions = $db->query("SELECT libelle FROM categories_news");
       $libelle = $reqOptions->fetchAll(PDO::FETCH_ASSOC);
      ?>
     
     
    <select id="categorieNews" name='categorieNews' class='form-control' >
       <?php foreach($libelle as $value): ?>
       	<?php if(isset($_POST['categorieNews']) && $_POST['categorieNews'] === $value["libelle"]): ?>
       		<option selected value="<?php echo $value['libelle'] ?>" > <?php echo $value['libelle'] ?> <option>
       	<?php continue;  endif; ?>
       	<option value="<?php echo $value['libelle'] ?> "> <?php echo $value['libelle'] ?> <option>
       <?php endif; ?>
    </select>
     
    <?php 
     Database::disconnect();
    ?>

  3. #3
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    Bonjour,

    Le code proposé ne fonctionne pas mon IDE me souligne le dernier <?php endif; ?>, et comme je ne comprends pas le code je ne sais pas corriger.

    Bref, finalement j'ai mis mes catégories "en dur". Après réflexion (et discussion), ça ne pose pas de problème particulier.

    Par contre, c'est bête mais je n'ai pas encore réussi à récupérer ce que l'utilisateur sélectionne.

    Du coup le code html ressemble à ça :
    Code html : 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
    <div class='col-md-12'>
                                        <label for='categorieNews'>Catégorie de la nouvelle</label>
     
                                        <select id="categorieNews" name='categorieNews' 
                                                class='form-control'>
     
                                            <option value="infos">infos</option>
                                            <option value="naissance">naissance</option>
                                            <option value="décès">décès</option>
                                            <option value="santé">santé</option>
                                            <option value="mariage">mariage</option>
                                            <option value="événement climatique">événement climatique</option>
                                            <option value="coupure_eau">coupure_eau</option>
                                            <option value="manifestation">manifestation</option>
     
                                        </select>
                                    </div>

    et le php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(!empty($_POST)) {
        $categorieNews = checkInput($_POST["categorieNews"]);
    là je pensais qu'il prendrait l'option sélectionnée ... mais non, il me "prend" la 1ère

  4. #4
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    Bon finalement le problème n'est pas là, c'est dans la suite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $db = Database::connect();
            $reqCategorie = $db->prepare("SELECT id FROM categories_news WHERE libelle=?");
     
            $reqCategorie->execute(array($categorieNews));
     
            $numCategorie = $reqCategorie->fetchAll();
            print_r($numCategorie);
            $numCategorie = intval(array($numCategorie));
            echo $numCategorie;
            $reqCategorie->closeCursor();
    j'ai mis des echo et des print_r pour savoir ce qu'il fabriquait.
    En fait mon $numCategorie c'est un array dans un array. Moi j'ai besoin du 8, comment je le chope celui-là ?
    Array ( [0] => Array ( [id] => 8 [0] => 8 ) )

  5. #5
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    c'est bon.
    Dans les "value" de mes options, j'ai mis les numéros de catégories, tout simplement.
    Comme ça je récupère un nombre en string, que je converti en nombre, et c'est terminé.

    Ou comment se prendre la tête pour pas grand-chose

  6. #6
    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 : 59
    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 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Bonjour,

    Puisque tu pars de zéro, tu as tout à fait raison de rédiger d'abord le HTML que tu veux obtenir, et de voir ensuite comment passer à des variables (PHP).

    Prenons d'abord la simple problématique de retenir le "selected" dans le "select".
    Nous sommes d'accord que sur ton "select" en dur, tu veux obtenir un "selected" sur l'option que l'utilisateur a choisie.

    Rangeons là d'abord dans une variable intermédiaire tout bête, ça sera plus facile.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(! empty($_POST['categorieNews'])){
      $choix=$_POST['categorieNews'];
      //et je fais le traitement.
    }
    else{
      //je fais la grève.
    }

    C'est là que je dois t'expliquer un truc assez violent la première fois qu'on le voit, et qui s'appelle la condition ternaire.

    Une condition normale dirait :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if($choix=='infos'){
      echo 'selected';
    }
    else{
      //ne fais rien du tout.
    }

    Ca, j'espère que tu comprends. En français, si on a ce choix, et qu'il n'est pas vide, hop, on l'exploitera, sinon... ben rien...


    Passons à la même chose en condition dite ternaire, ça donne

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ($choix=='infos'?'selected':NULL);

    Ici, en une seule ligne, on dit exactement la même chose.
    $choix=='infos' étant la condition, ce qui est après le "?" veut dire "alors", et ce qui est après le ":" veut dire "sinon"...

    Tout cela remis en ordre (alternance PHP et HTML) donnera
    Code php : 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
    <?php
    if(! empty($_POST['categorieNews'])){
      $choix=$_POST['categorieNews'];
    ?>
    <div class='col-md-12'>
      <label for='categorieNews'>Catégorie de la nouvelle</label>
     
      <select id="categorieNews" name='categorieNews' class='form-control'>
        <option value="infos" <?php echo ($choix=="infos"?"selected":NULL); ?> >infos</option>
        <option value="naissance" <?php echo ($choix=="naissance"?"selected":NULL); ?> >naissance</option>
        <option value="décès" <?php echo ($choix=="décès"?"selected":NULL); ?> >décès</option>
        <option value="santé" <?php echo ($choix=="santé"?"selected":NULL); ?> >santé</option>
      </select>
    </div>
    <?php
    }
    else{
      //je fais la grève.
    }
    ?>

    Je te laisse déjà étudier ça.

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Sorry,

    ce n'est pas endif; mais endforeach;

  8. #8
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    Merci infiniment pour ta pédagogie Dendrite

    J'avais déjà aperçu, ici où là, ce type de syntaxe, mais sans forcément la comprendre ... donc en effet je ne risquais pas de même simplement "penser" à l'utiliser.
    Or, du php sur plusieurs lignes au milieu du html, c'est compliqué. A lire, et à comprendre et donc à identifier les coquilles.

    Enfin du coup là je l'ai fait, c'est assez étrange à écrire, mais en fait ... ça marche et en plus, c'est beau

  9. #9
    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 : 59
    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 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ($tu_es_contente=="oui"?"Tant mieux !":"Dommage");


    Tu t'y feras, tu verras.

  10. #10
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    Bonjour,

    Bon, finalement, je n'avais pas réussi à faire ce que je voulais au départ avec cette liste déroulante, et j'avais résolu en partie le problème en mettant les options 'en dur'.

    Sauf que là, pour une autre page, le problème se pose de nouveau.

    J'ai une liste déroulante, qui doit se remplir à partir de la bdd.
    Et il faut, aussi, que quand le formulaire est validé, pouvoir récupérer l'option choisie.

    La solution de Dendrite ne fonctionne que si les options sont remplies "en dur".

    J'ai tenté d'adapter le code de MaitrePylos, mais ça ne fonctionne pas, quand je clique sur le bouton "envoyer" du formulaire, j'ai le message d'erreur paramétré en l'absence de sélection.

    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
     
    <div class='col-md-6'>
             <label for='respComm'>Responsable de la Commission * :</label>
     
              <select id="respComm" name='respComm'  class='form-control'>
              <option value="0">Choisissez</option>
              <?php foreach($donnees as $value) : ?>
                         <?php if(!empty($POST['respComm']) && $_POST['respComm'] == $value["nom"]) : ?>
                         <option selected value="<?php echo $value['nom'] ?>"><?php echo $value['nom']; ?></option>
                         <?php continue;  endif; ?>
                         <option value="<?php echo $value['nom'] ?>"><?php echo $value['nom'] ?></option>
                <?php endforeach; ?>
                </select>
                <p class='comments'><?php echo $nomRespCommError; ?></p>
    </div>
    Mais est-ce seulement possible ?

  11. #11
    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 : 59
    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 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Sauf, erreur, je crois que tu veux sauter les étapes.

    Les valeurs comme l'affichage de tes options sont donc remplies par la base de données, et seul le "selected" (ou non) sont remplies par ta variable POST ?
    Ca n'est pas du tout ce que l'on fait habituellement;
    Une variable post, envoyée par un utilisateur, provoque une saisie en base de données.

    Et ensuite, en lecture seule, on lui remontre ce qu'il a saisi au préable, via la base de données.
    Donc ça se passe en 2 temps

    1) le script : il clique donc j'insère ou je modifie
    2) le script : la page se rafraichit donc je fais ma requete de récupération

    Commençons par le 2 :
    Mets des trucs à la main dans ton PhpMyadmin, et teste cette page avec les requêtes qui vont bien par rapport à tes tables.
    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
     
    <?php
    $db = Database::connect();
    //1ère requête qui va chercher tout le rang de toto dans une table quelconque 
    $sql='SELECT titre, contenu, categorie_news_id, date_format(redaction_quand,"%d/%m/%Y %H:%i:%s") as heure_redaction
    FROM journal 
    where pseudo = ?
    order by redaction_quand desc
    limit 1';
    $stmt->prepare($sql, array ($_SESSION['pseudo']));
    $stmt->execute();
    $row_last_new=$stmt->fetchAll(PDO::FETCH_ASSOC);//forcément qu'une seule ligne maxi
    if(count($row_last_new)==1){
      //2nde requête on va chercher la liste des catégories pour le select, et par défaut, on posera le selected sur la valeur de catégorie de la requête précédente
      $sql='SELECT id, libelle FROM categories_news order by libelle;';
      $stmt = $db->query($sql);
      $categories= $stmt->fetchAll(PDO::FETCH_ASSOC);
      if(count($categories)>0){
        echo '<select id="categorieNews" name="categorieNews" class="form-control" >';
        echo '<option value="">-- Sélectionnez --</option>';//c'est toujours bien de prévoir quand on a rien choisi avant
        foreach($categories as $categorie){
          echo '<option value="'.$categorie['id'].'" '.($categorie['id']==$row_last_new['id']?"selected":NULL).' >'.htmlspecialchars($categorie['libelle']).'</option>';
        }
        echo '</select>';
      }
    }
    Database::disconnect();
    ?>

  12. #12
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Sauf, erreur, je crois que tu veux sauter les étapes.

    Les valeurs comme l'affichage de tes options sont donc remplies par la base de données, et seul le "selected" (ou non) sont remplies par ta variable POST ?
    Ca n'est pas du tout ce que l'on fait habituellement;
    Une variable post, envoyée par un utilisateur, provoque une saisie en base de données.

    (...)[/CODE]
    En effet c'est ma 1ère création de site. Donc y a certainement pleins de trucs où, dès le départ, je m'y suis mal prise.

    Concrètement, il s'agit d'un site pour une toute petite commune.
    J'ai une table habitants (puisqu'il y aura un espace réservé aux habitants) avec des champs nom prénom mail, et un booléen conseiller_municipal.

    En parallèle, cette année le conseil municipal a créé tout un tas de commissions (). Chaque commission a un responsable, et 2-3 membres. Bien sûr ils font tous partie du conseil municipal.

    Or, le conseil municipal, il n'est pas gravé dans la pierre. Normalement élu pour 6 ans, il est possible que des membres quittent le conseil (volontairement ou non). Et les commissions c'est pareil, c'est susceptible de changer.

    Donc en back-end, je voulais faire une page pour créer/modifier/supprimer une commission.

    Et je voulais que pour chaque poste de la commission (responsable, ou membre1 membre 2 etc ...) le maire ait des listes déroulantes pré-remplies avec les membres du conseil municipal, à partir de ma table habitants.

    Voilà la petite histoire.
    Je regarderai (et testerai surtout) ton code pour voir ce que ça fait, et pour essayer de le comprendre.

    Merci

  13. #13
    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 : 59
    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 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Sujet passionnant. Mais qui soulève foule de questions si l'on veut t'aider.
    Tu pars d'un existant ou bien tu dois modéliser la base ?
    C'est dans la vraie vie ou bien un projet d'étude ou... les deux ?
    Quel est ton rôle dans cette affaire ?
    - Prestataire payée
    - habitante bénévole
    - stagiaire de la mairie
    - secrétaire ?

    Tu as une date butoir ?

    Pour la base de données, c'est une partie cruciale pour démarrer une appli saine et souple pour l'avenir et je serais ravie de t'aider sur le sujet.
    Si tu pars d'une base existante que tu ne peux modifier ou guère, faudrait que tu nous donnes sa structure (pas son contenu bien entendu).

  14. #14
    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 : 59
    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 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    En tout cas, je te remercie, je cherchais à développer une superstructure de code abstrait, qui me permettrait, en faisant "manger" une db à ma librairie perso, de générer automatiquement une appli entière en quelque sorte.
    C'est quelque chose qui m'amuserait beaucoup, un méta-développement.
    Or, il me manquait une db vivante, avec plusieurs droits utilisateurs.
    Ici, j'ai l'approche, avec plein de bases et 4 accès.
    - maire (admin)
    - secrétaire (gestionnaire)
    - président de commission (compte-rendu de commission)
    - habitant

    Ouf ! Merci, ça va me faire un bon boulot. J'arrête de te polluer avec ça et me mets au travail.
    Les connaisseurs me diront que je veux réinventer un PHPmyAdmin ou un REST... mais pas tout à fait...

    Allez, j'arrête de polluer ton fil et me remets à ton service.

  15. #15
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    Alors je suis stagiaire (gratuite ) à la mairie.
    Stage de fin de 1ère année BTS Sio. (reconversion professionnelle)

    Y a rien au départ, et mon "tuteur" de stage c'est le maire, qui n'a absolument aucune connaissance. Pour te donner une idée du niveau, j'ai dû faire un petit bout de code qui copie et redimensionne les photos qu'elle voudra mettre, parce qu'elle ne sait pas redimensionner une image avec paint.

    Donc pas de bdd, absolument rien, je part de 0 pour tout.

    Du coup, pour mon problème, j'ai trouvé une solution (dont je ne suis pas très fière) : dans la table "commissions", au lieu d'avoir les id des habitants pour le responsable et les membres, ben j'ai simplement un champ texte. Et elle pourra modifier avec des input de type text tout simple.
    De fait il n'y a plus de lien entre la table habitants et la table commissions. Donc ... je suis pas très contente de mon boulot, mais j'avoue que là je commence à avoir la pression du temps.
    Il me reste 15 jours, et j'ai tout ce qui concerne l'espace réservé habitants à créer (inscription, connexion, mdp oublié, désinscription) et surtout, ce qui m'inquiète le plus, il va falloir que je trouve comment installer et utiliser phpMailer.
    Puisque l'objectif final, c'est que le maire puisse publier des nouvelles sur la page idoine (réservée aux habitants donc), et qu'à chaque fois qu'elle postera une nouvelle, les gens reçoivent un mail.

    J'ai été un peu ambitieuse de me lancer là-dedans sans aucune expérience. Je me demande si j'ai pas pété un peu plus haut que mon c** si tu me pardonnes l'expression

  16. #16
    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 : 59
    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 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Tous les premiers projets sont difficiles de toute façon.
    Et, tu sais que l'on dit "LA maire" et pas "le maire" quand c'est une femme. On dit Madame la Maire.

    Disons que tu bloques sur quoi là tout de suite ?

    Avec l'aide de Développez, tu ne te sentiras jamais toute seule.

    Vu ce que tu me décris, on ne va pas revoir ta base et tout le toutim, c'est sûr, 2 semaines, c'est court.

    Pour phpmailer, ne t'inquiète pas, c'est une librairie que tu adopteras assez vite avec quelques explications ici.

    Juste, voilà ce que j'aurais fait comme base avec les problématiques que tu me décris :

    nom de la base : mairie
    (oui, demain, tu pourras peut-être passer ta base à une secrétaire de mairie voisine)

    //Tout le monde est un habitant, sans présumer de son éventuelle fonction, passée, présente ou à venir
    //Les habitants, ça emménage, ça déménage, ça naît, ça meurt
    //pourquoi stocker civilité (que Mme, M.) ? car si tu leur écris, c'est plus poli, et surtout, si tu as des prénoms étrangers ou mixtes, et puis il y a la problématique de parité etc. etc.

    Table 1 habitant

    habitant (habitant_id, , habitant_civilite, habitant_nom, habitant_prenom, habitant_mail, habitant_debut, habitant_fin, habitant_maj)

    ex de rang (123, "Mme", "PHONG", "Bing", "bptaz@gmail.com", "2010-07-01 14:16:17", "9000-12-31 00:00:00", "2020-08-01 16:00:00")

    civ et mail nullable
    Clé d'unicité ? nom + prenom + mail (des couples sont 2 sur le même mail)

    Table 2 (la liste des fonctions, qui pourra évoluer à l'avenir, rien n'est jamais figé)

    l_fonction
    (l_fonction_id, l_fonction_code, l_fonction_libelle_h, l_fonction_libelle_f, l_fonction_hierarchie)

    (1, MAIRE, Maire, Maire, 100)
    (2, PADJ, Premier Adjoint, Première Adjointe, 90)
    (3, ADJ, Adjoint, Adjointe,70)
    (4, CM, Conseiller Municipal,Conseillère Municipale, 50)

    Clé d'unicité code

    Table 3

    conseil_municipal


    cm_id, cm_habitant_id, cm_l_fonction_id, cm_debut, cm_fin

    clé d'unicité habitant_id + fonction_id + fin


    Avec ce système, tu gèreras l'historique en toute facilité.

    Déjà, pour qui fait partie du conseil municipal au moment où l'on parle, (vue en tant réelle) ça donne ça

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select habitant_id, if(habitant_civ="M.", fonction_libelle_h, fonction_libelle_f) as fonction_libelle, fonction_code, habitant_civ, habitant_nom, habitant_prenom, habitant_mail
     
    from conseil_municipal
     
    inner join habitant on cm_habitant_id=habitant.id and now() between habitant_debut and habitant_fin
    inner join fonction on cm_fonction_id=fonction_id and curdate() between fonction_debut and fonction_fin
     
    where now() between cm.debut and cm_fin
    order by fonction_hierarchie desc, habitant_nom, habitant_prenom

    Quand cette requête fonctionne, tu la ranges dans une belle vue

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create or replace view v_conseil_municipal as
    select habitant_id, if(habitant_civ="M.", l_fonction_libelle_h, l_fonction_libelle_f) as l_fonction_libelle, l_fonction_code, habitant_civ, habitant_nom, habitant_prenom, habitant_mail
     
    from conseil_municipal
     
    inner join habitant on cm_habitant_id=habitant.id and now() between habitant_debut and habitant_fin
    inner join l_fonction on cm_l_fonction_id=l_fonction_id and curdate() between l_fonction_debut and l_fonction_fin
     
    where now() between cm.debut and cm_fin
    order by fonction_hierarchie desc, habitant_nom, habitant_prenom

    Et hop, il te restera dans ton code à faire un petit

    select * from v_conseil_municipal pour avoir tout en temps réel...

    Quant à ta problématique commissions, elle nécessiterait 2 tables

    table 4


    l_commission (l_commission_id, l_commission_sujet, l_commission_debut, l_commission_fin)

    table 5

    commission_membre (commission_membre_id, commission_membre_l_commission_id, commission_membre_habitant_id, commission_membre_role => enum (préside, participe, observe), commission_membre_debut, commission_membre_fin)

    tu ne peux pas exclure que demain, on te demande d'adjoindre de "simples" habitants aux commissions

  17. #17
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Points : 89
    Points
    89
    Par défaut
    Ouah sympa les propositions de tables.
    J'ai pas mis les civilités pour les gens c'est vrai. Et comme on est un minuscule village (125 habitants - et là je compte les enfants et les vieillards), de toute façon quand quelqu'un emmenage/déménage Mme le Maire le sait, et peut ajouter ou supprimer dans la base sans conserver un historique de ceux qui étaient là.


    Bref.
    Là maintenant tout de suite, j'ai un problème très bête avec ma page Vie Pratique, je ne sais pas quoi en faire ce ça, sans que ce soit une usine à gaz.
    Nom : Capture.PNG
Affichages : 2439
Taille : 74,0 Ko
    Là par exemple les infos sont en dur, mais j'ai besoin qu'elle puisse modifier : la date de prochaine collecte, les horaires d'ouverture de la déchetterie, les liens pour les consignes de tri et le calendrier des dechetterie ... et en-dessous y aussi la ligne de bus, le lien vers les horaires ...

    Des tas de toutes petits informations, qui sont susceptibles de changer + ou - souvent, je ne peux pas laisser tout ça en dur.

    Je pensais donc prendre toutes ces petites zones, et fourrer tout ça dans la bdd. Avec une table fourre-tout pour tous ces petits trucs.
    Mais ça me paraît ... une usine à gaz.

    Et je ne sais pas utiliser autre chose (xml ?) qu'un pdo Php et une bdd.

    Donc si tu as une idée qui prend pas trop de temps à mettre en place ... je prends

  18. #18
    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 : 59
    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 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    popopo... t'enquiquine pas trop... surtout vu le temps qu'il te reste.
    Forme la Maire pour qu'elle conserve le document en .docx ou .doc, qu'elle le manipule à sa guise, puis, quand elle l'a terminé, qu'elle l'exporte en .pdf.

    Si elle arrive au moins à faire ça, toi, tu n'as plus qu'à lui fournir un formulaire d'upload (en français formulaire d'envoi) pour qu'elle le mette en ligne.
    Et le site de la mairie (donc toi) mets le download (en français, formulaire de réception) à la portée des habitants, avec un simple lien pdf.
    J'en ai fait pas mal ces derniers temps, ça ira vite pour te montrer.

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/10/2018, 09h57
  2. Modifier l'option sélectionnée dans un select
    Par GLSpirit dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/04/2008, 11h42
  3. Récupérer le libellé de l'option d'une balise SELECT
    Par tixmcprods dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/03/2008, 11h04
  4. balise select et option, récupérer la valeur
    Par yaya0057 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/02/2007, 02h05
  5. 2 options sur la même ligne de la balise select
    Par djibril38 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/08/2006, 23h05

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