Form con tag select dinamici

MaxAndreon

Utente Attivo
23 Nov 2009
34
0
0
Ciao ragazzi, vorrei chiedervi un consiglio, dato che sono nuovo con il PHP.

Io vorrei realizzare un form dove l'utente puo scegliere determinate caratteristiche di un prodotto tramite tag select ed eventualmente campi di testo. In base a quello che l'utente sceglie verrà poi indirizzato alla pagina del prodotto selezionato.
Lo mostro per chiarezza (per semplicità tralascio molte altre voci, la sturuttura è comunque questa):
HTML:
<html>
<head>
<title></title>
</head>
<body>
	<form action="elabora.php" method="post">
		<label>Cerca: <input type="text" />
		</label>
		<label>Tipologia
		<select>
			<option value="rigenero_caldo">Rigenero a caldo</option>
			<option value="rigenero_freddo">Rigenero a freddo</option>
			<option value="azoto">Generazione azoto</option>
		</select>
		</label>
		<label>Filtrazione
		<select>
			<option value="flangiato">Flangiato</option>
			<option value="filettato">Filettato</option>
			<option value="doppio_flang">Doppio Flangiato</option>
			<option value="doppio_filett">Doppio Filettato</option>
		</select>
		</label>
		<label>Portata Nm<sup>3</sup>
		<select>
			<option value="50">50</option>
			<option value="150">150</option>
			<option value="300">300</option>
			<option value="500">500</option>
			<option value="800">800</option>
			<option value="1500">1500</option>
			<option value="2500">2500</option>
			<option value="5000">5000</option>
		</select>
		</label>
		<button type="submit">Cerca nel sito!</button>
	</form>
</body>
</html>

Immagino che magari non sia un form complesso, ma per un neofita è facile perdere la via :p
Quindi io come mi devo comportare per far si che (ad esempio):
-l utente mi selezioni "rigenero caldo - filettato - 150" -> vai a "pippo.php";
l'utente mi selezioni "rigenero caldo - doppio flangiato - 2500" -> vai a pluto.php
l'utente mi selezioni "rigenero freddo - flangiato - 5000" -> vai a "john.php"
l'utente mi selezioni "rigenero freddo - flangiato - 800" -> vai a "marco.php"

...e via dicendo con tutti i possibili "intrecci" tra i tag select.

Immagino ci sarà sicuramente da lavorare con database. Mi sto complicando la vita secondo voi?:hammer: perchè come vedete dall'esempio, mi basta cambi un solo valore per dover visualizzare un altro prodotto...
Qualche dritta?
 
ciao
scusa se ti dico una cosa, ma mi sembra che con il metodo che tu dici dovresti farti 96 pagine diverse e, o una serie di if o select che non finisce più.
prima di partire in quarta non ti converrebbe ripensare un po' al tutto?
se (da come immagino) le varie pagine non sono altro che le caratteristiche tecnice del prodotto, non ti converrebbe usare una pagina sola utilizzando un db? per esempio basato su codici prodotto?
 
ciao borgo_italia,
in effetti ci ho ripensato un attimo, perchè è vero che son partito con la prima idea che mi è venuta in mente, e appunto cosi mi ritroverei davvero con milioni di pagine.

Quindi in poche parole il tuo consiglio è (correggimi se sbaglio):
-creare un database con tutti i codici e le caratteristiche dei prodotti;
-creare delle query che mi "leggano" i valori dei tag select selezionati dall'utente;
-restituirmi a video il codice del prodotto (che sarà un link che poi mi porterà al prodotto in questione).
Giusto?
 
ciao
grosso modo è quello che pensavo.
volevo pero osservare una cosa (che prima non avevo notato) dovresti mettere i nomi ai campi di input e select altrimenti come fa la pag elabora.php a sapere cosa l'utente a selezionato.

se hai un minuto di pazienza ti faccio avere un'idea di base
 
Si è vero, avendo scritto di fretta li ho tralasciati.
Ok, aspetto la tua idea...

Specifico che è la prima volta che mi metto a fare una cosa di questo genere :) quindi sono andato un po in crisi...

Intanto ti dico quello che ho pensato:
-creare il database;
-creare la tabella "prodotti" con i campi "id, nome_prodotto, filtrazione, portata_aria";
- e poi il panico...
 
