Une selection suivant le resultat d'une precedente selection

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 : Une selection suivant le resultat d'une precedente selection

par Ryle » 22 mai 2008, 12:08

Modération :

Fredy, le forum FAQ contient des explications détaillées sur ce sujet :
:arrow: Formulaires : Listes déroulantes dynamiques liées

Vérifier dans la FAQ ou faire une petite recherche préalable n'est pas superflu.

par Patriboom » 22 mai 2008, 06:57

Deux choses sont à faire:
- que chaque <option> porte une valeur <option value="'.$i.'">
- que la balise <select> soit régie par un onchange

Ces deux éléments sont nécessaires pour un rafraîchissement de le page porteur de la valeur choisie.

par Fredy » 22 mai 2008, 04:57

Dans cette partie de code, comment puis je rafraichir la page pour avoir l'affichage du livre que j'ai choisis:
<?php 
for ($i=1; $i<=$nbre_pages; $i++) 
{ 
  echo '<option>' .$i. '</font></option>'; 
} 
?> 

par nass » 21 mai 2008, 22:48

Je te propose cette solution AJAX qui fonctionne mais reste à adapter à ta base
script AJAX:

Code : Tout sélectionner

<script language="JavaScript"> function voir_select(id) { req = new XMLHttpRequest(); req.onreadystatechange = function() { if(req.readyState == 4) { document.getElementById("zone_select").innerHTML=req.responseText; } } appel="select.php?val="+id; req.open("GET",appel , true); req.send(null); } </script>
echo "<select name='support'  onchange='voir_select(selectedIndex+1)'>";//appel de la fonction AJAX / le +1 parce que le selectedIndex comme en 0
          			
	while ($nb>$i){
	$data_support=mysql_fetch_object($result;
	echo "<option value='$data_->livre_id'>$data->livre_intitule</option>";
	$i++;
	}
	
echo "</select><br/>";
          
        <label >Classement :</label>
	<p id=zone_select >...</p>// zone où sera appelé ton select en fonction de ton choix precedent

Voici le fichier select.php où sera creer ton second select et qui sera charger sur ta page
$val=$_GET['val'];

$req=" SELECT * FROM taTable WHERE table_id_=$val";
$result=mysql_query($req);
$nb=mysql_num_rows($result);
$i=0;
echo "<select name='selectt'>";
while ($nb>$i){
$data=mysql_fetch_object($result);
echo "<option value='$data->select_id'>
$data->select_intitule</option>";
		$i++;
}
		echo "</select>";
Esperant que ça pourra t'aider :wink:

par Fredy » 21 mai 2008, 15:48

Je me suis un peu avance au code, mais pour le moment j'ai pas applique le chargement de page.

J'ai mis 3 select:

1- pour selectionner mon livre (livre),
2- pour selectionner la page de (de page),
3- la limite de ma selection (juska la page).

dans ma 2eme select, quand je la selectionne ca doit charge la page et attribuer un nombre superieur ou egale a la 3eme select.

par exemple: de page 1 jusqu a la page 5

mais je peux pas mettre de page 4 jusqu a la page 2, on ne peut pas lire un livre en marche arriere. mon code est:
<html>
<head>
<title>Untitled</title>
</head>
<body>
  <?php

// configuration

$link = mysql_connect ($host,$user,$pass);
mysql_query("SET CHARACTER SET 'utf8';", $link)or die('Erreur: '.mysql_error());
// selection de la DB
mysql_select_db($db) or die ('Erreur: '.mysql_error());

?>
<form action="<? $_SERVER['PHP_SELF'] ?>" METHOD="post"> 
<table width="500" border="0" align="center">
  <tr>
    <td>
    <?php

$select = 'SELECT * FROM livres ORDER BY ID ASC';
$result = mysql_query($select,$link)  or die ('Erreur: '.mysql_error() );
$total = mysql_num_rows($result);
// si les information sont inserees on les extrait
// si on a récupéré un résultat on l'affiche.
if($total) {
?>
<form action="<? $_SERVER['PHP_SELF'] ?>" METHOD="post">
<select name="livre">
<?  
    while($row = mysql_fetch_array($result)) {
	$livre = $row['livre'];
?>
<option><?php echo $livre; ?></option>
<?
} // fin de while
?>
</select>
<?
} // fin de if
else 'rien de rien';
?>
</td>
<td>
<?
// un test sur le livre qui a comme id = 1
$select1 = 'SELECT nbre_pages FROM livres WHERE id="1"';
$result1 = mysql_query($select1,$link)  or die ('Erreur: '.mysql_error() );
$total1 = mysql_num_rows($result1);

// si les information sont inserees on les extrait
if($total1) {

    while($row1 = mysql_fetch_array($result1)) {
	$nbre_pages = $row1['nbre_pages'];
}
?>
<form>
<select size="1">
<option>de</option>
<?php
for ($i=1; $i<=$nbre_pages; $i++)
{
  echo '<option>' .$i. '</font></option>';
}
?>
</td>
<td>
<select>
<option>a</option>
<?php

// cette j doit etre egale ou superieur a i
for ($j>=$i; $j<=$nbre_pages; $j++)
{
  echo '<option>' .$j. '</font></option>';
}
?>
</select>
</td>
</tr>
</table>
</form>
<?
}
?>

par Patriboom » 16 mai 2008, 21:27

Puisque PHP fonctionne du côté serveur, il te faudra recharger la page en fonction des choix faits antérieurement, un peu à la manière des sites où tu trouves des pilotes d'imprimantes ou de ...

Ton premier <select> doit référer à une fonction javascript qui recharge la page en lui indiquant la valeur.

Code : Tout sélectionner

<script language="javascript"> function Rechargeons() { document.location = "?chx=" + document.banane.Livre.value; } </script> <html> <head> <title>Untitled</title> </head> <body> <form name="banane"> <select name="Livre" onchange="Rechargeons();"> <option value="Rien1">Rien 1</option> <option value="Rien2">Rien 2</option> <option value="Rien3">Rien 3</option> <option value="Rien4">Rien 4</option> <option value="Rien5">Rien 5</option> <option value="Rien6">Rien 6</option> <option value="Rien7">Rien 7</option> </select> <?php if (isset($_GET["chx"]) { echo "Ici viendra donc le second select"; } ?> </form> </body> </html>
Ceci peut t'aider

par dunbar » 16 mai 2008, 21:27

Salut,

En français cela pourrais t'il donner :
Première page on sélectionne l'auteur
et la seconde les bouquins de l'auteur en question c'es bien ça :?:

Une selection suivant le resultat d'une precedente selection

par Fredy » 16 mai 2008, 16:41

Bonjour,

Pouvez-vous me donnez une idee sur comment choisir d'une <select> de ma base de donnee, et suivant cette selection les elements inclus doivent apparaitre dans la 2eme select <select> dans une form en php_self.

par exemple

j ai une table de livres et une autre du contenu de chaque livre:

table livre:
id
livre
auteur

table contenu:
paragraphe
page

quand je selectionne le 1er livre je peux selectionner ou je veux partir, sur quelle page, notant que chaque livre est differents de page a autre.

la structure derait ainsi:

livre ========= de page =========== a page

et j aurais comme resulat mon livre affiche de la page de depart a la page de fin.

merci pour votre aide