par
Jib » 02 avr. 2006, 14:23
Alors, j'ai etudié le tuto est j'ai arrivé a le faire fonctionner sur ma machine avc ma base de données. Je l'aime bien ce petit script.
Par contre j'ai toujours le meme souci.
Je ne sais vraiment pas si je vais pouvoir l'arranger à ma sauce puisque j'aimerai l'inclure dans un formulaire deja existant.
Je vais essayer de décrire au maximun mon problème en étant le plus clair possible.
j'ai un 1 formulaire pour créer un vol. Sur la meme page, une fois qu'on a renseigner les champs du vol, il reste un champs qui dit " combien d'escale voulez vous créer pour ce vol".
On doit répondre par un entier.
Deux possibilités sont possible :
- la reponse est 0.
En validant, on arrive sur la meme page avec le message suivant " vous avez decidé d'ouvrir le vol de numéro xxx avc 0 escales, si vous etes d'accord, valider sinon annuler". Si on annule, on efface tout, sinon on passe sur la page qui effectue l'insertion du vol dans la base de données.
La creation du vol sans escales est terminée.
- la reponse est >0 (par exemple 2):
En validant, on se retrouve sur meme page mais il est apparu 2 formulaires de création d'escales avec comme champs : continent_e, ville_e, h d'arrivée_e et l'heure de départ_e.
C'est ici que j'aimerai implanter le script qui en fonction du continent choisi dans la 1 er liste deroulante, propose les villes possibles.
on doit remplir tous les champs et valider. on se retrouve sur la page pour l insertion dans la base de données.
bien entendu sur la 1er page, comme je fais apparaitre les formulaires d'escales ou non, je recupere la reponse pour le nombre d'escales et dans une boucle for($j=1;$j<$nbescale;$j++) j'affiche les formulaire:
voila par exemple, mon formulaire pour une escale:
<tr class="escale">
<td colspan=6>
<u>Création de l'escale pour ce vol :</u>
<br />
<label>continent</label>
<select name="continent_e<? echo $j;?>" style="width:110px;">
<option value="1">Europe</option>
<option value="2">Asie</option>
<option value="3">Océanie</option>
<option value="4">Amerique du Sud</option>
<option value="5">Amerique du Nord</option>
</select>
<label>ville</label>
<select name=ville_e<? echo $j;?>>
<?PHP
$result=pg_exec($db,"select nom_ville from ville_desservie;");
$max=pg_numrows($result);
for($i=0 ; $i<$max ;$i++)
{
$vil=pg_fetch_array($result,$i);
$ville=$vil[0];
?>
<option value="<? echo $ville;?> "><?echo $ville;?></option>
<?
}
echo "</select>";
?>
<br />
<label>arrive </label>
<input size=8 type=text name="arr_e<? echo $j;?>" onKeyUp="javascript:couleur(this);"/>
<label>depart</label>
<input size=8 type=text name="dep_e<? echo $j;?>" onKeyUp="javascript:couleur(this);"/><br />
</td>
</tr>
vous avez remarqué que pour le moment j'ai codé les deux liste deroulantes quasi en dur. Donc si une personne choisi l'amerique du nord, rien ne lui empeche de choisir une ville européenne.
mais je n'arrive pas a modifier le tuto en consequence (ie faire le script pour le continent_e$j et pour la ville_e$j)....
Pour le moment j'ai cette version du script:
for($k=1;$k<=4;$k++)
{
$idr = isset($_POST['continent'])?$_POST['continent']:null;
$sql1 = "select code_continent, nom_cont from continent group by code_continent, nom_cont;";
$cont=pg_query($sql1);
$code_continent = array();
$continent = array();
/* On active un compteur pour les régions */
$nb_continent = 0;
while($ligne = pg_fetch_assoc($cont))
{
array_push($code_continent, $ligne['code_continent']);
array_push($continent, $ligne['nom_cont']);
/* On incrémente de compteur */
$nb_continent++;
}
if(isset($_POST['ok']) && isset($_POST['continent']) && $_POST['ville'] != "")
{
$continent_selectionnee = $_POST['continent'];
$ville_selectionne= $_POST['ville'];
?>
<p>Vous avez sélectionné la ville <?php echo($ville_selectionne); ?> pour le continent <?php echo($continent_selectionnee); ?></p>
<?php
}
?>
<form action="choix_ville.php" method="post" id="chgville">
<label>Continent</label>
<select name="continent" id="continent" onchange="document.forms['chgville'].submit();">
<option value="-1">- - - Choisissez un continent - - -</option>
<?php
for($i = 0; $i < $nb_continent; $i++)
{
?>
<option value="<?php echo($code_continent[$i]); ?>"<?php echo((isset($idr) && $idr == $code_continent[$i])?" selected=\"selected\"":null); ?>><?php echo($continent[$i]); ?></option>
<?php
}
?>
</select>
<?php
pg_free_result($cont);
/* On commence par vérifier si on a envoyé un numéro de continent et le cas échéant s'il est différent de -1 */
if(isset($idr) && $idr != -1)
{
/* Cération de la requête pour avoir les villes de ce continent */
$sql2 = "SELECT nom_ville FROM ville_desservie WHERE code_continent = $idr ORDER BY nom_ville;";
$rech_ville =pg_query($sql2);
/* Un petit compteur pour les villes */
$nd = 0;
/* On crée un tableau pour les noms des villes */
$nom_ville = array();
/* On va mettre noms des villes dans le tableaux*/
while($ligne_ville = pg_fetch_assoc($rech_ville))
{
array_push($nom_ville, $ligne_ville['nom_ville']);
$nd++;
}
/* Maintenant on peut construire la liste déroulante */
?>
<select name="ville" id="ville">
<?php
for($d = 0; $d<$nd; $d++)
{
?>
<option value="<?php echo($nom_ville[$d]); ?>"><?php echo $nom_ville[$d]; ?></option>
<?php
}
?>
</select>
<?php
//}
/* Un petit coup de balai */
pg_free_result($rech_ville);
}
?>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
</form>
<?
}
?>
donc ici j'ai 4 formulaires, et si je choisi un continents dnas la 1er liste deroulante, les 4 liste deroulantes des villes sont modifiées. Alors comment faire pour modifier seulement la 1er.
Ps: j'ai teste en concatenant $k à pas mal de champs mais cela n'a rien donner.
Merci. [/list][/u]
Alors, j'ai etudié le tuto est j'ai arrivé a le faire fonctionner sur ma machine avc ma base de données. Je l'aime bien ce petit script.
Par contre j'ai toujours le meme souci.
Je ne sais vraiment pas si je vais pouvoir l'arranger à ma sauce puisque j'aimerai l'inclure dans un formulaire deja existant.
Je vais essayer de décrire au maximun mon problème en étant le plus clair possible.
j'ai un 1 formulaire pour créer un vol. Sur la meme page, une fois qu'on a renseigner les champs du vol, il reste un champs qui dit " combien d'escale voulez vous créer pour ce vol".
On doit répondre par un entier.
[u]Deux possibilités sont possible [/u] :
[list] la reponse est 0.
En validant, on arrive sur la meme page avec le message suivant " vous avez decidé d'ouvrir le vol de numéro xxx avc 0 escales, si vous etes d'accord, valider sinon annuler". Si on annule, on efface tout, sinon on passe sur la page qui effectue l'insertion du vol dans la base de données.
La creation du vol sans escales est terminée.
[/list]
[list] la reponse est >0 (par exemple 2):
En validant, on se retrouve sur meme page mais il est apparu 2 formulaires de création d'escales avec comme champs : continent_e, ville_e, h d'arrivée_e et l'heure de départ_e.
C'est ici que j'aimerai implanter le script qui en fonction du continent choisi dans la 1 er liste deroulante, propose les villes possibles.
on doit remplir tous les champs et valider. on se retrouve sur la page pour l insertion dans la base de données.
[/list]
bien entendu sur la 1er page, comme je fais apparaitre les formulaires d'escales ou non, je recupere la reponse pour le nombre d'escales et dans une boucle for($j=1;$j<$nbescale;$j++) j'affiche les formulaire:
voila par exemple, mon formulaire pour une escale:
[php]
<tr class="escale">
<td colspan=6>
<u>Création de l'escale pour ce vol :</u>
<br />
<label>continent</label>
<select name="continent_e<? echo $j;?>" style="width:110px;">
<option value="1">Europe</option>
<option value="2">Asie</option>
<option value="3">Océanie</option>
<option value="4">Amerique du Sud</option>
<option value="5">Amerique du Nord</option>
</select>
<label>ville</label>
<select name=ville_e<? echo $j;?>>
<?PHP
$result=pg_exec($db,"select nom_ville from ville_desservie;");
$max=pg_numrows($result);
for($i=0 ; $i<$max ;$i++)
{
$vil=pg_fetch_array($result,$i);
$ville=$vil[0];
?>
<option value="<? echo $ville;?> "><?echo $ville;?></option>
<?
}
echo "</select>";
?>
<br />
<label>arrive </label>
<input size=8 type=text name="arr_e<? echo $j;?>" onKeyUp="javascript:couleur(this);"/>
<label>depart</label>
<input size=8 type=text name="dep_e<? echo $j;?>" onKeyUp="javascript:couleur(this);"/><br />
</td>
</tr>
[/php]
vous avez remarqué que pour le moment j'ai codé les deux liste deroulantes quasi en dur. Donc si une personne choisi l'amerique du nord, rien ne lui empeche de choisir une ville européenne.
mais je n'arrive pas a modifier le tuto en consequence (ie faire le script pour le continent_e$j et pour la ville_e$j)....
Pour le moment j'ai cette version du script:
[php]
for($k=1;$k<=4;$k++)
{
$idr = isset($_POST['continent'])?$_POST['continent']:null;
$sql1 = "select code_continent, nom_cont from continent group by code_continent, nom_cont;";
$cont=pg_query($sql1);
$code_continent = array();
$continent = array();
/* On active un compteur pour les régions */
$nb_continent = 0;
while($ligne = pg_fetch_assoc($cont))
{
array_push($code_continent, $ligne['code_continent']);
array_push($continent, $ligne['nom_cont']);
/* On incrémente de compteur */
$nb_continent++;
}
if(isset($_POST['ok']) && isset($_POST['continent']) && $_POST['ville'] != "")
{
$continent_selectionnee = $_POST['continent'];
$ville_selectionne= $_POST['ville'];
?>
<p>Vous avez sélectionné la ville <?php echo($ville_selectionne); ?> pour le continent <?php echo($continent_selectionnee); ?></p>
<?php
}
?>
<form action="choix_ville.php" method="post" id="chgville">
<label>Continent</label>
<select name="continent" id="continent" onchange="document.forms['chgville'].submit();">
<option value="-1">- - - Choisissez un continent - - -</option>
<?php
for($i = 0; $i < $nb_continent; $i++)
{
?>
<option value="<?php echo($code_continent[$i]); ?>"<?php echo((isset($idr) && $idr == $code_continent[$i])?" selected=\"selected\"":null); ?>><?php echo($continent[$i]); ?></option>
<?php
}
?>
</select>
<?php
pg_free_result($cont);
/* On commence par vérifier si on a envoyé un numéro de continent et le cas échéant s'il est différent de -1 */
if(isset($idr) && $idr != -1)
{
/* Cération de la requête pour avoir les villes de ce continent */
$sql2 = "SELECT nom_ville FROM ville_desservie WHERE code_continent = $idr ORDER BY nom_ville;";
$rech_ville =pg_query($sql2);
/* Un petit compteur pour les villes */
$nd = 0;
/* On crée un tableau pour les noms des villes */
$nom_ville = array();
/* On va mettre noms des villes dans le tableaux*/
while($ligne_ville = pg_fetch_assoc($rech_ville))
{
array_push($nom_ville, $ligne_ville['nom_ville']);
$nd++;
}
/* Maintenant on peut construire la liste déroulante */
?>
<select name="ville" id="ville">
<?php
for($d = 0; $d<$nd; $d++)
{
?>
<option value="<?php echo($nom_ville[$d]); ?>"><?php echo $nom_ville[$d]; ?></option>
<?php
}
?>
</select>
<?php
//}
/* Un petit coup de balai */
pg_free_result($rech_ville);
}
?>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
</form>
<?
}
?>
[/php]
donc ici j'ai 4 formulaires, et si je choisi un continents dnas la 1er liste deroulante, les 4 liste deroulantes des villes sont modifiées. Alors comment faire pour modifier seulement la 1er.
Ps: j'ai teste en concatenant $k à pas mal de champs mais cela n'a rien donner.
Merci. [/list][/u]