C'è un problema in quel form, se uno si dimentica o non seleziona comunque uno dei prodotti, o ne seleziona solo parte che succede?
Non sarebbe meglio creare una specie di selezione obbligata?
Per esempio se uno seleziona dalla prima select Generazione azoto, a quel punto si rendono evidenziate solo le select con i prodotti che prevedono quel trattamento.
Ora non mi intendo di questo tipo di prodotti, ma se per esempio per Generazione azoto -> Flangiato non è prevista la portata sotto i 10 Nm queste non dovrebbero essere selezionabili per evitare sviste.
Altrimenti rischi una montagna di redirezoni verso una paginba con scritto "Non trovato!" o "Selezione impossibile", cosa che fa incaSSare tantissimo gli utenti.
 
Osservazione giustissima Marco, ci avevo pensato a questa cosa però per il momento non avevo detto ancora niente perchè volevo fare uno step per volta ;)

In effetti, neanche a farlo apposto, per generazione azoto avevo idea di rendere non selezionabile i select "filtrazione" e "portata aria".
Però pensavo una cosa che si potesse sviluppare dopo...
 
ciao
ecco un'idea di base:
form di ricerca (nei value metterei dei numeri e/o lettere)
anche questa sarebbe bene che fosse una pag php
PHP:
	<form action="elabora.php" method="post">
		<label>Cerca: <input name="cerca1" type="text" id="cerca1" />
		</label>
		<label>Tipologia
		<select name="tipo" id="tipo">
			<option value="RC">Rigenero a caldo</option>
			<option value="RF">Rigenero a freddo</option>
			<option value="N">Generazione azoto</option>
		</select>
		</label>
		<label>Filtrazione
		<select name="filtro" id="filtro">
			<option value="01">Flangiato</option>
			<option value="02">Filettato</option>
			<option value="03">Doppio Flangiato</option>
			<option value="04">Doppio Filettato</option>
		</select>
		</label>
		<label>Portata Nm<sup>3</sup>
		<select name="portata" id="portata">
			<option value="50">50</option>
			<option value="150">150</option>
			<option value="300">300</option>
			<option value="500">500</option>
			<option value="800">800</option>
			<option value="1500">1500</option>
			<option value="2500">2500</option>
			<option value="5000">5000</option>
		</select>
		</label>
		Cerca nel sito!
		<input type="submit" name="Submit" value="cerca">
	</form>

in un secondo tempo farei anche le select dinamiche anche loro collegati a db
in modo che se aggiungi/elimini un tipo/filtro/portata non devi rifare la pagina

farei diventare la pagina che hai chiamato elabora.php la presentazione delle caratteristice

pagina elabora.php
dopo aver eseguito i vari controlli sugli input (es non vuoti) preleverei i vari valori
es.
PHP:
<?php
//sopra i controlli e connessione al db
$tipo=$_POST['tipo'];
$filtro=$_POST['filtro'];
$portata=$_POST['portata'];
//genero il codice del prodotto
$cod_prod=$tipo.$filtro.$portata;
/* se ad es. l'utente ha selezionato
Rigenero a freddo
Filettato
800 normal mc, il codice del prodotti risulterà
RF02800
*/
//quindi dalla tabella dei prodotti eseguo la query
$query="SELECT * FROM tab_prodotti WHERE codice='$cod_prod'";
// ecc....e quindi mostro tutto quello che c'è da mostrare
//è evidente che la pagina deve essere impostata in modo da avere una
//una presentazione grafica gradevole
?>
secondo me, un primo approccio potrebbe essere la creazione di tabelle come es.
1. tabella_tipo
id int(12)autoincrement primary key
cod varchar(2) NOT NULL //conterrà es RC
tipo varchar(50) NOT NULL
2. tabella_filtro
id int(12)autoincrement primary key
cod varchar(2) NOT NULL //conterrà es 04
filtro varchar(50) NOT NULL
3. tabella_portata
id int(12)autoincrement primary key
cod varchar(5) NOT NULL //conterrà es 5000
filtro varchar(50) NOT NULL
4. tabella_prodotti
id int(12)autoincrement primary key
cod varchar(10) NOT NULL //conterrà es RF045000
nome varchar(255) NOT NULL // il nome del prodotto
altezza
largezza
foto
descrizione......


considera comunque che questa è solo un'idea di base tutta da sviluppare e, un consiglio,
usa carta e matita prima di scrivere il codice
 
