liste deroulante qui crée une listederoulant par rapport a son id qui lui meme..

Eléphant du PHP | 168 Messages

03 avr. 2009, 21:55

Bonjour,

Pas évident de trouver un titre :?

J'explique mon soucis de conception, vu que j'y est jamais été confronté c'est de l'inédit pour moi.

Le but à obtenir :

Image

A la base j'avais non sans mal tout généré via jquery etc.. mais je me noie dans les lignes de code JS et finit par m'étouffer.. si on ajoute avec ça, un visiteur qui a le malheur d'avoir le Js disabled, ben il peut plus rien faire..

J'aimerai donc le faire à la bonne vieille méthode sans ajax.

Est il mieux de faire une page par "liste déroulante" ou bien autant de condition dans la page en vérifiant si la list déroulante parente est déclarée et donc rentrer dans la condition qui génère la fille ?

une fois le choix effectué et la page rafraichie, faut 'il mettre un menu grisé et un bouton "modifier" a coté ? (qui d'ailleurs, je n'ai aucune idée de comment le concevoir sur le moment présent)

Faut il se base exclusivement sur les $_POST ? ou bien stocké en session ?

Bref un peu de flou pour moi car je ne sais pas si ma méthode est viable, pratique ou bien même optimisé/résonnable.


Merci d'avance de votre retour d'exp et comment vous géreriez ceci.

Eléphant du PHP | 168 Messages

04 avr. 2009, 23:08

celà inspire personne ? ou ma question est pas claire ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 avr. 2009, 23:55

Bonsoir,

Tiens, jette un oeil sur ce tuto, il devrait répondre à la plupart de tes questions. ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 168 Messages

05 avr. 2009, 00:07

ca me semble nickel en effet, je regarde ça !

Merci

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

05 avr. 2009, 11:07

RAPPEL :
Ne pas confondre "menu déroulant" et "liste déroulante". :non:
Les deux existent et sont vraiment très différents.

Ici, il s'agit de listes déroulantes.

J'ai corrigé ton titre et ton message.

Eléphant du PHP | 168 Messages

05 avr. 2009, 13:40

RAPPEL :
Ne pas confondre "menu déroulant" et "liste déroulante". :non:
Les deux existent et sont vraiment très différents.

Ici, il s'agit de listes déroulantes.

J'ai corrigé ton titre et ton message.
Ah oui pardon, en fait j'ai écrit menu mais penser à liste ;)

En tout cas le code de cyrano me semble adapté, j'ai juste regardé vite fait la démo, et j'ai juste un truc qui me fait peur, c'est la version php qui semble la plus simple pour moi.

Mais que ce passe t'il (en desactivant le JS) si sur son exemple, je prend admettons Languedoc > Herault, puis apres ça je change la région et je submit, ben je me retrouve avec une insertion érroné.

