[RESOLU] Lier 3 listes déroulantes

Jordan31
Invité n'ayant pas de compte PHPfrance

16 juin 2014, 16:44

Bonjour à tous,

J'aimerais lier 3 listes déroulantes, en faite il faudrait qu'en fonction du choix de la première liste et de la seconde, la 3ième m'affiche des choix en rapport avec ces 2 derniers...

Voici mon code :
<?php echo "Communes :"; ?>      
        <select name="communes">
        <option value="0"> ----- Choisir ----- </option>
        <option value="1"> Esparros </option>
        <option value="2"> Capvern </option>
        <option value="3"> Heches </option>
        <option value="4"> Tibiran-Jaunac </option>
        </select>

        <?php echo "</br>Hébergement :"; ?>
        <select name="hebergement">
        <option value="0"> ----- Choisir ----- </option>
        <option value="1"> Hôtels </option>
        <option value="2"> Campings </option>
        </select>
        
        

        <!-- un bouton pour valider -->
        <input type="submit" value="Valider" name="OK">
       
    <?php 
        
    include'page-description-h-c.php';
        
        $description = array(
                                                        1 => array(1 => $descriptionhotelesparros, 2 => $descriptioncampingesparros),
                                                        2 => array(1 => $descriptionhotelcapvern, 2 => $descriptioncampingcapvern),
                                                        3 => array(1 => $descriptionhotelheches, 2 => $descriptioncampingheches),
                                                        4 => array(1 => $descriptionhoteltibiran, 2 => $descriptioncampingtibiran)
                                                );
        if(($_POST['communes']==0) and ($_POST['hebergement'])==0)
            {                                        
                echo " ";
            }
        else
            {
                echo $description[$_POST['communes']][$_POST['hebergement']];
            }
        echo "</div>";
Pour le moment j'en est 2 mais je sais pas comment faire la troisième.. Il faudrait qu'elle m'affiche des choix en fonction de ce que j'ai choisi aux 2 premières.

Je sais pas si j'ai était clair..

Merci pour vos idées! :)

Mammouth du PHP | 2278 Messages

16 juin 2014, 17:21

Vaguement:
liste principale select normal
liste 1 liée à choix 1 de liste principale HIDDEN
etc etc
Quand tu sélectionnes un item dans la liste principale, tu déclenches javascript qui dévoile la liste liée correspondante
exemple là:
http://www.w3schools.com/js/tryit.asp?f ... s_dropdown
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Jordan31
Invité n'ayant pas de compte PHPfrance

16 juin 2014, 17:28

Je comprends pas c'que tu veux faire... Désolé je débute un peu donc pas facile..

Eléphant du PHP | 422 Messages

16 juin 2014, 17:30

hello

ton message est limpide mais il y a foison de tuto sur le sujet (google/ et même via la fonction recherche du forum ici !)

n'hésite pas à poster du code PHP
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Mammouth du PHP | 1339 Messages

16 juin 2014, 17:39

Oui pour moi, je ferais ca en AJAX ...
Faut donc maitriser un peu plus PHP et donc JavaScript (Idealement te pencher sur jQuery)...

Moi je fais comme ca :
<select name="select_1" id="select_1">
 <option value="">La liste des options</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
<select name="select_2" id="select_2">
 <option value="">Selectionnez une option dans la liste 1</option>
</select>
[javascript]// JavaScript Document

