Une selection suivant le resultat d'une precedente selection

Fredy
Invité n'ayant pas de compte PHPfrance

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

ViPHP
ViPHP | 2291 Messages

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 :?:

Mammouth du PHP | 881 Messages

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
Soyez artisans de paix

Fredy
Invité n'ayant pas de compte PHPfrance

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>
<?
}
?>

Eléphanteau du PHP | 39 Messages

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:
C'est en forgeant qu'on se forge

Fredy
Invité n'ayant pas de compte PHPfrance

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>'; 
} 
?> 

Mammouth du PHP | 881 Messages

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.
Soyez artisans de paix

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...