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 :

Insertion value BDD sur balise select [dropdown menu]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    technicien applicatif
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : technicien applicatif

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut Insertion value BDD sur balise select [dropdown menu]
    Bonjour à tous,
    Par avance, je préfère m'excuser si ma question est idiote mais l'apprentissage en autodidacte peu avoir ces failles.
    Mon problème est le suivi, je souhaite injecter ma liste déroulante d'un résultat récupéré de ma BDD ( en l'occurrence le résultat est "Clos margaux").
    Le problème est que si je liste des valeurs en "dur" dans la balise option, tout se passe bien et chaque résultat est visible dans ma liste déroulante.. Par contre, quand j'interroge ma BDD pour rajouter une value, tout le résultat se mets à côté et je ne l'explique pas...

    Voici le code html/php (ci-joint):
    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
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <!DOCTYPE html>
    <html lang="en" dir="ltr">
     
    <head>
        <meta charset="utf-8">
        <title>Star Rating Form | CodingNepal</title>
        <link rel="stylesheet" href="notes.css">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" />
        <link href="https://emoji-css.afeld.me/emoji.css" rel="stylesheet">
    </head>
     
    <body>
        <div class="container">
            <div class="post">
                <div class="text">Thanks for rating us!</div>
                <div class="edit">EDIT</div>
            </div>
            <div class="star-widget">
                <input type="radio" name="rate" id="rate-5">
                <label for="rate-5" class="fas fa-star"></label>
                <input type="radio" name="rate" id="rate-4">
                <label for="rate-4" class="fas fa-star"></label>
                <input type="radio" name="rate" id="rate-3">
                <label for="rate-3" class="fas fa-star"></label>
                <input type="radio" name="rate" id="rate-2">
                <label for="rate-2" class="fas fa-star"></label>
                <input type="radio" name="rate" id="rate-1">
                <label for="rate-1" class="fas fa-star"></label>
                <form action="#">
                    <header></header>
                    <div class="textarea">
                        <textarea cols="30" placeholder="Qu'as-tu pensé de ce restaurant.."></textarea>
                    </div>
                    <div class="formulaire">
                        <label for="lang">Restaurant</label>
                        <select name="languages" id="lang"> 
                        <?php
    $bdd = new PDO('mysql:host=localhost;dbname=restaurant', 'root', '');
    $sql = "SELECT libelle FROM restaurant";
    $stmt = $bdd->prepare($sql);
    $stmt->execute();
     
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
     
    if ($stmt->rowCount() > 0) { ?>
      <select name="fileselect">
        <?php foreach ($results as $row) { ?>
          <option value="<?php echo $row['libelle']; ?>"><?php echo $row['libelle']; ?></option>
        <?php } ?>
    <?php } ?>  
                            <option value="php">PHP</option>
                            <option value="java">Java</option>
                            <option value="golang">Golang</option>
                            <option value="python">Python</option>
                            <option value="c#">C#</option>
                            <option value="C++">C++</option>
                            <option value="erlang">Erlang</option>
                        </select>
                        <input type="submit" value="Submit" />
                    </div>
                    <div class="btn">
                        <button type="submit">Post</button>
                    </div>
                </form>
            </div>
        </div>
        <script>
            const btn = document.querySelector("button");
            const post = document.querySelector(".post");
            const widget = document.querySelector(".star-widget");
            const editBtn = document.querySelector(".edit");
            btn.onclick = () => {
                widget.style.display = "none";
                post.style.display = "block";
                editBtn.onclick = () => {
                    widget.style.display = "block";
                    post.style.display = "none";
                }
                return false;
            }
        </script>
    </body>
     
    </html>

    Le résultat :
    Nom : 2023-05-07_18h42_02.jpg
Affichages : 176
Taille : 28,8 Ko


    Alors que sans cet ajout donc en supprimant la partie PHP, tout est propre :

    Nom : 2023-05-07_18h43_22.jpg