J'ai un id région qui n'est pas en rapport avec le dept choisi :(

Qu'est ce que je peux faire pour bloquer ce problème ? ce fameux lien "modifier" et griser la liste ?

Mammouth du PHP | 693 Messages

05 avr. 2009, 15:37

Si le javascript est désactivé, tu n'as pas grand chose pour controler que les utilisateurs ne fassent pas de fausses manipulations. De toute facon, il faut impérativement vérifier tes données avant de les enregistrer. D'une part parce qu'en bloquant le javascript, tu peux te retrouver avec des données erronnées, comme tu le dis, mais en plus, n'importe qui peut envoyer des données sur ton script, rien qu'en faisant un formulaire comme le tien.

Eléphant du PHP | 168 Messages

06 avr. 2009, 13:31

Alors je reviens pour vous montrer un premier rendu de ce que j'ai fait !

L'aspect graphique est au minimum, pour le moment je me concentre sur la programmation.

L'index :
<?php

// Inclusion des fichiers configs
require_once('conf/data.sql.php');
require_once('conf/func.sql.php');
require_once('conf/fonctions.php');

// Connexion à la BDD
connection_BD();

// Pour éviter les notices !
$clean = array();
$clean['categorie'] = (!empty($_POST['categorie']) ? (int)$_POST['categorie'] : NULL);
$clean['ss_categorie'] = (!empty($_POST['ss_categorie']) ? (int)$_POST['ss_categorie'] : NULL);
$clean['marques'] = (!empty($_POST['marques']) ? (int)$_POST['marques'] : NULL);
$clean['modeles'] = (!empty($_POST['modeles']) ? (int)$_POST['modeles'] : NULL);

// On efface la selection d'une liste si c'est demandé !
if(isset($_POST['remove_categorie'])) {
	$_POST['categorie'] = NULL;
	$clean['categorie'] = NULL;
	$_POST['ss_categorie'] = NULL;
	$clean['ss_categorie'] = NULL;	
	$_POST['marques'] = NULL;
	$clean['marques'] = NULL;
	$_POST['modeles'] = NULL;
	$clean['modeles'] = NULL;	
	
}
if(isset($_POST['remove_ss_categorie'])) {
	$_POST['ss_categorie'] = NULL;
	$clean['ss_categorie'] = NULL;	
	$_POST['marques'] = NULL;
	$clean['marques'] = NULL;
	$_POST['modeles'] = NULL;
	$clean['modeles'] = NULL;	
	
}
if(isset($_POST['remove_marques'])) {
	$_POST['marques'] = NULL;
	$clean['marques'] = NULL;
	$_POST['modeles'] = NULL;
	$clean['modeles'] = NULL;	

}
if(isset($_POST['remove_modeles'])) {
	$_POST['modeles'] = NULL;
	$clean['modeles'] = NULL;	
}

?>
<?php require_once('header.php'); ?>

<?php /*print_r($_POST); echo '<hr>'; print_r($clean);*/ ?>
<?php if(isset($_POST['ajouter_annonce'])) print_r($_POST); ?>
<div id="global">
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        <table width="100%" border="0" cellspacing="0" cellpadding="5">
          <tr>
            <td>Sélectionnez la catégorie :</td>
            <td><?php getCat(); ?> <?php submit2modif('categorie',$clean['categorie']); ?></td>
        </tr>
        <?php
		if(!empty($_POST['categorie'])){
		?>
        <tr>
        	<td>Sélectionnez la sous catégorie :</td>
            <td><?php getSousCat($_POST['categorie']); ?> <?php submit2modif('ss_categorie',$clean['ss_categorie']); ?></td>
        </tr>    
        <?php
		}
		?>
               
        <?php
		if(!empty($_POST['ss_categorie'])){
		?>
        <tr>
        	<td>Sélectionnez la marque :</td>
            <td><?php getMarques($_POST['ss_categorie']); ?> <?php submit2modif('marques',$clean['marques']); ?></td>
        </tr>    
        <?php
		}
		?>  

        <?php
		if(!empty($_POST['marques'])){
		?>
        <tr>
        	<td>Sélectionnez le modèle :</td>
            <td><?php getModeles($_POST['marques']); ?> <?php submit2modif('modeles',$clean['modeles']); ?></td>
        </tr>    
        <?php
		}
		?>  
                     

		<?php
		if(!empty($_POST['categorie']) && !empty($_POST['ss_categorie']) && !empty($_POST['marques']) && !empty($_POST['modeles'])){
		?>
        <tr>
        	<td colspan="2"><input type="submit" name="ajouter_annonce" value="Ajouter l'annonce" /></td>
        </tr>    
        <?php
		}
		?>
        </table>
    </form>  
</div>
<?php require_once('footer.php'); ?>
Et les fonctions :
<?php

function getCat() {
		
	if(!empty($_POST['categorie'])){
		
		$cat_id = (int)$_POST['categorie'];
		$req_categorie = 'SELECT * FROM categories WHERE cat_id = '.$cat_id;
		$res_categorie = sql_query($req_categorie,'AFF NOM CAT');
		$nbre_categorie = mysql_num_rows($res_categorie);
		
		if($nbre_categorie > 0){
			$ligne_categorie = mysql_fetch_assoc($res_categorie);
			echo '<strong>'.utf8_encode($ligne_categorie['cat_nom']).'</strong>';
   			echo '<input type="hidden" name="categorie" value="'.$ligne_categorie['cat_id'].'" />';    
		}
		else{
   			echo '<input type="hidden" name="categorie" value="0" />';    			
		}
	}else{
		
		$req_categorie = 'SELECT * FROM categories';
		$res_categorie = sql_query($req_categorie,'AFF CAT');
		
		?>
        <select name="categorie" style="width:350px;" id="categorie">
        <option value="0">----------</option>
        <?php
		while(FALSE !== ($ligne_categorie = mysql_fetch_assoc($res_categorie)) )
			{
			echo '<option value="'.$ligne_categorie['cat_id'].'">'.utf8_encode($ligne_categorie['cat_nom']).'</option>'."\r\n";
			}
		?>
		</select>                                
    <?php     
	}
}

function getSousCat($id) {
		
	if(!empty($_POST['ss_categorie'])){
		
		$ss_cat_id = (int)$_POST['ss_categorie'];
		$req_ss_categorie = 'SELECT * FROM `ss-categories` WHERE `ss-cat_id` = '.$ss_cat_id;
		$res_ss_categorie = sql_query($req_ss_categorie,'AFF NOM SS CAT');
		$nbre_ss_categorie = mysql_num_rows($res_ss_categorie);
		
		if($nbre_ss_categorie > 0){
			$ligne_ss_categorie = mysql_fetch_assoc($res_ss_categorie);
			echo '<strong>'.utf8_encode($ligne_ss_categorie['ss-cat_nom']).'</strong>';
   			echo '<input type="hidden" name="ss_categorie" value="'.$ligne_ss_categorie['ss-cat_id'].'" />';    
		}
		else{
   			echo '<input type="hidden" name="ss_categorie" value="0" />';    			
		}
	}else{
		
		$id_categorie = sql_protect($id);
		
		$req_ss_categorie = 'SELECT * FROM `ss-categories` WHERE `ss-cat_parent` = "'.$id_categorie.'" ORDER BY `ss-cat_nom` ASC';
		$res_ss_categorie = sql_query($req_ss_categorie,'AFF SS CAT');
		
		?>
        <select name="ss_categorie" style="width:350px;" id="ss_categorie">
        <option value="0">----------</option>
        <?php
			while(FALSE !== ($ligne_ss_categorie = mysql_fetch_assoc($res_ss_categorie)) )
				{
				echo '<option value="'.$ligne_ss_categorie['ss-cat_id'].'">'.utf8_encode($ligne_ss_categorie['ss-cat_nom']).'</option>'."\r\n";
				}
		?>
		</select>                                
    <?php     
	}
}

function getMarques($id) {
		
	if(!empty($_POST['marques'])){
		
		$marques_id = (int)$_POST['marques'];
		$req_marques = 'SELECT * FROM `marques` WHERE `marques_id` = '.$marques_id;
		$res_marques = sql_query($req_marques,'AFF NOM MARQUE');
		$nbre_marques = mysql_num_rows($res_marques);
		
		if($nbre_marques > 0){
			$ligne_marques = mysql_fetch_assoc($res_marques);
			echo '<strong>'.utf8_encode($ligne_marques['marques_nom']).'</strong>';
   			echo '<input type="hidden" name="marques" value="'.$ligne_marques['marques_id'].'" />';    
		}
		else{
   			echo '<input type="hidden" name="marques" value="0" />';    			
		}
	}else{
		
		$id_ss_cat = sql_protect($id);
		
		$req_marques = 'SELECT * FROM `marques` WHERE `marques_parent` = "'.$id_ss_cat.'" ORDER BY marques_nom ASC';
		$res_marques = sql_query($req_marques,'AFF MARQUES');
		
		?>
            <select name="marques" style="width:350px;" id="marques">
            <option value="0">----------</option>
            <?php
            while(FALSE !== ($ligne_marques = mysql_fetch_assoc($res_marques)) )
            	{
                echo '<option value="'.$ligne_marques['marques_id'].'">'.utf8_encode($ligne_marques['marques_nom']).'</option>'."\r\n";
            	}
            ?>
            </select> 
    <?php     
	}
}

function getModeles($id) {
		
	if(!empty($_POST['modeles'])){
		
		$modeles_id = (int)$_POST['modeles'];
		$req_modeles = 'SELECT * FROM `modeles` WHERE `modeles_id` = '.$modeles_id;
		$res_modeles = sql_query($req_modeles,'AFF NOM MODELE');
		$nbre_modeles = mysql_num_rows($res_modeles);
		
		if($nbre_modeles > 0){
			$ligne_modeles = mysql_fetch_assoc($res_modeles);
			echo '<strong>'.utf8_encode($ligne_modeles['modeles_nom']).'</strong>';
   			echo '<input type="hidden" name="modeles" value="'.$ligne_modeles['modeles_id'].'" />';    
		}
		else{
   			echo '<input type="hidden" name="modeles" value="0" />';    			
		}
	}else{
		
		$id_marques = sql_protect($id);
		
		$req_modeles = 'SELECT * FROM `modeles` WHERE `modeles_parent` = "'.$id_marques.'" ORDER BY modeles_nom ASC';
		$res_modeles = sql_query($req_modeles,'AFF MODELES');
		
		?>
        <select name="modeles" style="width:350px;" id="modeles">
        <option value="0">----------</option>
        <?php
        while(FALSE !== ($ligne_modeles = mysql_fetch_assoc($res_modeles)) )
        	{
            echo '<option value="'.$ligne_modeles['modeles_id'].'">'.utf8_encode($ligne_modeles['modeles_nom']).'</option>'."\r\n";
        	}
        ?>
        </select> 
    <?php     
	}	
}


function submit2modif($post,$valeur){
	if(!empty($valeur)){
		echo '<input type="submit" name="remove_'.$post.'" value="Modifier" />';
	}
	else{
		echo '<input type="submit" name="submit_liste" value="OK" />';
	}
}

?>
et voici la page d'exemple : http://annonces.espacetrial.com/etape1.php

Qu'en pensez vous ?
  • D'un point de vue ergonomique, facile d'accès et compréhensible ?
    Coté sécurité et ma façon de programmer en php ?
Merci

Eléphant du PHP | 168 Messages

07 avr. 2009, 14:02

Autre petite question.

Est il raisonnable et efficace de stocker entre chaque étape (cf lien du dessus) tout le contenu dans un array qui est enregistré dans une session ?

Sachant que je sais pas si c'est recommandé de stocker un contenu de textarea dans une session ?

Puis est ce une bonne méthode donc de stocker ceci dans ma session avec serialize puis quand j'arrive à l'etape 2, j'extrait tout ca et une fois les autres données validés je les rajoute au tableau puis session et hop on continue, etc.. ?