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 :

Affichage de données selon une sélection dans une liste déroulante [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Points : 87
    Points
    87
    Par défaut Affichage de données selon une sélection dans une liste déroulante
    Bonsoir à tous,

    Dans une page php appelée "fiche", j'ai insérer une liste déroulante dont les valeurs sont tirées d'une base de données existantes :

    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
    <form class="note" method="post" action="fiche.php">
    <h4>Pour quel restaurant voulez-vous consulter la fiche ?</h4>
     
    <p><select name="choix_restos" id="choix_restos" onchange="javascript:submit(this)"required >
     
    <?php
    $reponse = $bdd->query('SELECT * FROM restos ORDER BY nom');
     
     
    while ($choix = $reponse->fetch())
    {
    ?>
     
    <?php echo '<option value="'.$choix['nom'].'">'.$choix['nom'].'</option><br />';                  
    }
    ?>
    </select>
    </form>
    Comme vous pouvez le voir, la balise SELECT contient du code javascript qui permet de rafraichir la page à chaque fois que l'utilisateur change sa sélection.
    Le formulaire appelle également la page en cours "fiche.php".

    En dessous de ce formulaire, se trouve une fiche qui indique toutes les informations du nom extrait plus haut (adresse tel etc) à l'aide d'une requête et bien sûr... c'est ce qui ne marche pas :

    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
    <?php
    //Récupération des données du formulaire
    $_POST['choix_restos'];
     
    //Enregistrement des données dans des variables
    $choix=$_POST['choix_restos'];
    ?>
     
    <?php
    $req = $bdd->prepare('SELECT nom FROM restos WHERE nom = ?');
    $req->execute(array($_POST['choix_restos']));
     
    while ($donnees = $reponse->fetch())
    {
    ?>	
        <div id="reponse">
    	<h4>Fiche Restaurant</h4>
    	<p><strong>ID</strong> : <?php echo $donnees ['ID']; ?></p>
    	<p><strong>Nom</strong> : <?php echo $donnees['nom']; ?></p>
        <p><strong>Adresse</strong> : <?php echo $donnees['adresse']; ?></p>
    	<p><strong>Téléphone</strong> : <?php echo $donnees['telephone']; ?></p>
    	<p><strong>Horaire</strong> : <?php echo $donnees['horaire']; ?></p>
    	<p><strong>Emporte</strong> : <?php echo $donnees['emporte']; ?></p>
    	<p><strong>Livre</strong> : <?php echo $donnees['livre']; ?></p>
    	<p><strong>Specificité</strong> : <?php echo $donnees['specificite']; ?></p>
     
    <?php
    } 
    ?>
    <?php include('include/connect_fin.php');?>
    Non seulement, il m'écrit comme erreur qu'il ne connaît pas $choix_restos (sur toutes lignes où sont écrites "choix_restos") et maintenant je ne vois plus la DIV Réponse... Elle n'apparaît plus !

    C'est grave docteur ?

    Merci de m'aider et aussi de m'expliquer où est l'erreur car mon but est vraiment d'apprendre

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La premiere fois que tu arrives sur la page, $_POST['choix_restos'] n'existe pas puisque le formulaire n'a jamais été validé.
    Il faut ajouter un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_POST['choix_restos']))
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Avatar de magicshark
    Homme Profil pro
    Dans une SS2I donc pas que JAVA
    Inscrit en
    Octobre 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dans une SS2I donc pas que JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 133
    Points : 320
    Points
    320
    Par défaut
    pour commencer je ne comprend pas l'interet de la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Récupération des données du formulaire
    $_POST['choix_restos'];
    tu l'as déjà la variable !

    ensuite pour tester en tout premier écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?Php
    echo "<pre>";
    print_r($_POST);
    echo "</pre>";
    //... le rèste
    ça t'affichera le contenu du tableau de donnée reçut par le serveur depuis ta requête post

    edit : je n'avais pas bien compris (ce que je dis rèste valable quand même) mais commence par faire ce qui est dis au dessus de ce poste
    Pourquoi faire simple quand on peut faire compliqué.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Points : 87
    Points
    87
    Par défaut
    Bonsoir, Déjà si tu utilise des requêtes préparées essayes de les utiliser partout :

    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
     
    <?php try {
    $reponse = $bdd->prepare('SELECT * FROM restos ORDER BY nom');
    $reponse->execute();
    while ($choix = $reponse->fetch())
    {
    ?>
     
    <?php echo '<option value="'.$choix['nom'].'">'.$choix['nom'].'</option><br />';                  
    }
            $reponse->closeCursor();
     
    }
    catch (Exception $e) {
            echo 'Erreur : ',  $e->getMessage();
    } 
    ?>

    Cordialement.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    essayes de les utiliser partout :
    dans quel but ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    dans quel but ?

    De tous les conseils que j'ai pu reçevoir, et des informations que j'ai pu lire,
    la plupart des bases de données supportent les requêtes préparées,
    elles utilisent moins de ressources et s'exécutent plus rapidement, et une application qui utilise exclusivement les requêtes préparées, peut être sûr (ou presque ) qu'aucune injection SQL ne sera possible.

    pour les 'débutants' ( comme moi xD ) je trouve cette méthode très simple à comprendre et à utiliser.

    Voilà ^^.
    Cordialement.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Une requête préparée est plus efficace qu'une requête simple lorsqu'on est dans le vrai interêt de la préparation, c'est à dire executer la même requête plusieurs fois.
    Dans le cas d'une requête unique les performances doivent être identiques.

    Attention également avec Mysql, par défaut PHP émule la préparation, ce qui enlève l'interêt de performance.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Points : 87
    Points
    87
    Par défaut
    J'ai essayé tout ce que m'avez conseiller :

    - Pour l'erreur, effectivement, comme la variable n'existe pas tant que l'utilisateur n'a pas fait de sélection, avec la méthode Isset et l'accolade situé plus bas plus un msg echo 'erreur variable', le message d'erreur n'apparaît plus (sauf mon echo)

    En revanche, je pense que ma requête est tout simplement mal formulé. Le $POST_[choix_restos] correspond à la sélection de l'utilisateur mais aussi du nom du restaurant dans la table restos existante pour laquelle j'essaie de faire une requête avant que la fiche du restaurant en question s'automatise. Je pense qu'il ne reconnait pas mon $POST_[choix_restos] comme critère à la requête... Et là, je commence à pédaler un peu...

    De plus, je ne comprends pas pourquoi il ne m'affiche plus mes paragraphes HTML situé en dessous de la ligne de la requête... Pour résumer, tout ce qui se trouve entre les accolades de while ($donnees = $reponse->fetch()) Et là... j'aimerais bien comprendre ! En tout cas, merci de vous intéresser à mon problème !

  9. #9
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Points : 87
    Points
    87
    Par défaut RESOLU ! ! ! !
    Voilà ! J'y suis parvenu ! Et je suis d'autant plus fier que j'ai trouvé le pourquoi du comment TOUT SEUL § Ca veut dire, que j'ai compris les grands principes...

    Donc...

    Pour commencer : mon problème d'affichage

    L'affiche se trouve dans une boucle While donc... tant que il n'y a pas de réponses, ou des erreurs, forcement la fiche... ne s'affiche pas !

    Ensuite, pour la requête : Je vous rappelle l'ancien code, la cause de tous mes maux... Nous avions ces deux lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req = $bdd->prepare('SELECT nom FROM restos WHERE nom = ?');
    $req->execute(array($_POST['choix_restos']));
    Et un peu plus bas...

    while ($donnees = $reponse->fetch())
    Vous avez vu ? Dans le premier code la variable s'appelle $req et dans la boucle... $reponse !

    Cependant, après cette petite correction, ma fiche me retournait des erreurs sauf pour le nom ! Why ?

    Et bah j'ai trouvé

    J'avais tout simplement, dans ma requête, omis tout les autres champs, ce qui au final nous donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $req = $bdd->prepare('SELECT ID, nom , adresse, telephone, horaire, emporte, livre, specificite FROM restos WHERE nom = ?');
    $req->execute(array(
    $_POST['choix_restos']));
    Et bien sûr, pour la première connexion de l'utilisateur, j'ai entouré tout le code de conditions (if). Si la variable isset est vide alors le paragraphe html "Merci de sélectionner un restaurant" apparaît !

    Je tiens sincèrement à remercier Sabotage pour son aide si précieuse dans ce post, et bien d'autres. Je remercie également Magicshark qui m'a démontrer que, non seulement, j'avais crée une variable pour rien et aussi la petite astuce de "print" qui m'a bien aidé !

    Je n'oublie pas Reverb94 grâce à qui je me penche un peu plus sur les requêtes préparées...

    Il me reste bien des choses à faire qui a mon avis créerons d'autre post, tel "Comment faire pour que seul les gens dont l'IP correspondent à mon pays peuvent remplir le formulaire ? ... (Je sais juste récupérer une IP ET C'EST AVEC UN PLAISIR NON DISSIMULE QUE JE CLIQUE SUR :


  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    etudiant
    Inscrit en
    Juillet 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Affichage résultats suite à recherche multicritères sur wordpress
    Bonjour,

    Je suis en train de développer un site de réservation d'activités pour mon projet de fin d'année

    j'aimerais que mon utilisateur de mon site, une fois arrivé sur la page d'accueil, puisse trouver une activité disponible pour la date qu'il ara selectionné
    Nom : search bar.png
Affichages : 2244
Taille : 1,6 KoNom : search bar.png
Affichages : 2244
Taille : 1,6 Ko

    comment puis je faire pour qu'une fois qu'il a selectionné une date ainsi qu'une activité , une page apparaisse avec les activités disponibles a cette date avec une marge de 2-3 jours ?

    Je suis débutant et je n'ai aucune idée de comment je vais pouvoir implémenter cette fonctionnalité

    Merci de votre aide

  11. #11
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    déjà, je dirais que déterrer une discussion vieille de 7 ans et marquée comme , c'est pas la meilleure méthode pour obtenir des réponses...

    Sinon, pour ton problème, j'imagine une table SQL avec 2 colonnes (activite, date) puis une requête select activite where date IN ... (à développer, c'est juste une idée)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 06/10/2023, 16h10
  2. [MySQL] Afficher le résultat d'une sélection dans deux listes déroulantes d'un formulaire
    Par ritouthai dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/09/2013, 09h14
  3. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  4. Comment faire une recherche dans une combobox et une sélection automatique
    Par VictoriusDan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/12/2009, 16h17
  5. Réponses: 5
    Dernier message: 17/10/2007, 18h17

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