Se connecter / S'enregistrer
Votre question
Résolu

Demande d(aide pour le php

Tags :
  • Php
  • Programmation
Dernière réponse : dans Programmation
11 Septembre 2016 17:17:48

Bonjour à tous . Je suis à la recherche d'un club, un organisme, une école, une personne pouvant m'aider à y voir clair dans mes cours . Cela fait 1 an 1/2 que je suis des cours à l'EMWEB, avec des difficultés au niveau php . Quelqu'un saurait il me suggéré une adresse, une solution . Je suis mobile en Normandie et Ile de France . D'avance, merci

Autres pages sur : demande aide php

11 Septembre 2016 17:54:14

Bonjour :

regarde du côté du site du zéro : openclassroom
tu as aussi le site du W3C et la doc PHP
m
0
l
11 Septembre 2016 18:04:02

VaderFR a dit :
Bonjour :

regarde du côté du site du zéro : openclassroom
tu as aussi le site du W3C et la doc PHP


Je te remercie beaucoup, mais, j'aimerai qu'une personne m'explique pourquoi ce que je fais ne fonctionne pas, en me montrant pourquoi
m
0
l
Contenus similaires
11 Septembre 2016 18:28:01

poste ton code ici, et tu peux aussi jeter un zyeu à la doc en français
m
0
l
a b L Programmation
11 Septembre 2016 20:21:07

Sinon il ne faut pas oublier l'excellent developpez.com ! : http://php.developpez.com/
m
0
l
11 Septembre 2016 21:06:13

Post aux sites référencés ci dessus, et met y du code !
Le fait que tu saches pas importe peu. Nous nous contenterons de ce que tu sait écrire.
Et à propos de ta mobilité géographique, penses à TeamViewer, çà te fera rire :pt1cable: 
m
0
l
12 Septembre 2016 08:36:35

Merci pour ton aide Vador . Il s'agit de destinations de bus : Je dois donner les horraires de bus selon la destination demandée . Le problème est que je n'arrive pas à faire une liste déroulante avec des liens cliquables (pour la première partie), et que, par conséquent, tous les horaires s'affichent .
Voici mon code pour ce qu'on pourrait appelé l'index :

<?php
$nom='Bus';
$Nantes=array(1=>'Paris, arrival => Nantes, departuretime=> 11:00, arrivaltime => 12:34, driver=>Thomas','departure =>
Orleans, arrival => Nantes, departuretime=> 05h15, arrivaltime=> 09h32, driver=>Mathieu','departure => Nice, arrival =>
Nantes, departuretime=>12:00, arrivaltime=>16h00, driver=>Charlotte', 'departure => Nice, arrival => Nantes,
departuretime=>12:00, arrivaltime=>16h00, driver=>Charlotte' );
$Tours=array(1=>'departure => Dublin, arrival => Tours, departuretime => 07h23, arrivaltime => 08h50, driver=>
Nathanael','departure => Nice, arrival => Tours, departuretime=>11h00, arrivaltime=>16h10, driver=>Edouard');
$Orleans=array('departure => Paris, arrival => Orléans, departuretime => 03h00, arrivaltime => 05h26, driver=>Clément');
$Nice=array('departure => Paris, arrival => Nice, departuretime => 10h00, arrivaltime => 12h09, driver=> Audrey');
?>

<html>
<head>
<title><?php echo $nom; ?></title>
</head>
<body>

<form action="traitement.php" method="GET">

Last name <input type="text" name="last_name"></br>
First name <input type="text" name="first_name"></br>
Mail adress <input type="text" name="email"></br>
Phone number <input type="text" name="phone_number"></br>

Submit <input type="submit" value="Go" />
</form>
<p>
<form action="destNantes.php" method="GET">


<select>
<option value="$Orlena">Orleans</option><a href="$Nantes.php"></a>


<option value="$Dublin">Dublin</option><a href="Dublin.php"></a>

<option value="$Nantes">Nantes</option><a href="destNantes.php"></a>

<option value="$Dublin">Tours</option><a href="Tours.php"></a>

<option value="$Amboise">Amboise</option><a href="Amboise.php"></a>

<option value="$Nice">Nice</option><a href="Nice.php"></a>

</select>
<input type="submit" value="Go" />

</form>

</body>

</html>

Et voici mon code pour les horaires :

<?php

$Nantes = array(1 => 'Paris, arrival => Nantes, departuretime=> 11:00, arrivaltime => 12:34, driver=>Thomas', 'departure =>
Orlean, arrival => Nantes, departuretime=> 05h15, arrivaltime=> 09h32, driver=>Mathieu', 'departure => Nice, arrival =>
Nantes, departuretime=>12:00, arrivaltime=>16h00, driver=>Charlotte', 'departure => Nice, arrival => Nantes,
departuretime=>12:00, arrivaltime=>16h00, driver=>Charlotte');
$Tours = array(1 => 'departure => Dublin, arrival => Tours, departuretime => 07h23, arrivaltime => 08h50, driver=>
Nathanael', 'departure => Nice, arrival => Tours, departuretime=>11h00, arrivaltime=>16h10, driver=>Edouard');
$Orlean = array('departure => Paris, arrival => Orléans, departuretime => 03h00, arrivaltime => 05h26, driver=>Clément');
$Nice = array('departure => Paris, arrival => Nice, departuretime => 10h00, arrivaltime => 12h09, driver=> Audrey');
?>
<html>

<ul>
<?php
foreach($Nantes as $destination)
{
echo '<li>' .$destination. '</li>';
}
?>
<?php
foreach ($Tours as $destination)
{
echo '<li>'.$destination.'</li>';
}
?>
<?php
foreach ($Orlean as $destination)
{
echo '<li>'.$destination.'</li>';
}
?>
<?php
foreach ($Nice as $destination)
{
echo '<li>'.$destination.'</li>';
}
?>
</ul>

J'utilise foreach, mais peut être devrais utiliser if . Je ne sais plus . Peux tu m'aider, s'il te plaît ?
Merci d'avance






m
0
l
12 Septembre 2016 14:50:48

Bonjour,

- l'envoi des données devrait plutôt être fait par la méthode POST.

- la déclaration des tableau (objets) n'est pas la même pour Nates/Tours et Orléans/Nice. il y a soit un 1=> en trop, soit des numéros manquants.

- il manque les <?php et ?> dans ton select, les valeurs sont "$ville".

- pas de lien cliquable dans un select.de plus, la validation du formulaire enverra à la cible (action) du formulaire.

il vaut mieux mettre un attribut name au select, et en récupérer la valeur dans la page de traitement, d'ailleurs, c'est à ça que ça sert.
d'ailleurs à partir de quelques destinations, il n'est pas possible d'avoir une page de traitement dédiée pour chacune d'elle.


- ton utilisation du foreach est correcte. regarde ici

On remplace donc les X tableaux ville=(départ=X, destination=ville) qui sont en plus répétitifs (nom du tableau = "arrival") par un unique tableau.
Pour l'affichage par destination, on pourra s'aider de la fonction array_keys.

ce sont juste quelques pistes pour le moment, je suis en train de voir ça et rendre le code plus propre en tâchant de comprendre ce que tu as voulu faire.

voilà un début de code :

  1. <?php
  2. $nom='Bus';
  3. $voyages=array(array('departure' => 'Paris', 'arrival' => 'Nantes', 'departuretime'=> '11h00', 'arrivaltime' => '12h34', 'driver'=>'Thomas'),
  4. array('departure' => 'Orleans', 'arrival' => 'Nantes', 'departuretime'=> '05h15', 'arrivaltime'=> '09h32', 'driver'=>'Mathieu'),
  5. array('departure' => 'Nice', 'arrival' => 'Nantes', 'departuretime'=>'12h00', 'arrivaltime'=>'16h00', 'driver'=>'Charlotte'),
  6. array('departure' => 'Nice', 'arrival' => 'Nantes', 'departuretime'=>'12h00', 'arrivaltime'=>'16h00', 'driver'=>'Charlotte'),
  7. array('departure' => 'Dublin', 'arrival' => 'Tours', 'departuretime' => '07h23', 'arrivaltime' => '08h50', 'driver'=> 'Nathanael'),
  8. array('departure' => 'Nice', 'arrival' => 'Tours', 'departuretime'=>'11h00', 'arrivaltime'=>'16h10', 'driver'=>'Edouard'),
  9. array('departure' => 'Paris', 'arrival' => 'Orléans', 'departuretime' => '03h00', 'arrivaltime' => '05h26', 'driver'=>'Clément'),
  10. array('departure' => 'Paris', 'arrival' => 'Nice', 'departuretime' => '10h00', 'arrivaltime' => '12h09', 'driver'=> 'Audrey')
  11. );
  12. ?>


je déclare un tableau de tableaux associatifs, avec des clés, et non plus de simples chaînes de caractères comme tu faisais.

  1. <html>
  2. <head>
  3. <title><?php echo $nom; ?></title>
  4. </head>
  5. <body>
  6. <form action="traitement.php" method="POST">
  7. Last name <input type="text" name="last_name"></br>
  8. First name <input type="text" name="first_name"></br>
  9. Mail adress <input type="text" name="email"></br>
  10. Phone number <input type="text" name="phone_number"></br>
  11. Submit <input type="submit" value="Go" />
  12. </form>
  13. <p>


c'est là que je filtre le renvoi de la boucle par un if. pour le moment c'est la solution la plus simple.
Il est sans doute possible d'extraire directement du tableau les tableaux ayant "Nantes" en valeur de clé "arrival".
en tout cas dans un deuxième temps. d'abord, il va falloir extraire les valeurs des "arrival" et les afficher de manière unique. (et si c'est faisable pour "arrival", ça l'est aussi pour "departure", et ensuite un pti coup d'ajax pour avoir 2 listes de select et mettre l'une à jour en fonction des valeurs saisies dans l'autre...)

la valeur envoyée du trajet devrait elle être un identifiant unique pour chaque trajet, ce qui permet, en se basant sur la même base de données dans le script de traitement, de sélectionner le trajet correspondant et tous ses attributs.

  1. <form action="destinations.php" method="POST">
  2. A destination de Nantes :
  3. <select name="destination">
  4. <?php
  5. foreach($voyages as $trajet=>$destination){
  6. if ($destination["arrival"]=="Nantes"){
  7. echo "<option value=\"1\">Départ : ".$destination["departure"]." à ".$destination["departuretime"].", arrivée à ".$destination["arrivaltime"]."</option>";
  8. }
  9. }
  10. ?>
  11. </select>
  12. <input type="submit" value="Go" />
  13.  
  14. </form>
  15. </body>
  16. </html>
m
0
l
12 Septembre 2016 16:09:21

Pour avoir toutes les destination, on extrait les "arrival" par array_column que l'on dédoublonne par array_unique avant de trier.

impossible de faire le tout sur une ligne car sort renvoie un booléen.

le code pour afficher toutes les destinations dans l'index devient donc :

  1. Toutes les destinations :
  2. <select name="destinations">
  3. <?php
  4. $desti=array_unique(array_column($voyages, 'arrival'));
  5. sort($desti,SORT_NATURAL | SORT_FLAG_CASE);
  6. foreach ($desti as $arrivee){
  7. echo "<option value=\"$arrivee\">$arrivee</option>";
  8. }
  9. ?>
  10. </select>
m
0
l
18 Septembre 2016 12:52:56

Je te remercie beaucoup pour ta réponse, qui m'a éclairée . Toutefois, je n'ai plus la liste déroulante .
Je ne comprend pas pourquoi on ne peut pas cliquer sur la liste déroulante . D'après l'exercice qui m'est donné, je dois faire une liste déroulante, avec le nom des villes . L'utilisateur clique sur un nom, et l'heure ou les heures de départ apparaissent .
Je pensais qu'il fallait mettre toutes les informations dans le php . Ainsi, chaque information correspondrait à une variable . Lorsque l'utilisateur clique sur une destination, il est reporté vers un ou des horaires par l'intermédiaire d'une variable .
Voilà le code que j'ai tapé, en prenant en considération tes conseils :
<?php
$nom='Horaires de bus';
?>


<html>

<head>

<title><?php echo $nom; ?></title>

</head>

<body>

<form action="traitement.php" method="GET">

Last name <input type="text" name="last_name"></br>

First name <input type="text" name="first_name"></br>

Mail adress <input type="text" name="email"></br>

Phone number <input type="text" name="phone_number"></br>

Submit <input type="submit" value="Go" />

</form>

<p>
<form action="dest5.php" method="POST">

A destination de :

<select name="destination">

<?php

$nom='Bus';

$voyages=array(array('departure' => 'Paris', 'arrival' => 'Nantes', 'departuretime'=> '11h00', 'arrivaltime' => '12h34', 'driver'=>'Thomas'),

array('departure' => 'Orleans', 'arrival' => 'Nantes', 'departuretime'=> '05h15', 'arrivaltime'=> '09h32', 'driver'=>'Mathieu'),

array('departure' => 'Nice', 'arrival' => 'Nantes', 'departuretime'=>'12h00', 'arrivaltime'=>'16h00', 'driver'=>'Charlotte'),

array('departure' => 'Nice', 'arrival' => 'Nantes', 'departuretime'=>'12h00', 'arrivaltime'=>'16h00', 'driver'=>'Charlotte'),

array('departure' => 'Dublin', 'arrival' => 'Tours', 'departuretime' => '07h23', 'arrivaltime' => '08h50', 'driver'=> 'Nathanael'),

array('departure' => 'Nice', 'arrival' => 'Tours', 'departuretime'=>'11h00', 'arrivaltime'=>'16h10', 'driver'=>'Edouard'),

array('departure' => 'Paris', 'arrival' => 'Orléans', 'departuretime' => '03h00', 'arrivaltime' => '05h26', 'driver'=>'Clément'),

array('departure' => 'Paris', 'arrival' => 'Nice', 'departuretime' => '10h00', 'arrivaltime' => '12h09', 'driver'=> 'Audrey')

);




?>

</select>

<input type="submit" value="Go" />


</form>

</body>

</html>

et mon code "origine" :

<?php
$nom='Bus';
$Nantes=array(1=>'Paris, arrival => Nantes, departuretime=> 11:00, arrivaltime => 12:34, driver=>Thomas','departure =>
Orleans, arrival => Nantes, departuretime=> 05h15, arrivaltime=> 09h32, driver=>Mathieu','departure => Nice, arrival =>
Nantes, departuretime=>12:00, arrivaltime=>16h00, driver=>Charlotte', 'departure => Nice, arrival => Nantes,
departuretime=>12:00, arrivaltime=>16h00, driver=>Charlotte' );
$Tours=array(1=>'departure => Dublin, arrival => Tours, departuretime => 07h23, arrivaltime => 08h50, driver=>
Nathanael','departure => Nice, arrival => Tours, departuretime=>11h00, arrivaltime=>16h10, driver=>Edouard');
$Orleans=array('departure => Paris, arrival => Orléans, departuretime => 03h00, arrivaltime => 05h26, driver=>Clément');
$Nice=array('departure => Paris, arrival => Nice, departuretime => 10h00, arrivaltime => 12h09, driver=> Audrey');

?>

<html>
<head>
<title><?php echo $nom; ?></title>
</head>
<body>

<form action="traitement.php" method="GET">

Last name <input type="text" name="last_name"></br>
First name <input type="text" name="first_name"></br>
Mail adress <input type="text" name="email"></br>
Phone number <input type="text" name="phone_number"></br>

Submit <input type="submit" value="Go" />
</form>
<p>
<form action="destNantes.php" method="GET">


<select>
<option value="$Orlena">Orleans</option><a href="$Nantes.php"></a>


<option value="$Dublin">Dublin</option><a href="Dublin.php"></a>

<option value="$Nantes">Nantes</option><a href="destNantes.php"></a>

<option value="$Dublin">Tours</option><a href="Tours.php"></a>

<option value="$Amboise">Amboise</option><a href="Amboise.php"></a>

<option value="$Nice">Nice</option><a href="Nice.php"></a>

</select>
<input type="submit" value="Go" />

</form>

</body>

</html>

J'entends bien tes commentaires sur le fait de ne pouvoir cliquer sur une liste déroulante, mais, comment aller directement vers le lien ?
Le fait est que orsue je clique sur ok, je suis renvoyé vers la liste complète, vu que une seule adresse est indiquée dans <ACTION> .
J'ai essayé de faire un système pour mettre un <action> pour chaque proposition, mais, cela implique plusieurs listes déroulantes .
En fait, dans <SELECT>, il y a plusieurs <ACTION> . Et, j'essaie que chaque <ACTION> corresponde à un horaire . Pour cela, j'utilise un lien href . Il doit y avoir une autre solution .
Peux tu m'éclairer de nouveau . Je te remercie d'avance
m
0
l

Meilleure solution

18 Septembre 2016 15:48:46

Citation :
Je ne comprend pas pourquoi on ne peut pas cliquer sur la liste déroulante .


on peut, en sélectionnant une item de la liste. ensuite, l'évènement JavaScript onChange (de mémoire) permet de prendre en compte la sélection

Citation :
D'après l'exercice qui m'est donné, je dois faire une liste déroulante, avec le nom des villes . L'utilisateur clique sur un nom, et l'heure ou les heures de départ apparaissent .


ça ressemble à l'ajax que j'ai décris dans un de mes précédents posts.
à ma connaissance, un select en hml ne fournit pas de liens.

Pour mettre en forme le code et le rendre plus lisible sur le forum, utilise la balise BBCODE "[ code ]", sans espaces, sans oublier de fermer par un "[/ code ]", là encore sans espaces. et pour plus de lisibilité, il est possible d'utiliser le plugin Stylish pour Firefox et créer un CSS adapté, qui change police, couleur, etc... voir la petite discussion ici

Pour en venir à ton code :


  1. <?php
  2. $nom='Horaires de bus';
  3. ?>
  4.  
  5. <html>
  6. <head>
  7. <title><?php echo $nom; ?></title>
  8. </head>
  9. <body>


jusque là tout va bien

  1. <form action="traitement.php" method="GET">


Il est préférable d'utiliser la méthode POST, plus fiable, qui permet d'envoyer plus de données, plus lisiblement, et avec d'avantage de type de données (un fichier par exemple).

  1. Last name <input type="text" name="last_name"></br>
  2.  
  3. First name <input type="text" name="first_name"></br>
  4.  
  5. Mail adress <input type="text" name="email"></br>
  6.  
  7. Phone number <input type="text" name="phone_number"></br>
  8.  
  9. Submit <input type="submit" value="Go" />
  10.  
  11. </form>


voilà pour le premier formulaire, jusque là, ça va.

  1. <p>
  2. <form action="dest5.php" method="POST">
  3.  
  4. A destination de :
  5.  
  6. <select name="destination">
  7.  
  8. <?php
  9. $nom='Bus';
  10. $voyages=array(array('departure' => 'Paris', 'arrival' => 'Nantes', 'departuretime'=> '11h00', 'arrivaltime' => '12h34', 'driver'=>'Thomas'),
  11. array('departure' => 'Orleans', 'arrival' => 'Nantes', 'departuretime'=> '05h15', 'arrivaltime'=> '09h32', 'driver'=>'Mathieu'),
  12. array('departure' => 'Nice', 'arrival' => 'Nantes', 'departuretime'=>'12h00', 'arrivaltime'=>'16h00', 'driver'=>'Charlotte'),
  13. array('departure' => 'Nice', 'arrival' => 'Nantes', 'departuretime'=>'12h00', 'arrivaltime'=>'16h00', 'driver'=>'Charlotte'),
  14. array('departure' => 'Dublin', 'arrival' => 'Tours', 'departuretime' => '07h23', 'arrivaltime' => '08h50', 'driver'=> 'Nathanael'),
  15. array('departure' => 'Nice', 'arrival' => 'Tours', 'departuretime'=>'11h00', 'arrivaltime'=>'16h10', 'driver'=>'Edouard'),
  16. array('departure' => 'Paris', 'arrival' => 'Orléans', 'departuretime' => '03h00', 'arrivaltime' => '05h26', 'driver'=>'Clément'),
  17. array('departure' => 'Paris', 'arrival' => 'Nice', 'departuretime' => '10h00', 'arrivaltime' => '12h09', 'driver'=> 'Audrey')
  18.  
  19. );
  20. ?>
  21. </select>


le select est vide car tu ne génère aucun "option value=", qui sont les items de sélection.
dans mon code, je fait des "echo <option value=".....

la "value" de l'option peut être soit la destination (arrivée) si l'on veut d'abord sélectionner les destinations avant de voir les trajets qui y vont, ou bien un identifiant unique du trajet que tu ajoutes à la déclaration de ton tableau de tableaux en PHP.
Une item sélectionnée = un identifiant = un trajet.

pour le moment, tes trajets sont enregistrés "en dur" dans un tableau, mais à l'avenir tu pourrais bien utiliser une base SQL, avec par exemple un numéro d'ordre pour chaque trajet ajouté à la base, qui servirait d'identifiant.
Tu envoies une seule donnée, et à partir de là le script de traitement retrouve les autres informations.

la déclaration du tableau de tableaux en PHP permettra de générer la liste select et le reste du HTML.
Cette déclaration devrait d'ailleurs être mise tout en haut de ton code, voire même avant la balise < html >

  1. <input type="submit" value="Go" />
  2. </form>
  3. </body>
  4. </html>


Citation :
J'entends bien tes commentaires sur le fait de ne pouvoir cliquer sur une liste déroulante, mais, comment aller directement vers le lien ?


mettre l'identifiant, exemple générer des items de select du genre :
  1. <option value="1">Paris -> Nantes, 11h00 -> 12h34</option>

le texte entre les balises <option> </option> n'étant qu'un simple affichage, la valeur renvoyée par le select étant la value de l'item sélectionnée.

Aussi, pour récupérer ladite valeur, il faut un nom au select.
d'où mon
  1. <select name="destinations">

dans le post précédent.

ensuite, dans l'autre script php, fait un
  1. $destination=$_POST["destination"];


en remplaçant le nom de la ville par un numéro identifiant s'il s'agit de sélectionner un trajet.

Citation :
Le fait est que lorsque je clique sur ok, je suis renvoyé vers la liste complète, vu que une seule adresse est indiquée dans <ACTION> .


le problème viens du mauvais traitement (ou non traitement) des données envoyées (ou pas) par le formulaire.

Citation :
J'ai essayé de faire un système pour mettre un <action> pour chaque proposition, mais, cela implique plusieurs listes déroulantes .
En fait, dans <SELECT>, il y a plusieurs <ACTION> . Et, j'essaie que chaque <ACTION> corresponde à un horaire . Pour cela, j'utilise un lien href . Il doit y avoir une autre solution .


un formulaire = un attribut action, qui correspond au script de traitement. ensuite tu envoies des infos audit script, qui recolle les morceaux.
là tu as 4 destinations, mais ça pourrait être beaucoup plus. Tu ne feras pas autant de scripts de traitement, mais simplement un seul, global, qui récupère un "lien" (en terme de variable, de mémoire, d'objet, et pas en terme http), en l’occurrence l'identifiant, vers un trajet ou une destination.

Par exemple : écran 1 : sélectionnez votre destination et votre origine (point de départ)
écran 2 : sélectionner le trajet (de l'origine et à destination précédemment indiqués)
partage
18 Septembre 2016 18:52:14

VaderFR a dit :
Bonjour,

- l'envoi des données devrait plutôt être fait par la méthode POST.

- la déclaration des tableau (objets) n'est pas la même pour Nates/Tours et Orléans/Nice. il y a soit un 1=> en trop, soit des numéros manquants.

- il manque les <?php et ?> dans ton select, les valeurs sont "$ville".

- pas de lien cliquable dans un select.de plus, la validation du formulaire enverra à la cible (action) du formulaire.

il vaut mieux mettre un attribut name au select, et en récupérer la valeur dans la page de traitement, d'ailleurs, c'est à ça que ça sert.
d'ailleurs à partir de quelques destinations, il n'est pas possible d'avoir une page de traitement dédiée pour chacune d'elle.


- ton utilisation du foreach est correcte. regarde ici

On remplace donc les X tableaux ville=(départ=X, destination=ville) qui sont en plus répétitifs (nom du tableau = "arrival") par un unique tableau.
Pour l'affichage par destination, on pourra s'aider de la fonction array_keys.

ce sont juste quelques pistes pour le moment, je suis en train de voir ça et rendre le code plus propre en tâchant de comprendre ce que tu as voulu faire.

voilà un début de code :

  1. <?php
  2. $nom='Bus';
  3. $voyages=array(array('departure' => 'Paris', 'arrival' => 'Nantes', 'departuretime'=> '11h00', 'arrivaltime' => '12h34', 'driver'=>'Thomas'),
  4. array('departure' => 'Orleans', 'arrival' => 'Nantes', 'departuretime'=> '05h15', 'arrivaltime'=> '09h32', 'driver'=>'Mathieu'),
  5. array('departure' => 'Nice', 'arrival' => 'Nantes', 'departuretime'=>'12h00', 'arrivaltime'=>'16h00', 'driver'=>'Charlotte'),
  6. array('departure' => 'Nice', 'arrival' => 'Nantes', 'departuretime'=>'12h00', 'arrivaltime'=>'16h00', 'driver'=>'Charlotte'),
  7. array('departure' => 'Dublin', 'arrival' => 'Tours', 'departuretime' => '07h23', 'arrivaltime' => '08h50', 'driver'=> 'Nathanael'),
  8. array('departure' => 'Nice', 'arrival' => 'Tours', 'departuretime'=>'11h00', 'arrivaltime'=>'16h10', 'driver'=>'Edouard'),
  9. array('departure' => 'Paris', 'arrival' => 'Orléans', 'departuretime' => '03h00', 'arrivaltime' => '05h26', 'driver'=>'Clément'),
  10. array('departure' => 'Paris', 'arrival' => 'Nice', 'departuretime' => '10h00', 'arrivaltime' => '12h09', 'driver'=> 'Audrey')
  11. );
  12. ?>


je déclare un tableau de tableaux associatifs, avec des clés, et non plus de simples chaînes de caractères comme tu faisais.

  1. <html>
  2. <head>
  3. <title><?php echo $nom; ?></title>
  4. </head>
  5. <body>
  6. <form action="traitement.php" method="POST">
  7. Last name <input type="text" name="last_name"></br>
  8. First name <input type="text" name="first_name"></br>
  9. Mail adress <input type="text" name="email"></br>
  10. Phone number <input type="text" name="phone_number"></br>
  11. Submit <input type="submit" value="Go" />
  12. </form>
  13. <p>


c'est là que je filtre le renvoi de la boucle par un if. pour le moment c'est la solution la plus simple.
Il est sans doute possible d'extraire directement du tableau les tableaux ayant "Nantes" en valeur de clé "arrival".
en tout cas dans un deuxième temps. d'abord, il va falloir extraire les valeurs des "arrival" et les afficher de manière unique. (et si c'est faisable pour "arrival", ça l'est aussi pour "departure", et ensuite un pti coup d'ajax pour avoir 2 listes de select et mettre l'une à jour en fonction des valeurs saisies dans l'autre...)

la valeur envoyée du trajet devrait elle être un identifiant unique pour chaque trajet, ce qui permet, en se basant sur la même base de données dans le script de traitement, de sélectionner le trajet correspondant et tous ses attributs.

  1. <form action="destinations.php" method="POST">
  2. A destination de Nantes :
  3. <select name="destination">
  4. <?php
  5. foreach($voyages as $trajet=>$destination){
  6. if ($destination["arrival"]=="Nantes"){
  7. echo "<option value=\"1\">Départ : ".$destination["departure"]." à ".$destination["departuretime"].", arrivée à ".$destination["arrivaltime"]."</option>";
  8. }
  9. }
  10. ?>
  11. </select>
  12. <input type="submit" value="Go" />
  13.  
  14. </form>
  15. </body>
  16. </html>


m
0
l
18 Septembre 2016 19:01:42

Évite aussi de citer trop souvent des messages inutilement, ça alourdit le topic pour rien et on a du mal à s'y retrouver.
m
0
l
18 Septembre 2016 19:09:09

Vader, je te remercie pour ta réponse très complète . Toutefois, d'après le code que tu m'as envoyé, je n'ai plus de listing avec les villes de destinations . Sur tes conseils, j'ai éssayé de remplacer le GET par POST : Sans changement .
Ce qui me préoccupe davantage, c'est que le lien ne se fait plus vers mon fichier "traitement.php" .
De plus, je n'arrive pas à faire un fichier comme "traitement.php" pour que l'utilisateur choisisse sa destination .

Voici mon code, qui est une copie du tien, avec le fichier "traitement.php" à la suite :

<?php

$nom='Bus';

$Nantes=array(array('departure' => 'Paris', 'arrival' => 'Nantes', 'departuretime'=> '11h00', 'arrivaltime' => '12h34', 'driver'=>'Thomas'),

array('departure' => 'Orleans', 'arrival' => 'Nantes', 'departuretime'=> '05h15', 'arrivaltime'=> '09h32', 'driver'=>'Mathieu'),

array('departure' => 'Nice', 'arrival' => 'Nantes', 'departuretime'=>'12h00', 'arrivaltime'=>'16h00', 'driver'=>'Charlotte'),

array('departure' => 'Nice', 'arrival' => 'Nantes', 'departuretime'=>'12h00', 'arrivaltime'=>'16h00', 'driver'=>'Charlotte'),

array('departure' => 'Dublin', 'arrival' => 'Tours', 'departuretime' => '07h23', 'arrivaltime' => '08h50', 'driver'=> 'Nathanael'),

array('departure' => 'Nice', 'arrival' => 'Tours', 'departuretime'=>'11h00', 'arrivaltime'=>'16h10', 'driver'=>'Edouard'),

array('departure' => 'Paris', 'arrival' => 'Orléans', 'departuretime' => '03h00', 'arrivaltime' => '05h26', 'driver'=>'Clément'),

array('departure' => 'Paris', 'arrival' => 'Nice', 'departuretime' => '10h00', 'arrivaltime' => '12h09', 'driver'=> 'Audrey')

);

?>
<html>

<head>

<title><?php echo $nom; ?></title>

</head>

<body>

<form action="traitement.php" method="GET">

Last name <input type="text" name="last_name"></br>

First name <input type="text" name="first_name"></br>

Mail adress <input type="text" name="email"></br>

Phone number <input type="text" name="phone_number"></br>

Submit <input type="submit" value="Go" />

</form>

<p>
<form action="destinations.php" method="POST">

A destination de Nantes :

<select name="destination">

<?php

foreach($voyages as $Nantes=>$destinations){

if ($destinations["arrival"]=="Nantes"){

echo "<option value=\"1\">Départ : ".$destination["departure"]." à ".$destination["departuretime"].", arrivée à ".$destination["arrivaltime"]."</option>";

}

}



?>

</select>

<input type="submit" value="Go" />


</form>

</body>

</html>

et le "traitement.php" :

<html><head><title>Bus</title></head></html>
<?php
echo $_GET['first_name'];
echo $_GET['last_name'];
echo $_GET['email'];
echo $_GET['phone_number'];
echo $_GET['start'];
echo $_GET['arrival'];

?>
Je ne comprends pas qu'en utilisant un fichier similaire à "traitement.php", je n'ai pas le même résultat pour destination.php .

Merci de ton aide



m
0
l
18 Septembre 2016 19:33:12

  1. echo $_GET['start'];
  2. echo $_GET['arrival'];


tu n'as pas de champ de formulaire qui porte ce nom.
en revanche, $_GET["destination"] donnerait "1", ce qui permet dans traitement.php de trouver le 1er trajet.


d'autre part, tu as 2 formulaires avec 2 scripts de traitement distincts.
l'un pour nom, prénom... et l'autre pour les destinations.
Or, dans ton script, tu essaies de récupérer les champs des deux formulaires, alors qu'un seul formulaire est envoyé.

et une fois que ça marche en GET, il suffit de passer en POST.

  1. $Nantes=array(array(...

donc $nantes=$voyages en fait.

Pour avoir toutes les destinations, j'avais mis et expliqué le code suivant :
  1. Toutes les destinations :
  2. <select name="destinations">
  3. <?php
  4. $desti=array_unique(array_column($voyages, 'arrival'));
  5. sort($desti,SORT_NATURAL | SORT_FLAG_CASE);
  6. foreach ($desti as $arrivee){
  7. echo "<option value=\"$arrivee\">$arrivee</option>";
  8. }
  9. ?>
  10. </select>


ça c'est pour l'index.
puis dans traitement.php, utilises

  1. $destination_choix=$_POST["destinations"];
  2. $voyages=array(array.... => là c'est le même code donc fait un script bdd.php avec le code dedans puis fait un include_once(bdd.php); ou require_once(bdd.php);


et ajoute dans les sous-tableaux un champ identifiant

  1. array('identifiant'=>1,'departure' => 'Paris', 'arrival' => 'Nantes', 'departuretime'=> '11h00', 'arrivaltime' => '12h34', 'driver'=>'Thomas'),
  2. ...
  3.  
  4. A destination de $destination_choix :
  5. <select name="destination">
  6. <?php
  7. foreach($voyages as $trajet=>$destination){
  8. if ($destination["arrival"]=="$destination_choix"){
  9. echo "<option value=\"".$destination["identifiant"]."\">Départ : ".$destination["departure"]." à ".$destination["departuretime"].", arrivée à ".$destination["arrivaltime"]."</option>";
  10. }
  11. }
  12. ?>
  13. </select>


et le script n°2 peut être le script n°1, en utilisant une variable étape, et des
  1. isset($_POST[...]
pour savoir où on en est.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS