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 :

Lier un menu déroulant et une boucle foreach


Sujet :

Langage PHP

  1. #1
    Membre à l'essai Avatar de Casey_Garraty
    Femme Profil pro
    En formation développeur web
    Inscrit en
    Janvier 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En formation développeur web

    Informations forums :
    Inscription : Janvier 2020
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Lier un menu déroulant et une boucle foreach
    Bonjour a tous,

    Je dois faire un formulaire avec un menu déroulant avec plusieurs choix de villes possibles pour un site de covoiturage fictif et le but est que quand on clique sur rechercher une liste de voyages depuis cette ville est proposé. Mais je n'arrive je coince a ce niveau là. Quand je clique sur rechercher rien ne se passe ...
    Voici mon code :

    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
     <form action="index.php" method="post" id="formulaire">
                     <fieldset>
                         <legend>Rechercher un voyage</legend>
                        <label for="nom">Nom</label>  
                        <input type="text" name="nom" maxlength="25" id="nom" class="block">
                        <label for="prenom">Prénom</label> 
                        <input type="text" name="prenom" maxlength="25" id="prenom" class="block">
                        <label for="email">Email</label>
                        <input type="email" name="email" maxlength="25" id="email" class="block">
                        <label for="telephone">Téléphone</label> 
                        <input type="tel" name="tel" maxlength="25" id="tel" class="block">
                        <label for="depart">Départ</label>
                        <select name="depart" id="depart" class="block">
                            <option value="lille">Lille</option>
                            <option value="reims">Reims</option>
                            <option value="bordeaux">Bordeaux</option>
                            <option value="marseille">Marseille</option>
                            <option value="rennes">Rennes</option>
                            <option value="paris">Paris</option>
     
     
                        </select>
                        <input type="submit" value="Rechercher" class="bouton">
                     </fieldset>
     
                     </form>

    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
    <?php
            $prenom = $_POST['prenom'] ;
            $nom = $_POST['nom'] ;
            $email = $_POST['email'] ;
            $tel = $_POST['tel'] ;
     
     
            if (empty ($nom))
            {
            echo 'merci de saisir votre nom' .'</br>';
            }
     
            if (empty($prenom))
            {
              echo 'merci de saisir votre prénom' .'</br>';
            }
     
            if (empty($email))
            {
              echo 'merci de saisir votre email' .'</br>';
            }
     
            if (empty($tel))
            {
              echo 'merci de saisir votre numéro de téléphone' .'</br>';
            }
     
             $voyage=[
               ['départ' => 'Lille', 'arrivee'=> 'Paris', 'heure' => '16h30'],
               ['départ' => 'Reims','arrivee' => 'Rennes', 'heure' => '12h25'],
               ['départ' => 'Paris', 'arrivee' => 'Bordeaux', 'heure' => '15h'],
               ['départ' => 'Marseille', 'arrivee' => 'Reims', 'heure' => '8h15'],
               ['départ' => 'Rennes', 'arrivee' => 'Lille', 'heure' => '19h45'],
               ['départ' => 'Bordeaux', 'arrivee' => 'Marseille', 'heure' => '18h'],
             ];
     
              if (isset($_GET['submit']))
     
             foreach($voyage as $cle_voyage => $valeur_voyage)
             {  echo '<pre>';print_r($valeur_voyage);echo "</pre><br><br>Valeur clé= $cle_voyage et $valeur_voyage: <br><br>"; }
    Merci d'avance !

  2. #2
    Membre habitué
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Septembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 103
    Points : 151
    Points
    151
    Par défaut
    Si rien ne s'affiche c'est sans doute lié à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_GET['submit']))
    Tu envoies tes données en POST il est normal que ta condition sur $_GET ne donne rien.
    Il faut faire le test sur $_POST.

    Après aussi pour ton foreach tu vas sans doute avoir quelques erreurs, car tu vas traiter des tableaux comme des chaines de caractères.
    Si je fais ceci sur ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $voyage=[
               ['départ' => 'Lille', 'arrivee'=> 'Paris', 'heure' => '16h30'],
               ['départ' => 'Reims','arrivee' => 'Rennes', 'heure' => '12h25'],
               ['départ' => 'Paris', 'arrivee' => 'Bordeaux', 'heure' => '15h'],
               ['départ' => 'Marseille', 'arrivee' => 'Reims', 'heure' => '8h15'],
               ['départ' => 'Rennes', 'arrivee' => 'Lille', 'heure' => '19h45'],
               ['départ' => 'Bordeaux', 'arrivee' => 'Marseille', 'heure' => '18h'],
             ];
    foreach($voyage as $toto)
    {
             {  print_r($toto);  }
    }
    J'obtiens:
    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
    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    Array
    (
        [départ] => Lille
        [arrivee] => Paris
        [heure] => 16h30
    )
    Array
    (
        [départ] => Lille
        [arrivee] => Paris
        [heure] => 16h30
    )
    Array
    (
        [départ] => Lille
        [arrivee] => Paris
        [heure] => 16h30
    )
    Array
    (
        [départ] => Reims
        [arrivee] => Rennes
        [heure] => 12h25
    )
    Array
    (
        [départ] => Reims
        [arrivee] => Rennes
        [heure] => 12h25
    )
    Array
    (
        [départ] => Reims
        [arrivee] => Rennes
        [heure] => 12h25
    )
    Array
    (
        [départ] => Paris
        [arrivee] => Bordeaux
        [heure] => 15h
    )
    Array
    (
        [départ] => Paris
        [arrivee] => Bordeaux
        [heure] => 15h
    )
    Array
    (
        [départ] => Paris
        [arrivee] => Bordeaux
        [heure] => 15h
    )
    Array
    (
        [départ] => Marseille
        [arrivee] => Reims
        [heure] => 8h15
    )
    Array
    (
        [départ] => Marseille
        [arrivee] => Reims
        [heure] => 8h15
    )
    Array
    (
        [départ] => Marseille
        [arrivee] => Reims
        [heure] => 8h15
    )
    Array
    (
        [départ] => Rennes
        [arrivee] => Lille
        [heure] => 19h45
    )
    Array
    (
        [départ] => Rennes
        [arrivee] => Lille
        [heure] => 19h45
    )
    Array
    (
        [départ] => Rennes
        [arrivee] => Lille
        [heure] => 19h45
    )
    Array
    (
        [départ] => Bordeaux
        [arrivee] => Marseille
        [heure] => 18h
    )
    Array
    (
        [départ] => Bordeaux
        [arrivee] => Marseille
        [heure] => 18h
    )
    Array
    (
        [départ] => Bordeaux
        [arrivee] => Marseille
        [heure] => 18h
    )

    A partir de là tu pourras plus facilement faire un tri sur les départs et les arrivées à mon avis.

    Bon courage.

  3. #3
    Membre à l'essai Avatar de Casey_Garraty
    Femme Profil pro
    En formation développeur web
    Inscrit en
    Janvier 2020
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En formation développeur web

    Informations forums :
    Inscription : Janvier 2020
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Effectivement avec $_GET ça ne risquai pas de fonctionner...
    Mais j'en suis toujours au même point, rien ne s'affiche

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 393
    Points : 15 754
    Points
    15 754
    Par défaut
    La première étape pour résoudre ce genre de problème est d'afficher le contenu des variables utilisées. Si elles ne contiennent pas l'information attendue, il faut ensuite remonter à l'endroit où la variable a été modifiée et continuer l'affichage de la même façon.

    En PHP, vous pouvez essayer cette fonction qui affichera dans le code HTML, n'importe quelle variable composée d'objets, tableaux, code XML ou valeurs TRUE, FALSE ou NULL,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function aff($var) {
    	echo "<pre>";
    	echo htmlspecialchars(var_export($var, TRUE));
    	echo "</pre>";
    }

  5. #5
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Points : 889
    Points
    889
    Par défaut
    Bonjour.
    Dans index.php, commence par faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print_r($_POST['depart'];)
    pour vérifier qu'une valeur est bien transmise par le formulaire.
    Si c'est bien, le cas, tu ne dois afficher dans ton foreach que les parcours dont la ville de départ correspond à $depart avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $depart = $_POST['depart'];
    echo "Départ de ".$depart."<br>";
    foreach($voyages AS $ligne){
        if (strtolower($ligne['départ']) == $depart){
            echo "Arrivée : ".$ligne['arrivee']." à ".$ligne['heure']."<br>";
        }
    }
    Par ailleurs, tu as mis des Majuscules aux villes dans le tableau et un accent à la clé 'départ', (et pas à 'arrivee') il vaut mieux éviter cela et mettre les tout en minuscule voire les clés en anglais

Discussions similaires

  1. Menu déroulant dans une boucle while
    Par abdelkarim_1987 dans le forum Langage
    Réponses: 8
    Dernier message: 17/10/2013, 11h54
  2. [AJAX] Génération de menu déroulant contenant une tableau php
    Par emageren dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/04/2007, 11h46
  3. verifier formulaire avec une boucle "foreach"
    Par sardo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/03/2007, 12h15
  4. [MySQL] Traitement de Formulaire : générer des ensemble à partir d'une boucle foreach
    Par yodaazen dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/10/2006, 15h28
  5. menu déroulant sur une colonne
    Par champion dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 25/04/2006, 11h14

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