Affichages : 164
Taille : 52,2 Ko

    En espérant avoir vos lumières :$

    Br,

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 341
    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 341
    Billets dans le blog
    17
    Par défaut
    Regarde le HTML généré par ton script (sur le navigateur > Clique droit > Afficher la source), tu verras qu'il est incorrect.

    De plus tu as des éléments qui se chevauchent, c'est souvent mauvais signe.

    De bonnes habitues à prendre dès le début : utiliser la syntaxe PHP dite alternative pour générer du HTML, ça donne du code bien plus lisible.
    Pense également à échapper le HTML à l'affichage avec htmlspecialchars()

    Pour afficher correctement ton <select> :

    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
    <?php if (empty($results)): ?>
      <p>Rien à afficher !</p>
    <?php else: ?>
      <select name="fileselect">
        <?php foreach ($results as $row): ?>
          <option value="<?= htmlspecialchars($row['libelle']) ?>"><?= htmlspecialchars($row['libelle']) ?></option>
        <?php endforeach ?>
        <!-- Ajoutés en fin de liste, pour les tests -->
        <option value="php">PHP</option>
        <option value="java">Java</option>
        <option value="golang">Golang</option>
        <option value="python">Python</option>
        <option value="c#">C#</option>
        <option value="C++">C++</option>
        <option value="erlang">Erlang</option>
      </select>
    <?php endif ?>

  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
    Et mieux encore pour plus tard: utiliser un templating engine comme Twig, pour mieux séparer la logique de programmation des pages HTML.

    Quand vous récupérez des champs de formulaire, il est important de renseigner l'attribut value, puisque c'est ce que vous voulez récupérer en final. Pour débugger tout ça, affichez le résultat de la requête POST quand on appuie sur le bouton submit et vérifiez que vous récoltez bien ce qui est attendu.

    D'autre part, les champs de formulaire doivent être imbriqués dans votre bloc <form>, pas se trouver en dehors.

  4. #4
    Membre averti
    Homme Profil pro
    technicien applicatif
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : technicien applicatif

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut Problème d'insertion en base
    Bonsoir à tous,

    J'ai des difficultés à générer mon insert dans ma base phpmyadmin. J'ai essayé de rajouter des logs pour avoir des traces, fouiller les logs de wamp notamment sur le apache_error.log et passer mon php.ini en display_errors je ne comprends pas ce qui gêne...
    Si vous avez une explication, voici la partie html :

    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
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    <!DOCTYPE html>
    <html lang="en" dir="ltr">
     
    <head>
        <meta charset="utf-8">
        <title>Star Rating Form | CodingNepal</title>
        <link rel="stylesheet" href="notes.css">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" />
        <link href="https://emoji-css.afeld.me/emoji.css" rel="stylesheet">
    </head>
     
    <body>
        <div class="container">
            <div class="post">
                <div class="text">Thanks for rating us!</div>
                <div class="edit">EDIT</div>
            </div>
            <div class="star-widget">
                <input type="radio" name="rate" id="rate-5">
                <label for="rate-5" class="fas fa-star"></label>
                <input type="radio" name="rate" id="rate-4">
                <label for="rate-4" class="fas fa-star"></label>
                <input type="radio" name="rate" id="rate-3">
                <label for="rate-3" class="fas fa-star"></label>
                <input type="radio" name="rate" id="rate-2">
                <label for="rate-2" class="fas fa-star"></label>
                <input type="radio" name="rate" id="rate-1">
                <label for="rate-1" class="fas fa-star"></label>
                <form method="post" action="insert_comment.php">
                    <header></header>
                    <div class="textarea">
                        <textarea cols="30" name="Commentaire" placeholder="Qu'as-tu pensé de ce restaurant.."></textarea>
                    </div>
                    <div class="formulaire">
                        <label for="lang">Restaurant</label>
                        <select name="restaurant" id="lang">
                            <?php
                            $bdd = new PDO('mysql:host=localhost;dbname=restaurant', 'root', '');
                            $sql = "SELECT RestaurantID, libelle FROM restaurant ORDER BY libelle";
                            $stmt = $bdd->prepare($sql);
                            $stmt->execute();
                            $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
                            foreach ($results as $row) {
                                $id = $row['RestaurantID'];
                                $libelle = htmlspecialchars($row['libelle']);
                                echo "<option value='$id'>$libelle</option>";
                            }
                            ?>
                        </select>
                    </div>
                    <div class="btn">
                        <button type="submit" name="post">Post</button>
                    </div>
                </form>
            </div>
        </div>
        <script>
            const btn = document.querySelector("button");
            const post = document.querySelector(".post");
            const widget = document.querySelector(".star-widget");
            const editBtn = document.querySelector(".edit");
            btn.onclick = () => {
                widget.style.display = "none";
                post.style.display = "block";
                editBtn.onclick = () => {
                    widget.style.display = "block";
                    post.style.display = "none";
                }
                return false;
            }
        </script>
    </body>
     
    </html>

    La partie PHP ( insert_comment.php )
    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
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    function insert_comment($commentaire, $restaurantID) {
        try {
            $bdd = new PDO('mysql:host=localhost;dbname=restaurant', 'root', '');
            $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $sql = "INSERT INTO comment (RestaurantID, Commentaire) VALUES (:RestaurantID, :Commentaire)";
            $stmt = $bdd->prepare($sql);
            $stmt->execute(array(':RestaurantID' => $restaurantID, ':Commentaire' => $commentaire));
            return true;
        } catch (PDOException $e) {
            // Log l'exception dans un fichier de journal
            error_log('Error: ' . $e->getMessage() . ' - Could not save comment to database MDEP', 0);
            return false;
        }
    }
     
    if (isset($_POST['post'])) {
        $commentaire = $_POST['Commentaire'];
        $restaurantID = $_POST['restaurant'];
        if (insert_comment($commentaire, $restaurantID)) {
            echo "Commentaire enregistré avec succès !";
        } else {
            echo "Erreur lors de l'enregistrement du commentaire.";
        }
    }
    ?>
    Si vous avez des idées....

  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
    Citation Envoyé par zoopk Voir le message
    J'ai des difficultés à générer mon insert dans ma base phpmyadmin
    C'est-à-dire ? L'insert ne se fait pas ? Ou mal ? Des messages d'erreur ?
    Est-ce que la fonction insert_comment retourne true ou false ?
    Essayez de mieux expliquer et délimiter le problème.
    Peut-être que le plus simple est de saupoudrer le code de prints pour voir jusqu'où le code est exécuté, et si le chemin suivi est bien celui qui est attendu.

  6. #6
    Membre averti
    Homme Profil pro
    technicien applicatif
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : technicien applicatif

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut
    Bonjour Binarygirl,

    En réalité je n'ai aucun message et c'est bien là mon soucis...
    Je n'ai aucun élément me permettant de dire où le problème se situe si ce n'est que mon insert ne se fait pas dans ma BDD.
    En dehors de ça, rien ne me permets d'aiguiller ma réflexion sur un soucus potentiel

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 341
    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 341
    Billets dans le blog
    17
    Par défaut
    Je reprends BinaryGirl :

    Peut-être que le plus simple est de saupoudrer le code de prints pour voir jusqu'où le code est exécuté, et si le chemin suivi est bien celui qui est attendu.
    Si là tu n'as toujours rien qui s'affiche, alors c'est grave

  8. #8
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Dans insert_comment.php rajoute la ligne: print_r($stmt->errorInfo()); juste aprés ton appel à la méthode PDOStatement::execute() (ligne 10).
    Montre la structure complète de ta table comment. (SHOW CREATE TABLE restaurant.comment)

  9. #9
    Membre averti
    Homme Profil pro
    technicien applicatif
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : technicien applicatif

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut
    Concernant la structure de ma table, voilà ci-dessous :

    CREATE TABLE `comment` (
    `RestaurantID` int NOT NULL,
    `Note` int DEFAULT NULL,
    `commentaire` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

    Concernant le print-r je n'ai rien qui ressort, j'ai la fâcheuse impression de ne pas rentrer dans mon php alors qu'il est pourtant bien dans l'action de ma balise form

  10. #10
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    const btn = document.querySelector("button");
    const post = document.querySelector(".post");
    const widget = document.querySelector(".star-widget");
    const editBtn = document.querySelector(".edit");
     
    btn.onclick = () => {
        widget.style.display = "none";
        post.style.display = "block";
        editBtn.onclick = () => {
            widget.style.display = "block";
            post.style.display = "none";
        }
        return false;
    }
    Et si le problème était ton javascript ? Avec ton return false; tu court-circuiterais pas le comportement normal (i.e. submit) de ton bouton? Enlève le pour voir.
    (Encore mieux, réécris ce passage en utilisant addEventListener.)

  11. #11
    Membre averti
    Homme Profil pro
    technicien applicatif
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : technicien applicatif

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut
    Bien vu tu as raison c'était bien à cause de ça !
    Merci pour cet éclaircissement, je vais retravailler cette partie

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

Discussions similaires

  1. [phpMyAdmin] Problème création de BDD sur phpMyAdmin 2.8.1
    Par Marmouzé59 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 28/06/2007, 14h47
  2. Réponses: 9
    Dernier message: 11/06/2007, 16h58
  3. Problème insertion dans bdd access. Via VB express 2005
    Par Frosaf dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/06/2007, 18h19
  4. Problème Insert dans bdd Access
    Par waterman dans le forum Windows Forms
    Réponses: 10
    Dernier message: 10/04/2007, 17h15
  5. Réponses: 4
    Dernier message: 18/11/2003, 16h08

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