PHP:
C'è un problema in quel form, se uno si dimentica o non seleziona comunque uno dei prodotti,
osservazione più che giusta.
nella parte in cui si presenta il prodotto (elabora.php) si devono eseguire i controlli (es che tutti i select siano stati selezionati) poi una volta generato il codice dalla select si verifica se il codice esista, se non esiste si lancia messaggio e si torna al form
 
PHP:
C'è un problema in quel form, se uno si dimentica o non seleziona comunque uno dei prodotti,
osservazione più che giusta.
nella parte in cui si presenta il prodotto (elabora.php) si devono eseguire i controlli (es che tutti i select siano stati selezionati) poi una volta generato il codice dalla select si verifica se il codice esista, se non esiste si lancia messaggio e si torna al form
Sì certo si può fare così, ma il rischio è sempre lo stesso, cioè l'utente prima riempie il form a caso poi preme invio e infine questo risponde dicendo che ha sbagliato a selezionare i prodotti.
Tu useresti un form che non ti dice cosa fare ma lasci che sia il caso a darti il giusto responso? Io credo di no, io penso che tu vorresti poter selezionare i prodotti senza dover affidarti al caso perché non ricordi se quel prodotto esiste per quella categoria.
Io penso che alla fine qui Ajax potrebbe aiutare parecchio, dopo tutto si tratta di verificare che sul database esiste una correlazione per il prodotto in questione [ajax <---> php] e poi attraverso la risposta si generano le giuste option, oppure si deselezionano quelle che non c'entrano, insoma questo è un problema secondario.

Osservazione giustissima Marco, ci avevo pensato a questa cosa però per il momento non avevo detto ancora niente perchè volevo fare uno step per volta ;)

In effetti, neanche a farlo apposto, per generazione azoto avevo idea di rendere non selezionabile i select "filtrazione" e "portata aria".
Però pensavo una cosa che si potesse sviluppare dopo...

D'accordo ma la progettazione di un'applicazione non può passare solo per step, bisogna lavorarci vedendo la dimensione d'insieme o rischi di non riuscire a prendere una strada giusta.
Per esempio per fare questa cosa, bisogna scrivere un pezzo di codice che a sua volta generi le select con le giuste opzioni per ogni prodotto, ma per fare questo è necessaria l'integrazione con il database.
Non che sia difficile da realizzarsi, però è bene avere l'intero quadro d'insieme altrimenti rischi che un domani più che una modifica diventi un rattoppo.

@Borgo questo il codice per le giuste label
<label for="cerca1">Cerca: </label><input name="cerca1" type="text" id="cerca1" />
<label for="tipo">Tipologia</label>
<select name="tipo" id="tipo">
<option value="RC">Rigenero a caldo</option>
Se non ci metti l'indicazione del campo a cui la label deve puntare, tanto vale che nemmeno la usi, l'etichetta serve a quello.
Poi, anche se funziona, ma solo perché alcuni browser digeriscono anche i sassi, la label va messa includendo solo il testo e non il campo a cui punta.
 
Grazie a entrambi per le dritte, ora terrò in considerazione tutto e subito per evitare (tanti) casini futuri :)
Quindi Marco come dovrei operare per far si che le select non siano selezionabili per determinate categorie (ad es. per "generazione azoto" far si che le select "filtrazione" e "portata" non siano selezionabili)?

Magari possono sembrare cose elementari, è che questa è la mia prima applicazione pratica dopo aver letto, letto e riletto da autodidatta documentazioni varie (con esempi purtroppo praticamente mai riusciti), col risultato di finire nel pallone..
 
ciao

In questo esempio, associamo implicitamente due etichette con due controlli per l'immissione di testo:

<FORM action="..." method="post">
<P>
<LABEL>
Nome
<INPUT type="text" name="nome">
</LABEL>
<LABEL>
<INPUT type="text" name="cognome">
Cognome
</LABEL>
</P>
</FORM>

se leggi bene il sistema è citato proprio dive hai indicato


p.s.
con questo ti vglio dire che entrambi i sistemi sono valiadi
 
ciao
name = "nome" e name = "cognome" fanno gia da etichette per rielaborare i dati del form?
no, il name dell'input serve per poi prelevare il dato (value) ed elaborarlo
es.

$nome_el=$_POST['nome'];
$cognome_el=$_POST['cognome'];
 

Discussioni simili