probleme de form

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme de form

par Jib » 02 avr. 2006, 19:08

OK merci, je vais la regarder aussi pour voir la différence avec mon script, mais je crois avoir trouver le moyen pour que ma procédure d'enregistrement de vols et d'escale fonctionne bien.


@++

par Truc » 02 avr. 2006, 18:55

Il y a aussi une version Javascript

par Jib » 02 avr. 2006, 17:38

Le probleme avecla version php c'est qu elle complique pas mal les choses avec les différents formulaires. EN plus, je ne veux pas rajouter des nouveaux boutons input.
Je vais retravailler la version javascript que j'avais fait hier.


Merci

par Truc » 02 avr. 2006, 17:32

ça vient du faite que tu as plusieurs formulaires sur la même page qui sont validés à tour de rôle.

Il faut que soit :
  • tu gères le retour des champs et affecte donc une valeur par défaut si elle existe et validation de tous les formulaires en même temps :?
  • Tu n'utilse qu'un seul formulaire pour toutes les listes (plus simple au niveau de la récupération des listes)
  • Passer à la version Javascript où il n'y à pas de rechargement de la page donc tu ne perds pas les choix des autres listes.

par Jib » 02 avr. 2006, 16:33

c'est sur.
Par contre je viens de faire d autres tests et je me rend compte que mon script ne fonctionne pas comme je le désire.
J'ai adapté ce script pour avoir 4 menus et bien je choisi un continent, il me propose les villes en conséquence mais lorsque je choisi un continent sur un autre formulaire, il efface le continent et la ville précédemment choisis.

Alors la j'essaye de detourner ce probleme mais ca complique pas mal le code^^

par Cyrano » 02 avr. 2006, 15:50

...surement du au fait que j'ai bien expliqué mon pb....
Bien formuler une question, c'est avoir correctement compris la nature exacte d'un problème... et c'est donc au minimum les 3/4 de la réponse :)

par Jib » 02 avr. 2006, 14:44

Désole mais j'ai finalement reussi, surement du au fait que j'ai bien expliqué mon pb.

En tout cas merci pour tout.

Cordialement

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 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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]

par Jib » 02 avr. 2006, 12:51

Salut,

je vais regarder la version php. Merci pour ton aide.

par Cyrano » 02 avr. 2006, 09:07

TU as regardé le tuto sur les listes déroulantes liées de la FAQ ?

par Jib » 02 avr. 2006, 02:24

bon j ai viré le form en trop, le seul probleme c que ca ne marche toujours pas. En gros, ce formulaire et dans une boucle for (c tjs le meme formulaire pour créer un vol et des escales) (code de mon pst precedent). je voudrais choisir un continent d escale et choisir une ville escale.
Le souci c'est que je ne sais pas combien il peut y avoir d escale donc je peux pas le coder en dur.

Merci

Re: probleme de form

par Truc » 02 avr. 2006, 01:11

J'ai l'impression qu'en le mettant dans un formulaire, les balises <form> créent une sorte de conflit
Tu veux dire que tu places ce code dans un autre formulaire, pour avoir:
<form>
   <form>
      ...
   </form>
</form>
Si oui, ce n'est pas correct, il ne faut pas emboiter les formulaires.
Garde que le 1er

probleme de form

par Jib » 02 avr. 2006, 00:54

Salut, j'ai ecrit (avec difficulté et de l'aide) un script javascript pour un formulaire qui contient deux menu déroulant.
Le 1er menu permet de choisir un continent et le deuxieme permet de choisir une ville de ce continent.
Mon script marche bien, je l'ai testé sur une page a moi.
J'ai voulu l'inclure dans un formulaire deja existant mais il ne fonctionne plus. J'ai beau choisir un continent, le menu deroulent des villes reste vide.
J'ai l'impression qu'en le mettant dans un formulaire, les balises <form> créent une sorte de conflit( je ne sais pas si on peut dire ca).

Voila mon script si ca peut vous aider.

Code : Tout sélectionner

villes = new Array(); <? // avec une requete sql, on remplit le tableau javascript $request = "SELECT code_continent AS c, nom_ville AS n FROM ville_desservie ORDER BY code_continent ASC, nom_ville ASC"; $result = @pg_query($request); $row = 0; while($enreg = @pg_fetch_array($result)){ echo 'villes['.$row.'] = '; echo "new Array(".$enreg['c'].", '".$enreg['n']."');\n"; $row++; } $nb_villes = $row; ?> // taille du tableau nb_villes = villes.length; // maj de la liste deroulante function aeroports(continent){ var x; var i, nb; // on vide la liste deroulante document.saisie.ville.options.length = 0; // on remplit la liste avec les valeurs du tableau "villes" // la première option x = new Option("--", 0); document.saisie.ville.options[0] = x; nb = 0; for(i=0; i<nb_villes; i++){ // si indice est ok, on ajoute l'option dans la liste déroulante if(villes[i][0]==continent){ x = new Option(villes[i][1], villes[i][1]); document.saisie.ville.options[document.saisie.ville.options.length] = x; nb++; } } // on sélectionne l'option dans la liste si l'utilisateur a tapé qqch et qu'il y a des résultats document.saisie.ville.options.selectedIndex = (nb>0 ? 1 : 0); // mise à jour du nombre d'elements dans la liste ; affichage sur la page, à coté de la liste déroulante document.getElementById("lselect").innerHTML = "[" + nb + "]"; } <form name="saisie"> <select name="continent" onChange="aeroports(this.options[this.selectedIndex].value)" style="width:110px;"> <option value="">--</option> <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> &nbsp; <select name="ville" style="width:140px;"> </select> <span id="lselect"><?="[ ".$nb_villes." ]";?></span> </form>
ps:en le placant sur la meme page mais en dehors du formulaire, celui ci se comporte bien...