Javascript / PHP liste deroulante ect ... + bdd

Bonjour,

je suis actuellement en train de faire un formulaire pour faciliter la saisie d’info dans une base de donnée. Ce formulaire sera composé de :

  • 3 listes deroulantes (le contenu de chacune de dependant de l’autre ex : marque - sous marque - modele)
  • 2 champs texte a remplir à la main
  • 1 bouton valider :smiley:

Une fois valider 5 champs seront inséré dans la base (choix des 3 listes + les 2 champs textes)

C’est un formulaire qui ne sera pas public il n’est là que pour faire de la saisie donc le referencement, l’accessibilité ect … je m’en fiche :smiley: mon soucis et que pour les listes deroulantes cela va être du javascript non ? une fois le formulaire validé comment faire pour récupérer de choix de la liste afin de l’insérer dans la base ?

Est ce que je veux faire est “logique” ou il faut que je fasse ça en 2 étapes & donc 2 validations (listes puis champs) ?

PHP je m’en sort bien ça va :slight_smile: (c’est déjà ça) mais alors javascript j’y connais rien :frowning:

Merci

Tu peux :

  • soit passer par Javascript (requéte XMLHTTPRequest qui te permettra d’apeller une page PHP en paralléle sans rafraichir toute ta page).
  • soit par PHP (en passant une variable GET ou POST à ta page et en la rafraichissant à chaque remplissage de liste déroulante).
    Edité le 08/02/2008 à 09:38

Merci :slight_smile:

Bon j’ai vite abandonné la 1ere soluce, vraiment j’aime po le javascript :stuck_out_tongue: donc j’ai pris la 2ème et ça marche nikel il y a un peu de javascript mais ça va je m’en suit sorti maintenant il y a plus qu’a remplir les menus …

Pour ceux que ça interesse voila le menu (il y en a 3 en tout) :

<form>
<select onChange="location = this.options
[this.selectedIndex].value">
<option value="fiche.php?a=0" <? if ($a == "") { echo "selected=\"selected\""; } ?>>Selectionner une peche<option>
<option value="fiche.php?a=1" <? if ($a == 1) { echo "selected=\"selected\""; } ?>>1</option>
<option value="fiche.php?a=2" <? if ($a == 2) { echo "selected=\"selected\""; } ?>>2</option>
<option value="fiche.php?a=3" <? if ($a == 3) { echo "selected=\"selected\""; } ?>>3</option>
<option value="fiche.php?a=4" <? if ($a == 4) { echo "selected=\"selected\""; } ?>>4</option>
<option value="fiche.php?a=5" <? if ($a == 5) { echo "selected=\"selected\""; } ?>>5</option>
<option value="fiche.php?a=6" <? if ($a == 6) { echo "selected=\"selected\""; } ?>>6</option>
<option value="fiche.php?a=7" <? if ($a == 7) { echo "selected=\"selected\""; } ?>>7</option>
</select>
</form>

Ensuite je fais un switch pour tester le choix du 1er menu et afficher le 2nd menu correspondant, idem pour le 3eme menu (sauf que lui n’a d"url vu que c’est la validation du formulaire qui fais la suite):

switch ($a)
	
{
	
case 1: ?> <form>
<select onChange="location = this.options
[this.selectedIndex].value">
<option value="fiche.php?b=0&a=1" selected="selected">Selectionner un materiel<option>
<option value="fiche.php?b=11&a=1" <? if ($b == "11") { echo "selected=\"selected\""; } ?>>1</option>
<option value="fiche.php?b=12&a=1" <? if ($b == "12") { echo "selected=\"selected\""; } ?>>2</option>
</select>
</form> <? ; break;

case 2: ?> <form>
<select onChange="location = this.options
[this.selectedIndex].value">
<option value="fiche.php?b=0&a=2" selected="selected">Selectionner un materiel<option>
<option value="fiche.php?b=21&a=2" <? if ($b == "13") { echo "selected=\"selected\""; } ?>>1</option>
<option value="fiche.php?b=22&a=2" <? if ($b == "14") { echo "selected=\"selected\""; } ?>>2</option>
</select>
</form> <? ; break;

default: ?> <form><select><option value="b=0" selected><option></select></form> <? ;


} 

Edité le 08/02/2008 à 16:38

A mon avis, là tu te fais du mal.

Utilise un for ! :slight_smile:

<form>
<select onchange="location = this.options[this.selectedIndex].value">
<?php for ($i = 0; $i < 8;  ++$i) {
  $u = sprintf('fiche.php?a=%d', $i);
  if ($i) {
?><option value="<?php echo $u; ?>"<?php if ($a == "") {?> selected="selected"<?php } ?>>Selectionner une peche</option><?php
  } else {
?><option value="<?php echo $u; ?>"<?php if ($a == $i) {?> selected="selected"<?php } ?>><?php echo $i; ?></option><?php
  }
?>
</select>
</form>

Personnellement, je réfléchirai à faire générique avant d’envisager une solution technique.

La question qui se pose c’est d’où viennent tes données?

  1. base de données? dans ce cas, ton switch est un mauvais départ
  2. données statiques? dans ce cas, je te suggère de transformer ce “statique” en statique mais sans code métier/d’affichage, genre:

ie:

<?php
$data = array(
  1 => array(
    'title' => 'Titre',
    'content' => array(
       2 => array(
        'title' => 'Titre',
        'content' => array(
          3 => array(
            'title' => 'foobar',
          ),
       ),
    ),
  ),
);

function write_select(array $data, $selected, $url, $disabledText) { 
?><select onchange="window.location.href = this.options[this.selectedIndex].value">
  <option<?php if ($selected === null || !isset($data[$selected])) {?> selected="selected"<?php } ?><?php echo $disabledText; ?></option>
<?php foreach ($data as $c as $d) {?>
  <option value="<?php printf($url, $c) ?>"<?php if ($c == $selected) {?> selected="selected"<?php } ?>><?php echo $d['title']; ?></option>
<?php }?></select><?php
}

$a = isset($_GET['a']) ? intval($_GET['a']):null;
$b = isset($_GET['b']) ? intval($_GET['b']):null;
$c = isset($_GET['c']) ? intval($_GET['c']):null;

// écriture contenu

?><form><?php
write_select($data, $a, 'fiche.php?a=%d', 'Sélectionner une pêche');
if ($a !== null && isset($data[$a])) {
  write_select($data[$a], $b, 'fiche.php?a=' . $a . '&b=%d', 'Sélectionner une materiel');
  if ($b !== null && isset($data[$a][$b])) {
    write_select($data[$a][$b], $c, 'fiche.php?a=' . $a . '&b=' . $b . '&c=%d', '?');
  }  
}
?></form>



Si tu as pigé ce code, alors je pense que tu comprendras ce que je veux dire. En tout cas, ça devrait déjà te simplifier la vie