$(document).ready(function(){

$( "#select_1" ).change(function() {
$.ajax({
type: 'GET',
url: 'ta_page_avec_les_nouvelles_options.php',
data: $(this).val(), // Je suis pas sur de ca mais apprend le javascript !
processData: true,
async: false,
error:function(msg){
alert( 'Error !);
},
success:function(data){
$('#select_2').html(data);
}
});
});

});[/javascript]
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Jordan31
Invité n'ayant pas de compte PHPfrance

16 juin 2014, 17:54

Je vais essayer de me débrouiller avec ça, merci beaucoup !

Mammouth du PHP | 2278 Messages

16 juin 2014, 18:11

On peut faire assez simple:
<?PHP
/*Il faut forcer à 0 les choix de commune et d'hebergement pour le premier passage : aucun affichage;
Les autres fois, ils prennent la valeur choisie avant de valider*/
$commune = isset($_POST['commune']) ?  $_POST['commune'] : 0;
$hebergement = isset($_POST['hebergement']) ?  $_POST['hebergement'] : 0;

/* tableau à deux dimensions:
lignes: communes
colonnes: dscriptions 
*/
$descriptions =
array(
	1 => array(1 =>  "Hôtel Esparros", 2=>  "Camping Esparros", 3 => "Gîte Esparros"), 
	2 => array(1 => "Hôtel Capvern", 2 => "Camping Capvern", 3 =>"Gîte Capvern"),
	3 => array( 1 => "Hôtel Heches", 2 => "Camping Heches", 3 => "Gîte Heches"),
	4 => array(1 => "Hôtel Tibiran", 2 => "Camping Tibiran", 3 => "Gîte Tibiran"),
) ;

/* tableaux servant à montrer ce qui a été choisi*/
$commune_selected = array_fill(0,5, "");
$commune_selected [$commune] = "selected ='selected'";

$heberg_selected = array_fill(0,3, "");
$heberg_selected [$hebergement] = "selected ='selected'";

print"
/*pour que ton truc fonctionne, il faut créer un formulaire; un formulaire sans action recharge la même page en envoyant les choix faits*/
<form method = 'post'>
<Label for 'communes'>Communes   </label>     
 <select name='commune'>
      <option value='1'  $commune_selected[1]> Esparros </option>
         <option value='2' $commune_selected[2]> Capvern </option>
         <option value='3'  $commune_selected[3]> Heches </option>
         <option value='4'  $commune_selected[4]> Tibiran-Jaunac </option>
         </select>

      <Label for 'hebergement'>Hébergement   </label>    
         <select name='hebergement'>
         <option value='1' $heberg_selected[1]> Hôtels </option>
         <option value='2'  $heberg_selected[2]> Campings </option>
         </select>
               <!-- un bouton pour valider -->
         <input type='submit' value='Valider' name='OK'>
  </form>";   

/*Si un choix a été fait*/  
  if (($commune != 0) and ($hebergement != 0))
{
	$descro = $descriptions[$commune][$hebergement];
	print "$descro";
}
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Jordan31
Invité n'ayant pas de compte PHPfrance

17 juin 2014, 09:24

Désolé mais ton code ne marche pas, ça m'affiche une erreur dans le navigateur : " unexpected end of file " alors que j'ai tout vérifié..

Jordan31
Invité n'ayant pas de compte PHPfrance

17 juin 2014, 10:02

Si quelqu'un peut me trouver l'erreur.. moi je la voie pas.

Voici mon code :
<!doctype html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Mon widget</title>
    
</head>
<body>

<?php
/*
Plugin Name: Mon widget
Plugin URI: localhost/adaclive
Description: Widget test
Version: 1.0
Author: Jordan
Author URI: localhost/adaclive
License: GPL2+
*/

class MonWidget extends WP_Widget 
{
 
    function MonWidget()
    {
        // Constructeur
        parent::WP_Widget(false, $name = 'MonWidget', array("description" => 'Afficher texte'));
    }
 
    function widget($args, $instance)
    {        
        echo $args['before_title'];
        echo "<div style='color: red; font-weight: 700; text-align: center; font-family: verdana; text-shadow: 1px 1px 1px black; '>";
        echo apply_filters('widget_title', $instance['title']);
        echo "</div>";
        echo $args['after_title'];
    
        
    
        echo "<div style='border: 2px solid black; border-radius: 15px; padding: 5px; width: 300px; '>"; 
   
        $commune = isset($_POST['commune']) ?  $_POST['commune'] : 0;
        $hebergement = isset($_POST['hebergement']) ?  $_POST['hebergement'] : 0;

        /* tableau à deux dimensions:
        lignes: communes
        colonnes: dscriptions 
        */
        $descriptions =
                array(
                        1 => array(1 =>  "Hôtel Esparros", 2=>  "Camping Esparros", 3 => "Gîte Esparros"), 
                        2 => array(1 => "Hôtel Capvern", 2 => "Camping Capvern", 3 =>"Gîte Capvern"),
                        3 => array(1 => "Hôtel Heches", 2 => "Camping Heches", 3 => "Gîte Heches"),
                        4 => array(1 => "Hôtel Tibiran", 2 => "Camping Tibiran", 3 => "Gîte Tibiran"),
                    ) ;

        /* tableaux servant à montrer ce qui a été choisi*/
        $commune_selected = array_fill(0,5, "");
        $commune_selected [$commune] = "selected ='selected'";

        $heberg_selected = array_fill(0,3, "");
        $heberg_selected [$hebergement] = "selected ='selected'";

        /*pour que ton truc fonctionne, il faut créer un formulaire; un formulaire sans action recharge la même page en envoyant les choix               faits*/

        print"

            <form method = 'post'>
            <Label for 'communes'>Communes   </label>     
             <select name='commune'>
                  <option value='1'  $commune_selected[1]> Esparros </option>
                  <option value='2' $commune_selected[2]> Capvern </option>
                  <option value='3'  $commune_selected[3]> Heches </option>
                  <option value='4'  $commune_selected[4]> Tibiran-Jaunac </option>
             </select>

           <Label for 'hebergement'>Hébergement   </label>    
            <select name='hebergement'>
                 <option value='1' $heberg_selected[1]> Hôtels </option>
                 <option value='2'  $heberg_selected[2]> Campings </option>
            </select>
                   <!-- un bouton pour valider -->
                 <input type='submit' value='Valider' name='OK'>
           </form>";   

        /*Si un choix a été fait*/  
        if (($commune != 0) and ($hebergement != 0))
        {
                $descro = $descriptions[$commune][$hebergement];
                print "$descro";
        }

        
        
        
    }
    
    
    
    function update($new_instance, $old_instance)
    {
        $instance = array();
        $instance['title'] = strip_tags( $new_instance['title'] );
        $instance['description'] = strip_tags( $new_instance['description'] );
 
        return $instance;
    }
 
    function form($instance)
    {
        if ( isset( $instance['title'] ) ) {
            $title = $instance['title'];
        }
        else {
            $title = "mon titre";
        }
 
            $description = $instance['description'];
    ?>
        <p>
        <label for="<?php echo $this->get_field_id('title'); ?>">
                   Titre :
                </label>
        <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>"
                name="<?php echo $this->get_field_name('title'); ?>" type="text"
                value="<?php echo esc_attr($title); ?>" />
 
        <label for="<?php echo $this->get_field_id( 'description' ); ?>">
                   Description :
                </label>
        <input class="widefat" id="<?php echo $this->get_field_id('description'); ?>"
                name="<?php echo $this->get_field_name('description'); ?>" type="text"
                value="<?php echo esc_attr($description); ?>" />
        </p>
        
             
    }
  
} 
 
<?php

add_action('widgets_init', create_function('', 'return register_widget("MonWidget");'));

?>

</body>
</html>

Mammouth du PHP | 1339 Messages

17 juin 2014, 11:29

1° Le <?php ligne 137.
2° Dans ta function form($instance), met tout en PHP ...
    function form($instance)
    {
        
 
            $description = $instance['description'];

        echo '<p>
        <label for="'.$this->get_field_id('title').'">
                   Titre :
                </label>
        <input class="widefat" id="'.$this->get_field_id('title').'"
                name="'.$this->get_field_name('title').'" type="text"
                value="'.esc_attr($title).'" />
 
        <label for="'.$this->get_field_id( 'description' ).'">
                   Description :
                </label>
        <input class="widefat" id="'.$this->get_field_id('description').'"
                name="'.$this->get_field_name('description').'" type="text"
                value="'.esc_attr($description).'" />
        </p>';
       
       
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Jordan31
Invité n'ayant pas de compte PHPfrance

17 juin 2014, 13:46

Merci beaucoup ça marche :)

Mammouth du PHP | 2278 Messages

17 juin 2014, 16:57

Le minimum serait de marquer le sujet RESOLU
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD